工具:

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文件夹>

mac 给uniappios签名_重签名

如此循环将所有的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的重签名。

mac 给uniappios签名_mac 给uniappios签名_02

输入命令:codesign -fs “证书名称” --no-strict --entitlements=entitlements.plist WeChat  ,之后会签名成功,

5.打包

    zip -ry WeChat.ipa Playload<输出文件夹>

安装就可以调试,查看界面设计,去学习了。

mac 给uniappios签名_重签名_03

简化签名操作:Xcode重签名

     新建一个项目,命名为WeChat和原来WeChat的项目同名,不然会在安装运行的时候出现白屏什么都没有(Xcode不认)将build后的app文件替换成砸过壳的真正的WeChat.app文件,修改名字和项目名字一样,之后签名操作和上面的前几步一样,删除插件,签名framework文件,修改info.plist为项目名称。运行项目,在真机上查看安装过程,之后就可以进行lldb调试,查看界面怎么玩的,怎么设计的。

shell脚本重签名

新建项目,重新运行,安装空app,将脚本写入项目里,在工程路径下放一个文件夹APP下面将砸过壳的WeChat.ipa拷贝进去

mac 给uniappios签名_mac 给uniappios签名_04

mac 给uniappios签名_mac 给uniappios签名_05

shell脚本:

mac 给uniappios签名_描述文件_06

mac 给uniappios签名_加壳_07

脚本就是对上面的重签名步骤以代码形式自动化实现了。