iOS - 非越狱注入原理

2,105 阅读2分钟

原理分析

我们拿微信来做示例,拿到微信的可执行文件,并用 MachO 打开如下: image.png 这里的 LoadCommands 意思就是加载指令,这个是告诉dyld需要加载的一些库,往下翻: image.png 可以看到有一些 LC_LOAD_DYLIB SceneKit、PushKit、Webkit 等等,并且每一个都对应一个value路径,只要有这两个东西,dyld在加载可执行文件时就会把路径下对应的库加载进去。

所以第一步,我们要创建一个自己的 framework ,并且把该 framework 打包进IPA包里面,然后在 LoadCommands里添加一个字段,并指定value为我的 framework 的路径,这样在dyld加载时,就会对我们的 framework 进行加载,最终生成我们需要的可执行文件。

对微信进行代码注入

苹果签名双向验证原理 中最后有说明如何进行重签名,这里在这个项目的基础上进行操作,最后我会将源码上传,其中包含一个重签名脚本 wws.sh 本文会用到。

新建一个Target: WXHook image.png,并新建一个类: image.png

然后编译主工程,在得到的IPA里查看包内容,有一个framework文件夹,点进去: image.png

会发现 WXHook.framework 已经被打包进来了。

那么此时我们运行主工程会执行 WXHookTest 里的 load方法吗?并不会,此时只是将framework打包进来了,按照上面的原理,我们还需要对其进行链接。那么如何进行链接?这里我们使用 yololib,一句代码搞定:

#注入 $TARGET_APP_PATH : App的path  加上/$APP_BINARY:可执行文件的path
yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/WXHook.framework/WXHook"

yololib下载后放到 /usr/local/bin 文件夹才能使用 yololib 就会将你自己的 framework 注入到微信的可执行文件中。我们重新编译生成IPA,MachO查看可执行文件: 可以看到,WXHook已经被打包进可执行文件中。

这时候,我们再运行我们的工程,debug状态下,framework里的方法已经被执行了。 image.png

一些非官方App就是在自己的framework里通过Runtime做一些方法交换,来入侵App,窃取用户隐私等。

附件下载链接:链接: pan.baidu.com/s/1e95zfuW1… 提取码: 94wf