2018-12-30

代码注入

一般修改原始的程序,可以利用代码注入的方式。
注入代码可以选择利用FrameWork或者Dylib等三方库的方式注入。

一、FrameWork注入

  • 通过Xcode新建Framwork,将库安装进入APP包
  • 通过yololib注入Framwork库路径。命令:$yololib(空格)MachO文件路径(空格)库路径
    • 所有的Framwork加载都是由DYLD加载进入内存被执行的
    • 注入成功的库路径会写入到MachO文件的LC_LOAD_DYLIB字段中

1.重签名工程

新建或者打开需要注入代码的工程,修改对应版本,对工程进行重签名(此处可利用脚本进行自动重签名:在TARGETS-Build Phases中添加RUN Script,shell 中第一行里面输入工程中的脚本路径,然后直接Command+B进行编译,若编译失败,可Command+k清除下缓存,重启电脑打开工程重新编译)

重签名

此处,我事先把appSign.sh重签名脚本放在了工程根目录,${SRCROOT}/appSign.sh指令就是去运行根目录下的appSign.sh脚本文件。
编译成功后,当前工程中就多了一个Temp路径,里面有我们的app包;

此时,我们可以显示包内容,利用MachOView来查看可执行文件,重点关注load Command里的LC_LOAD_DYLIB字段,(这个字段决定了MarchO文件需要加载的一些三方库。程序启动时,dyld会去加载可执行文件,而应用中又依赖了这些三方库,三方库有的是在APP包里面,有的则是在系统里面,通过读取LC_LOAD_DYLIB字段,根据路径来加载这些第三方库,我们要做的FrameWork动态库注入,其实就是注入在此字段中,供程序加载)

2.注入自己的三方库

首先,新建FrameWork,然后在所建的FrameWork中插入代码,(为了测试,此处我自己新建了一个类,然后在load方法中NSLog一下)

新建framework


然后Command+B编译一下,app show-in-finder此时可以看到已经生成了对应framework,当然我们需要的是包里面含有此Framework,选择FrameWork注入这个包,显示包内容然后查看里面Frameworks文件夹,你可以看到此时里面已经又了ziyihook.framework(这是我自己所建的库名,实际名称以你自己所建为准)
对应framework


Framework中我们不需要添加所谓的依赖,只要在当前工程中创建了,它就会默认帮我们添加依赖了(当然,若是你的Xcode版本比较低的话,就需要手动添加一个依赖了,Copy Files里面)
注意:此时编译时已经将所建Framework打包进.app文件夹内,但是Command+R运行,并不会加载我们所创建的Framework,原因是因为对应MACH-O可执行文件中LC_LOAD_DYLIB字段并没有增加,即该字段中并没有我们所建Framework的路径。此时我们就需要去修改MACH-O,将framework路径加进去。
现在记录Frameworks文件夹中我们所建的库可执行文件,将它注入包中,记住这里的包不是当前工程的.APP包,我们编译运行重签名脚本时,当前工程的.app包就会被替换,运行的其实还是原来第三方ipa里面的可执行文件,所以我们需要修改的是原始的ipa包
此时我们可以通过yololib工具来进行修改MACH-O文件。(对原始.ipa包进行解压,显示包内容,进入iterm2,输入对应指令,我用的是越狱的微信ipa所以显示WeChat包名,后面是我们之前记录的所建库路径,直接回车即可修改成功。)
指令

然后检查一下MACH-O文件LC_LOAD_DYLIB中是否有增加,有增加即表示修改成功。
添加成功

OK,可以看到已经有了增加,有了相应路径就可以加载成功。修改成功后,只需在原始应用路径下打包Payload,将新生成的.ipa(包含了我们添加的framework)替换原来.ipa的即可


打包Payload


只保留新生成的ipa

Commad+K先清除下缓存,然后直接Command+R运行,可以看到已经打印,哈哈 开心。


成功注入

二、dylib注入

dylib库不属于ios的库,是macOS的库,其实很多插件就是采用这种方式注入的。

  • 通过Xcode新建Dylib库(注意:Dylib属于MacOS所以需要修改一些属性)
  • 添加Target依赖,让Xcode将自定义Dylib文件打包进入APP包。
  • 利用yololib进行注入。

1.重签名工程

同样的新建或者打开需要注入代码的工程,修改对应版本,对工程进行重签名。

2.添加dylib

点击“+”,选择macOS里的library。如图:


添加dylib

新建dylib

它和framework有很多不一样的地方需要注意:

  1. 新建的dylib属于macOS,而非iOS,所以选择target在iOS设备上无法编译,此时需要修改【Build Settings】下的【Base SDK】更改为iOS



    修改Base SDK

    2.要想把dylib跑到手机上,此时还需要修改签名,签名默认选择的是mac developer所以也要修改为ios developer


    修改code Sign

    3.此时编译,并不会生成dylib文件。还需要手动添加依赖,打包进framework中。

    添加依赖

    添加了依赖后,dylib文件就会被copy进我们的framework中去,然后被执行。
    此时Command+ B编译,framework文件夹就会有新建的dylib文件


3.修改March-O

同样的,注意点同上面framework注入。我们需要使用yololib工具来修改March-O文件,(增加LC_LOAD_DYLIB字段)。此时可以也采用脚本方式而不用终端。(终端中的命令都可以以脚本形式实现)
方法是在脚本文件中添加命令:
yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/libziyiHook.dylib"
左边是我们march-O路径,右边是插入的dylib路径

添加命令

同样的为了看到修改效果,我们在hook中写一句NSLog,看运行后是否打印。


添加NSLog

Command+R运行看答应结果,OK成功打印。搞定!


注入结果

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

推荐阅读更多精彩内容

  • 炭火起,烟渺渺;炉火旺,熠熠香。苏辙有诗曰:“闽中茶品天下高,倾身事茶不知劳。”在潮州当地,潮人无贵贱,嗜茶辄成瘾...
    墨沫观阅读 869评论 0 7
  • 忽听竹杖敲门声,一声急过两声慢。 谁家闺房传琵琶?细思小园无此声。
    林一野阅读 186评论 0 0
  • 最近APP内需要用到投电视功能,所以做了一个小小的封装,方便使用. 更新日志:1 2018-04-09 KVO监...
    半缘魔君阅读 3,202评论 9 4