原文链接
需要的工具/文件
- yololib 编译好的, 百度传送门链接: https://pan.baidu.com/s/1qYdQ2ba 密码: pif9
- class-dump 编译好的, 百度传送门链接:链接: https://pan.baidu.com/s/1kVQJEUb 密码: j3i4
- dumpdecrypted 砸壳用
- iOSOpenDev
- iTools
- OpenSSH(Cydia)
- iFile(Cydia)
- Cycript(Cydia)
- Command Line Tools
- Xcode
- 苹果开发者证书或企业证书
- 一台越狱的iPhone
解密微信可执行文件(没越狱的往下翻, 可忽略这一步)
1.确保已越狱的iPhone和Mac处于同一局域网,打开Mac OS的终端命令行工具
2.输入ssh root@192.168.1.121远程登录已越狱的iPhone,root密码默认为alpine(其中192.168.1.121是iPhone的局域网IP地址)
3.在iPhone上运行一下微信,之后执行ps -e | grep WeChat(ps -e
)查找WeChat可执行文件的路径,并记录为:可执行文件路径
4.通过Cycript查找到WeChat的Documents路径,输入cycript -p WeChat,进入cycript命令行状态
5.输入NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0],就可以获取到WeChat的Documents路径了,并记录为:Documents路径
记录下刚才的两个路径,接下来需要将砸壳工具dumpdecrypted拷贝到WeChat的Documents目录下用于砸壳
确保我们从Github上下载了最新的dumpdecrypted源码,进入dumpdecrypted源码的目录,编译dumpdecrypted.dylib,命令make
6.将命令行切换回Mac OS X
输入scp dumpdecrypted.dylib root@192.168.1.121:Documents路径
7.重新远程登录到iPhone,使用dumpdecrypted.dylib砸壳,具体用法:
DYLD_INSERT_LIBRARIES=/Documents路径/dumpdecrypted.dylib 可执行文件路径
出现了如截图页面则表示砸壳成功,会在命令行执行的当前路径下生成WeChat.decrypted文件
7.1 dumpdecrypted
对系统ios9.3.2以上的版本砸壳失败, 先远程自己的设备:ssh root@设备IP ; 执行命令:su mobile->cd; 接着砸壳;砸壳文件所在目录:/var/mobile/
8.将生成的WeChat.decrypted使用scp命令拷贝到Mac电脑上,和之前从Mac电脑拷贝dumpdecrypted.dylib到手机上类似的语法。(下图中的黑色覆盖部分替换为你的Mac登陆用户名)
9.为保险起见,可以对WeChat.decrypted文件检查一下,查看砸壳是否成功
如截图第一个cryptid 0表示armv7架构已成功,第二个cryptid 1表示arm64未成功
理论上只要把最老的架构解密就可以了,因为新的cpu会兼容老的架构;所以这里arm64未成功不影响
10.再次远程连接iPhone,拷贝出WeChat.app待用(注意使用scp -r)
解密微信可执行文件->利用PP助手(推荐)
在已越狱的iPhone上安装PP助手后,从PP助手中下载微信客户端
PP助手上面的App的可执行文件都是经过了砸壳的,所以可以省去自己砸壳的步骤
我们可以按照自己砸壳的步骤,导出PP助手的微信可执行文件,利用otool查看砸壳情况
这表示armv7和arm64均已解密
同样再次远程连接iPhone,拷贝出WeChat.app待用
生成并注入dylib
1.下载并安装iOSOpenDev
Xcode 8,直接安装iOSOpenDev会失败。
如果你们也遇到类似的问题,可以尝试下载iOSOpenDev_Patches,然后按照如下步骤:
1、把Specifications1文件夹重命名为Specifications放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/
2、把Specifications2文件夹重命名为Specifications放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/
3、把usr3重命名为usr放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/
4、安装iOSOpenDev
2.创建dylib工程并生成dylib
安装完iOSOpenDev后,在Xcode中选择Cocoa Touch Library。
点击Next开始新建工程,将product name命名为autoGetRedEnv;
删除autoGetRedEnv.h文件,修改autoGetRedEnv.m为autoGetRedEnv.mm,然后在项目中加入CaptainHook.h;
从github中下载autoGetRedEnv工程源码中的CaptainHook.h和autoGetRedEnv.mm拷贝源码,复制到工程中对应文件中,完成后进行(真机)编译,即可得到libautoGetRedEnv.dylib文件
hook微信的AsyncOnAddMsg: MsgWrap:方法,实现方法如下:
//声明CMessageMgr类
CHDeclareClass(CMessageMgr);
CHMethod(2, void, CMessageMgr, AsyncOnAddMsg, id, arg1, MsgWrap, id, arg2)
{
//调用原来的AsyncOnAddMsg:MsgWrap:方法
CHSuper(2, CMessageMgr, AsyncOnAddMsg, arg1, MsgWrap, arg2);
//具体抢红包逻辑
//...
//调用原生的打开红包的方法
//注意这里必须为给objc_msgSend的第三个参数声明为NSMutableDictionary,不然调用objc_msgSend时,不会触发打开红包的方法
((void (*)(id, SEL, NSMutableDictionary*))objc_msgSend)(logicMgr, @selector(OpenRedEnvelopesRequest:), params);
}
__attribute__((constructor)) static void entry()
{
//加载CMessageMgr类
CHLoadLateClass(CMessageMgr);
//hook AsyncOnAddMsg:MsgWrap:方法
CHClassHook(2, CMessageMgr, AsyncOnAddMsg, MsgWrap);
}
2.1 添加微信步数修改
CHOptimizedMethod(0, self, unsigned long, WCDeviceStepObject, m7StepCount) {
return 66666;
}
CHOptimizedMethod(0, self, unsigned long, WCDeviceStepObject, hkStepCount) {
return 66666;
}
__attribute__((constructor)) static void entry()
{
//加载CMessageMgr类
CHLoadLateClass(CMessageMgr);
//hook AsyncOnAddMsg:MsgWrap:方法
CHClassHook(2, CMessageMgr, AsyncOnAddMsg, MsgWrap);
// 微信步数 CHLoadLateClass(WCDeviceStepObject);
CHHook(0, WCDeviceStepObject, m7StepCount);
CHHook(0, WCDeviceStepObject, hkStepCount);
}
2.2 添加微信防撤回
CHDeclareClass(CMessageMgr);
CHOptimizedMethod(1, self, void, CMessageMgr, onRevokeMsg, id, value1) {
}
__attribute__((constructor)) static void entry()
{
//加载CMessageMgr类
CHLoadLateClass(CMessageMgr);
//hook AsyncOnAddMsg:MsgWrap:方法
CHClassHook(2, CMessageMgr, AsyncOnAddMsg, MsgWrap);
// 微信步数 CHLoadLateClass(WCDeviceStepObject);
CHHook(0, WCDeviceStepObject, m7StepCount);
CHHook(0, WCDeviceStepObject, hkStepCount);
// 消息防撤回
CHHook(1, CMessageMgr, onRevokeMsg);
}
3.注入dylib
通过yoyolib向WeChat注入dylib (相当于告知WeChat有这么个东西了,到时候程序可以加载这个dylib)
./yololib 目标可执行文件 需注入的dylib
目标可执行文件:即,WeChat.app/WeChat解密后得到的文件;如果是自己砸壳时,对应的则是之前导出的WeChat.decrypted文件(建议将WeChat.decrypted文件做好备份以便之后使用,同时把WeChat.decrypted重命名为WeChat);如果是利
上图效果则代表注入成功了
3.重新签名并安装ipa
- 新建Entitlements.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>123456.com.autogetredenv.demo</string>
<key>com.apple.developer.team-identifier</key>
<string>123456</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>123456.com.autogetredenv.demo</string>
</array>
</dict>
</plist>
获取证书Teamid及其他信息使用以下命令
/opt/iOSOpenDev/bin/ldid -e ./Demo.app/Demo
将四个文件,放入到之前备份好的WeChat.app文件夹中:
- 1.embedded.mobileprovision
- 2.libautoGetRedEnv.dylib
- 3.注入libautoGetRedEnv.dylib后的WeChat文件
- 4.Entitlements.plist
embedded.mobileprovision文件就是苹果开发者网站中的Provisioning Profiles文件,如果之前创建好了直接下载重命名为embedded.mobileprovision即可。
给微信重新签名
重新签名命令格式:codesign -f -s 证书名字 目标文件
证书名字可以在钥匙串中找到
分别用codesign命令来为微信中的相关文件签名,具体实现如下:
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" WeChat.app/libautoGetRedEnv.dylib
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" WeChat.app/Watch/WeChatWatchNative.app/PlugIns/WeChatWatchNativeExtension.appex
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" WeChat.app/Watch/WeChatWatchNative.app
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" WeChat.app/PlugIns/WeChatShareExtensionNew.appex
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" --entitlements Entitlements.plist WeChat.app
打包成ipa
给微信重新签名后,我们就可以用xcrun来生成ipa了,具体实现如下:
xcrun -sdk iphoneos PackageApplication -v WeChat.app -o ~/WeChat.ipa
安装拥多种功能的微信
只要手机id加入了开发者证书中都是可以安装的
哈哈哈哈哈哈, 大家玩的开心!!!!