工具:
yololib代码注入工具
codesign重签名工具 codesign -d WeChat.app 显示可执行文件的路径
codesign -d -v WeChat.app 显示详细信息
codesign -d -vv WeChat.app 显示详细信息(含签名信息)
重签名就是用自己免费的证书替换app原有的证书,查看自己能用于签名的证书:security find-identity -v -p codesigning
注:app上发到AppStore,他会对你的app进行加密,也就是逆向的时候说的加壳(加固),所以对应就有了砸壳,加壳之后CPU是不能直接读取内容并加载到内存的,正常在运行的时候会先进行解密,然后加载到内存执行程序,所以我们就可以 从内存中dump出来解密后的数据。
如何查看app是否被加密了?工具otool
otool -l WeChat > ~/Desktop/123.txt 输出文件信息重定向到123.txt文件,其中有一个字段cryptid值为0代表没有加密,为1代表某种加密。
otool -l WeChat | grep cryptid 搜索cryptid记录 会有两条记录 ,一个是armv7 一个是arm64的。
解密(砸壳)过后开始重签名:
首先先干掉几个没必要且没法重签名的插件 app包下面的PlugIns删掉,对app影响不大,还有一个东西要干掉 Watch app包下的PlugIns,或者直接将Watch文件夹干掉。
之后开始重签名
1.对Frameworks重签名
codesign -fs “证书名字” ConfSDK.framework<framework文件夹>
如此循环将所有的farmework重新签名。
若二进制文件没有执行权限,先赋予权限chmod +x WeChat
2.拷贝描述文件
新建项目WeChat1,build完后(用真机,不用真机没有embedded.mobileprovision文件的)在app包里面会有一个embedded.mobileprovision,将真正砸过壳的微信app包里面的embedded.mobileprovision替换成我们的。
3.修改info.plist里面的 AppId
将工程的AppId复制替换info.plist里面的Bundle identifier
4.通过描述文件中的权限文件 进行整个App包的签名
权限文件需要写入进去,打开描述文件security cms -D -i embedded.mobileprovision 直接改不了,将其中的entitlements复制
Xcode新建一个property List 名字为entitlements.plist,将复制的东西黏贴进去,将这个文件复制到app包路径下,然后用codesign工具进行对app的重签名。
输入命令:codesign -fs “证书名称” --no-strict --entitlements=entitlements.plist WeChat ,之后会签名成功,
5.打包
zip -ry WeChat.ipa Playload<输出文件夹>
安装就可以调试,查看界面设计,去学习了。
简化签名操作:Xcode重签名
新建一个项目,命名为WeChat和原来WeChat的项目同名,不然会在安装运行的时候出现白屏什么都没有(Xcode不认)将build后的app文件替换成砸过壳的真正的WeChat.app文件,修改名字和项目名字一样,之后签名操作和上面的前几步一样,删除插件,签名framework文件,修改info.plist为项目名称。运行项目,在真机上查看安装过程,之后就可以进行lldb调试,查看界面怎么玩的,怎么设计的。
shell脚本重签名
新建项目,重新运行,安装空app,将脚本写入项目里,在工程路径下放一个文件夹APP下面将砸过壳的WeChat.ipa拷贝进去
shell脚本:
脚本就是对上面的重签名步骤以代码形式自动化实现了。