前戏
- 越狱手机;
- Cydia 安装 ssh(用于电脑ssh连接);
- Cydia 安装 adv-cmds(用于 ps -e 查看进程方便查找目标 App 位置);
- Cydia 安装 cycript (查看App 的 Documents 路径);
正题
1. ssh 连接iPhone
ssh root@iphone_ip
然后输入密码 默认情况下是: alpine
2. 获取微信的路径
a). 首先找到微信的可执行文件的具体路径;
iPhone启动微信,通过以下命令获取
ps -e | grep WeChat
/var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/WeChat.app/WeChat
b). 通过 Cycript找出微信的Documents的路径;(ps:这一步不要锁屏)
cycript -p WeChat
cy# NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]
/var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/Documents
3. 编译dumpdecrypted
Github上下载最新的 dumpdecrypted 源码;
进入下载的文件目录执行 make 编译获得 dumpdecrypted.dylib 文件
拷贝dumpdecrypted.dylib到iPhone上
scp dumpdecrypted.dylib [email protected]:/var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/Documents
获取微信头文件
砸壳
其实这一步可以略过,直接从第三方市场下载已经砸壳的ipa解压即可,当本身就是为了学习来的,就顺便学习下砸壳的方法。
执行以下代码
DYLD_INSERT_LIBRARIES=/var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/Documents/dumpdecrypted.dylib /var/mobile/Applications/4FB2F319-3ECA-4EE9-B17E-22632471F409/WeChat.app/WeChat
看到这样的图就砸壳成功了!
拷贝砸壳生成的文件WeChat.decrypted文件到电脑上
dump 微信的可执行文件
class-dump --arch armv7 hello.decrypted -H -o ./heads
注意:当砸壳完毕后,使用 class-dump 仍然只导出 CDStructures.h 一个文件,则可能架构选择错误;因为 dumpdecrypted 只会砸你手机处理器对应的那个壳,fat binary 的其它部分仍然是有壳的,而 class-dump 的默认目标又不是被砸壳的那个部分,因此很有可能就会报错。解决办法:--arch 指定cpu架构
干些羞羞的事
好不容易搞到了 WeChat 的头文件,就这么算了也太没劲了。总要搞点见不得人的事。
抢个红包
好像之前看到过一个教程。嗯那咋也搞搞看。
其实这里主要是通过创建动态库的方式 HOOK 微信中的两个方法
- CMessageMgr.h 中的 - (void)AsyncOnAddMsg:(id)arg1 MsgWrap:(id)arg2;
- WCRedEnvelopesLogicMgr.h 中的- (void)OpenRedEnvelopesRequest:(id)arg1;
利其器
-
工具安装
首先要安装iOSOpenDev
Xcode7可以参考文章《在xcode7下安装iOSOpendev,并使用iOSOpendev模板编译iOS9钩子》当然你可能还是会有以下问题
解决方法(安装those):
- 下载MacPorts并安装(耐心等这一步有点慢)
更新一下
sudo port -v selfupdate
-
安装dpkg(用于打包.deb文件)
sudo port -f install dpkg
-
安装those
export THEOS=/opt/theos sudo git clone -b stableversion https://github.com/haorenqq/theos/ $THEOS
-
安装iOSOpenDev
什么?还是安装失败?请继续。
进入系统根目录的opt文件夹会发现一个iOSOpenDevSetup文件,cd /opt/iOSOpenDevSetup/bin sudo ./iod-setup base sudo ./iod-setup sdk -sdk iphoneos
验证:
查看 /Users/taizi/library/developer/xcode/ 路径下是否有
Templates/iOSOpenDev
或者执行
```
cat ~/.bash_profile
```
查看输出是否包含
> export iOSOpenDevPath=/opt/iOSOpenDev
> export iOSOpenDevDevice=
> export PATH=/opt/iOSOpenDev/bin:$PATH
善其事
创建 dylib 工程
编写HOOK代码
GitHub上也有现成的 https://github.com/east520/AutoGetRedEnv使用yololib 将 dylib 注入到 WeChat.decrypted
先把之前保存的 WeChat.decrypted 重命名为 WeChat 用 yololib 注入
./yololib WeChat libAutoRedEnvelopesGet.dylib
- 生成Entitlements.plist文件
重签名
把生成的dylib、
刚刚注入dylib的WeChat、
以及embedded.mobileprovision文件(就是你自己打包的provision文件,在之前打包过的App也中能找到)
拷贝到WeChat.app(可以通过iTunes下载解压得到)中
分别用codesign命令来为微信中的相关文件签名
codesign -f -s 证书名字 目标文件
codesign -f -s "iPhone Distribution: xxx" WeChat.app/libAutoRedEnvelopesGet.dylib
codesign -f -s "iPhone Distribution: Hangzhou Ouer Technology Co., Ltd" WeChat.app/Watch/WeChatWatchNative.app
codesign -f -s "iPhone Distribution: xxx" WeChat.app/PlugIns/WeChatShareExtensionNew.appex
codesign -f -s "iPhone Distribution: xxx" WeChat.app/Watch/WeChatWatchNative.app/PlugIns/WeChatWatchNativeExtension.appex
codesign -f -s "iPhone Distribution: xxx" --entitlements Entitlements.plist WeChat.app
codesign -f -s "iPhone Distribution: Hangzhou Ouer Technology Co., Ltd" --entitlements Entitlements.plist WeChat.app/Watch/WeChatWatchNative.app
最后打包
xcrun -sdk iphoneos PackageApplication -v WeChat.app -o ~/Desktop/WeChat.ipa
小编用上面的方法试了签名成功但是一直安装失败, 上网找了半天也没解决,最后在GitHub上搞了一个重签名工具 ( https://github.com/DanTheMan827/ios-app-signer ) 重新签名后在越狱手机上安装成功,但自己的iPhone6上还是安装失败(砸壳的获取cpu指令集不同)。
最后直接从PP助手上下载一个已砸壳的应用注入重签名就可以了。
用AppResign重签名
./AppResign WeChat.app WeChat.ipa
事后一根烟
虽然前辈有很多经验可以参考,但是自己实际操作中间还是走了很多坑,最后成功安装不crash还是蛮兴奋的。
附上一些参考文章
http://www.jianshu.com/p/189afbe3b429
http://www.jianshu.com/p/844ae6180ed7
http://iosre.com/t/topic/2966