逆向 破解APP
小黑盒破解目标:
在特定的页面中插入自己写的页面(如在头条的新闻详情页中插入自己放进去的广告页面
效果图:
如果对本教程中终端的命令行或是工具的使用不熟悉的话,可以看看我的另一篇关于逆向工程的文章。
逆向的基础
小黑盒破解流程:
获取APP解密后的可执行文件
/var/containers/Bundle/Application/1312D372-0E9F-4CF3-9130-A365C08897DE/xiaoheihe.app/xiaoheihe
找到可执行文件xiaoheihe并看其是否是解密后的文件
otool -l xiaoheihe | grep cryptid
cryptid 0
cryptid 0
当然为什么会有两个cryptid 一个是armv7的构架下的,一个是arm64构架下的。
至于怎么解密,可以从越狱版的PP助手上下载app,或是在越狱手机中的Cydia中搜索本公司的“兔兔破解助手”。
解密成功后,将可执行文件放入到Hopper工具中进行二进制编译。
查看APP的图层结构
用查看图层工具进行对app图层界面中控制器的获取。
可利用的图层工具有:
Reveal
FLEXLoader
至于这两个工具的安装和用法,你可以看我的这篇文章。
图层工具的使用
通过工具可以知道控制器是:MaxWebBBSNewsViewController
那么下面就是在hopper中搜索MaxWebBBSNewsViewController可以看到里面有很多方法
但我们需要的是hook他的ViewDidLoad即可
Hook操作
预想:
需要在这个hook方法中的操作有
- 创建广告需要展示的View
- 该广告可能目前就是一条固定的url
- 在该控制器中的webView上添加我们的广告页面
- 在退出该控制器后我们需要remove掉广告view(当然再次进入详情页后还是得出现广告页面)
接下来的就是在xcode中创建我们的动态库插件了
动态库里面的步骤:
- 动态库的入口申明需要hook的方法
- 在hook的方法中首先执行官方APP自己的方法,之后添加我们需要完成的方法
- 代码的编写,编译运行
github代码
动态库的注入
注入(必须在最终的文件夹下)
./yololib xiaoheihe xiaoheiheLib.dylib
当然这里需要把我们需要的注入工具拷贝到xiaoheihe.app所在的文件目录下,同时cd到这个目录下,执行上面的命令。
至于工具的使用可以看看我的这篇文章,里面会介绍到我们注入的会有那些方法或是工具。
动态库的注入工具
APP的重签名
这里我们需要注意的坑有:
- 在xiaoheihe.app 中下建立embedded.mobileprovision证书的描述文件,当然这个描述文件和重签名时候用到的描述文件相同的bundleId
- 我们是在Payload下压缩文件,并改掉压缩后的文件类型.ipa
当然重签名你可以使用工具iOS App Singer,这个需要编译运行后即可。
之后需要用到时PP助手。
第一次在手机上安装,打开注入后的小黑盒,然而瞬间崩溃了
然后这种查找问题,发现是命令的问题,动态库应该是xiaoheiheLib.dylib
之后再注入,点开后并没有进入相应的hook方法中,然后又是各种找问题,发现在hook的入口必须
CHLoadLateClass(MaxWebBBSNewsViewController);
CHHook0(MaxWebBBSNewsViewController, viewDidLoad);
并且在编译动态库的时候最好选择Generic iOS Device,然后在编译获取到动态库,在注入签名,重新打开后。
成果:
在头条的新闻详情页面中出现了我们注入进去的页面,退出详情页后,不显示广告页面。