"幽径探寻:Dylib动态库注入技巧"

上一篇文章: "专注实践:解析lldb砸壳实战技巧"

在iOS逆向工程中,动态库注入是一项关键技术,允许开发者在运行时向目标应用程序注入自定义的动态链接库(Dylib),从而实现各种定制化的功能扩展和修改。

通过动态库注入,可以实现诸如破解应用程序、修改游戏内存数据、实现插件化功能等任务。本文将探讨动态库注入的原理、方法和实践技巧,帮助读者深入理解并掌握这一强大的逆向工程技术。

我们利用以下工具进行注入。

1.yololib

我们将以LLDB创建的项目作为案例。

下面是编译后的Mach-O文件,用MachOView进行打开,即下图.

我们另外创建一个项目,创建动态库LKDylib

+(void)load {
    
    NSLog(@"~~success~~");
}

通过编译拿到动态库LKDylib

  • 使用yololib命令
yololib binary dylib file

yololib LLDBTest LKDylib.framework
2024-04-12 15:12:01.570 yololib[21869:278509] dylib path @executable_path/LKDylib.framework
2024-04-12 15:12:01.570 yololib[21869:278509] dylib path @executable_path/LKDylib.framework
Reading binary: LLDBTest

2024-04-12 15:12:01.570 yololib[21869:278509] Thin 64bit binary!
2024-04-12 15:12:01.570 yololib[21869:278509] dylib size wow 64
2024-04-12 15:12:01.570 yololib[21869:278509] mach.ncmds 22
2024-04-12 15:12:01.570 yololib[21869:278509] mach.ncmds 23
2024-04-12 15:12:01.570 yololib[21869:278509] Patching mach_header..
2024-04-12 15:12:01.571 yololib[21869:278509] Attaching dylib..

2024-04-12 15:12:01.571 yololib[21869:278509] size 58
2024-04-12 15:12:01.571 yololib[21869:278509] complete!

我们再打开MachOView

我们所创建的动态库注入成功

2.optool

Yololib通常用于在iOS应用中实现动态库注入,通过修改应用的可执行文件,使其能够加载外部动态库,实现定制化的功能扩展。

optool主要用于操作Mach-O文件中的加载命令(Load Commands),例如添加、删除、替换加载命令等。

optool不仅可以添加动态库,还可以把已添加的动态库删除.

git clone https://github.com/alexzielenski/optool.git

cd optool

git submodule update --init --recursive 
optool install -c load -p /Dylib/optool2/LKDylib.framework -t /Dylib/optool2/LLDBTest

Found thin header...
Inserting a LC_LOAD_DYLIB command for architecture: arm64
Successfully inserted a LC_LOAD_DYLIB command for arm64
Writing executable to /Dylib/optool2/LLDBTest...

动态库注入成功了

optool uninstall -p  /Dylib/optool2/LKDylib.framework -t /Dylib/optool2/LLDBTest

Found thin header...
removing payload from LC_LOAD_UPWARD_DYLIB...
Successfully removed all entries for /Dylib/optool2/LKDylib.framework
Writing executable to /Dylib/optool2/LLDBTest...

注入动态库删除了

尽管成功进行了动态库注入,但是在尝试安装应用时可能会遇到签名问题,此时需要进行重签名才能顺利安装。

动态库注入原理

在Mach-O文件中,加载命令(Load Command)描述了文件在内存中的加载情况,其中与动态库相关的加载命令主要包括以下几种类型:

  • LC_LOAD_DYLIB:用于指定要加载的动态库文件的路径和名称。每个LC_LOAD_DYLIB命令描述了一个要加载的动态库,可以在运行时动态链接到目标进程中。

  • LC_ID_DYLIB:用于指定动态库的名称和版本信息,以及动态库的兼容性版本号等。LC_ID_DYLIB命令通常用于标识动态库本身的信息。

  • LC_REEXPORT_DYLIB:用于重新导出其他动态库的符号,使得当前动态库可以提供对其他动态库中符号的访问。

  • LC_LOAD_WEAK_DYLIB:类似于LC_LOAD_DYLIB,用于指定要加载的动态库文件的路径和名称,但是在加载过程中如果找不到指定的动态库,则不会引发错误。

  • LC_LAZY_LOAD_DYLIB:用于指定要延迟加载的动态库,即在需要使用时再进行加载,而不是在程序启动时立即加载。

  • LC_PREBOUND_DYLIB:用于指定已经预绑定的动态库,即动态库已经在编译时进行了地址绑定,可以加快程序的启动速度。

  • 检测动态库注入成功:

遍历Load Command段,将找到的动态库加载命令与已加载的动态库路径进行比对,以确认注入是否成功。

  • 空白区域在Load Command段末尾:
    在Mach-O文件的Load Command段末尾留有空白区域,以满足段的页对齐要求,避免改变可执行文件的大小,因为Mach-O文件是基于偏移量进行计算的。

  • 新建动态库替换空白区域:
    注入动态库时,新建的动态库文件会取代Load Command段末尾的空白区域,确保注入的动态库不改变可执行文件的大小和结构。

  • 修改Mach-O Header内容:
    在注入过程中可能会修改Mach-O文件的Header内容,以确保动态库能够正确加载并与目标进程进行链接。

  • 重签名应用并安装到手机:
    在注入完成后,需要对应用进行重新签名以确保合法性,并将其安装到手机上。通过dyld加载应用时,动态库将被动态链接到目标进程中。

总结

动态库注入是一项强大而灵活的技术,通过将自定义的动态链接库加载到目标进程的内存空间中,并执行其中的代码,可以实现对目标进程的修改和控制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,333评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,812评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,016评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,293评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,650评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,788评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,003评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,741评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,462评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,681评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,168评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,528评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,169评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,119评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,846评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,719评论 2 274

推荐阅读更多精彩内容