最近比较闲于是研究了一下app逆向,就拿大家都玩坏了的微信来开刀,上网随便找了个抢红包的动态库,去pp助手下了个越狱版本的微信ipa,然后通过yololib将动态库注入到微信ipa解压出来的可执行文件里面再打包,接着用 iOS App Signer进行重签名,接着用xcode安装重签名后的ipa文件,接着兴奋地打开微信,然后Oh, no,完美闪退,网上各种搜索都没找到合适的解决方案,不过还是找到了解决问题的线索,现在记录下这次重签名的过程踩过的坑防止以后又忘记了,如果可以帮到其他卡住的朋友们就再好不过了(本篇文章主要讲述的是重签名过程,具体砸壳和hook过程不涉及,想了解的朋友可以在文章末尾查看我列出的参考博文).
首先,假设你已经写好了一个dylib,然后通过yololib进行注入,具体的使用方法是先下载yololib的源码,编译生成一个yololib的二进制文件,然后在终端输入yololib二进制文件的地址 可执行文件的地址 dylib文件的地址
,敲回车,打印注入成功的信息,这里就是我碰到的第一个坑,yololib注入的时候其实并没有处理好可执行文件引用dylib的地址问题(直接就拿你终端输入的dylib文件的地址,坑!),这样注入的结果就是可执行文件运行的时候加载注入的dylib因为地址指向的是dylib在你电脑上面的地址,当然加载失败然后闪退.
至于我是怎么发现这个问题的呢?首先你要有一台越狱手机(这样才能通过scp命令将手机上面的文件拷贝到电脑上),下载并安装好libimobiledevice-macosx这个工具,通过这个工具可以在终端实时看到手机的log信息,然后打开注入了dylib的app,闪退,发现log信息上面打印了这个app发生了crash,相关的崩溃信息已经xxxx路径,接着你将那个路径指向的文件拷贝到电脑上面就可以看到崩溃的原因了.
解决方法就是先将你要注入的dylib放到和可执行文件同一个文件夹下面,然后让你的终端指向这个文件夹的地址,接着上面的命令就可以改成yololib二进制文件的地址 可执行文件的文件名 dylib文件的文件名
.OK这个坑填完之后再次兴奋地重签名,安装,还是闪退!
通过上面提到的方法继续看崩溃日志,发现是由于微信除了本身的WeChat可执行文件之外,还有watch和plugins里面的可执行文件,于是将它们删除掉,继续,还是闪退!!不过不怕,有了办法查看崩溃的原因,还害怕没办法解决吗?这次的崩溃信息显示的是我的dylib包版本是0.0.0,但是可执行文件要求的版本至少是1.0.0,由于我要注入的dylib是通过THEOS生成的,所以在Makefile文件里面加上这两行改变一下版本
_THEOS_TARGET_LDFLAGS += -compatibility_version 1.0```
就OK了,如果是用iOSOpenDev写的话,就在Buildsetting那里修改version,接着再次安装,终于成功了!!
参考文章:
[theos的一些额外配置、解决版本号不对的错误](http://www.dllhook.com/post/114.html)
[专注于非越狱环境下iOS应用逆向研究,从dylib注入,应用重签名到App Hook](https://github.com/Urinx/iOSAppHook)
[免越狱版 iOS 抢红包插件](http://www.swiftyper.com/2016/12/26/wechat-redenvelop-tweak-for-non-jailbroken-iphone/)
[越狱开发2-Tweak入门](http://luoxianming.cn/2016/11/13/yueyutweak1/)