越狱可以使用 Tweak,是因为越狱后默认有mobilesubstrate 这个库,它主要是能在程序运行时能动态加载我们自己的动态库。但非越狱机没有这个库,所以需要直接将这个库打包进 ipa中来使用这个库的一些API实现注入过程。虽然是可以安装在非越狱机器上,但制作过程需要有越狱手机。
获取砸壳应用
自己砸
工具:
dumpdecrypted 或者 clutch工具 本文需要砸壳之后的ipa文件所以只能用clutch
环境:
只有越狱才能砸壳
dumpdecrypted砸(原理是让app预先加载一个解密的dumpdecrypted.dylib,然后在程序运行后,将代码动态解密,最后在内存中dump出来整个程序。通过dumpdecrypted得到的可执行文件其实不是完全解密过的,机器是arm64的话就只能解密arm64那部分。可尝试命令 lipo -thin arm64 .decrypted -o -arm64.decrypted可获得纯净的可执行文件。)
1. 越狱的iPhone
2. 进入Cydia,搜索并安装OpenSSH、Cycript、iFile(调试程序时可以方便地查看日志文件)这三款软件
3. 电脑上用iTunes上下载一个最新的微信,连上iPhone,用iTunes装上刚刚下载的微信应用
4. Mac终端,用ssh进入连上的iPhone(确保iPhone和Mac在同一个网段,笔者iPhone的IP地址为192.168.8.54)。OpenSSH的root密码默认为alpine。 如: ssh root@172.17.10.83
5. 手机打开iFile 后在终端一步步找到WeChat所在位置并保持微信打开(也可以用 ps -e 来查看当前进程进行查找):cd /var/mobile/Containers/Bundle/Application/5A3F8B13-FF94-43A8-B02D-1580E38D63D0/WeChat.app/
6. 之后 cycript -p WeChat (cycript -p 查看附加进程的)等待出现 cy# 后在之后输入 NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] 则可以获取到输出地址保留好 如:@"/var/mobile/Containers/Data/Application/C599E377-2B62-41B6-87A7-FBC6F19ECDD6/Documents"
7. 下载dumpdecrypted源码,再:cd /Users/ucsapp/Downloads/dumpdecrypted-master 中后再使用 make 命令在该目录下生成一个 dumpdecrypted.dylib文件
8. 拷贝该动态库到iPhone对应的WeChat的Documents目录下 scp拷贝时并输入ssh的密码alpine(命令scp 源文件路径 目标文件路径)如:scp ./dumpdecrypted.dylib root@172.17.10.83:/var/mobile/Containers/Data/Application/C599E377-2B62-41B6-87A7-FBC6F19ECDD6/Documents
9. 开始对AppStore下载的微信应用进行砸壳,注意检查下当前Mac是否连接到了手机,先ssh到WeChat的dumpdecrypted.dylib所在的document目录:/var/mobile/Containers/Data/Application/xxxxxxx/Documents下,再 (命令格式:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 需砸壳文件WeChat.app/WeChat路径)如:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/5A3F8B13-FF94-43A8-B02D-1580E38D63D0/WeChat.app/WeChat 之后会生成一个WeChat.decrypted文件在dumpdecrypted.dylib的同级目录下这就是砸壳的应用。
10. 电脑新建一个terminal,从手机拷贝该砸壳文件到电脑桌面 scp root@172.17.10.83:/var/mobile/Containers/Data/Application/3D3BD063-A779-4FAD-B4C4-6E674B8F2135/Documents/WeChat.decrypted /Users/yourcomputer/Desktop/
11. 注意:classdump出头文件--- class-dump -H WeChat.decrypted --arch armv7 -o /Users/xxx/Desktop/xxx/Headers
Clutch砸 编译Clutch后将执行文件拷贝到越狱手机中,再ssh进入手机,列出当前安装应用,并选择比如腾讯的某个应用对应的包名砸壳。
clutch 会将砸过的 ipa 文件放到了 /private/var/mobile/Documents/Dumped/ 目录下,接下来可以将其改简单名,再拷回电脑
1. 下载最新的Clutch https://github.com/KJCracks/Clutch/releases
2. cd Clutch
3. xcodebuild -project Clutch.xcodeproj -configuration Release ARCHS="armv7 armv7s arm64" build
4. scp Clutch/clutch root@<your.device.ip>:/usr/bin/
5. ssh root@<your.device.ip>
6. clutch -i
7. clutch -d com.tencent.xin(注意:可能因为越狱iOS9.1的4S上的微信130MB有点大而不成功,尝试用clutch -b com.tencent.xin也不行 猜测可能是clutch对armv7的32bit的处理有误导致失败,官Git上也出现类似问题但未找到相应解决 6Plus越狱64位机没问题)
8. mv /private/var/mobile/Documents/Dumped/com.tencent.xin-iOS7.0-\(Clutch-2.0.4\).ipa /private/var/mobile/Documents/Dumped/wechat.ipa
9. scp root@<your.device.ip>:/private/var/mobile/Documents/Dumped/wechat.ipa ~/Desktop
别人砸
请绕道去PP助手等下载吧
动态库
参考:Envelope 动态库
下载动态库后需要编译,但直接编译会报错提示找不到theos环境等,需要先安装好这些环境。
make编译后会生成一个隐藏的.theos目录,在其下找到该源码的编译动态库文件并拷贝到和上面的砸壳应用同目录下。
使用系统otool工具检测该动态库需要依赖的各个库是否都已存在,看到有两个是属于需要自身动态库要包含进Library的,
除了第一个外第二个(因为该库非越狱环境下是没有的需要从越狱手机下提取出来以备打包用,
路径为:/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate。)
需要通过install_name_tool来修改这个动态库的依赖路径并再次查看发现已经改为从该动态库读取这个依赖库了而非非越狱下的手机环境了,
并用optool工具(下载要recursive因为该源码中又包含了其它源码,后需要编译如果xcodebuild命令提示错误,尝试换一个https://github.com/yuchuanfeng/optool作者的optool后还报错直接用xcode来build不用终端)将缺失库与动态库一起打进该动态库包里。
之后将砸壳过的 ipa 文件解压,然后将 libsubstrate.dylib 与 WeChatRedEnvelop.dylib 拷贝到解压后的 WeChat.app 目录下以便下一步install这个WeChatRedEnvelop.dylib。
1. git clone https://github.com/buginux/WeChatRedEnvelop.git
2. cd WeChatRedEnvelop
3. make
4. cp .theos/obj/debug/WeChatRedEnvelop.dylib ~/Desktop
5. otool -L WeChatRedEnvelop.dylib
6. install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib /Users/ucsapp/Desktop/AutoEnvelopUnJail/WeChatRedEnvelop.dylib
7. otool -L WeChatRedEnvelop.dylib
8. git clone --recursive https://github.com/alexzielenski/optool.git(搜索最新release版本或换其他作者的)
9. cd optool
10. xcodebuild -project optool.xcodeproj -configuration Release ARCHS="i386 x86_64" build (optool是源码编译后将同名product拷到AAAAA待用)
11. unzip wechat.ipa -d wechat(注意:解压砸壳过的wechat.ipa, 解压后得到一个包含Payload文件的文件夹,将optool和两个动态库及解压后的WeChat.app这三个文件放在同一个文件夹AAAAA中)
12. cd ~/AAAAA
13. cp /AAAAA/libsubstrate.dylib /AAAAA/WeChatRedEnvelop.dylib /AAAAA/WeChat.app
14. /AAAAA/optool install -c load -p "@executable_path/WeChatRedEnvelop.dylib" -t WeChat.app/WeChat (会输出表示成功:
Found thin header...
Inserting a LC_LOAD_DYLIB command for architecture: arm64
Successfully inserted a LC_LOAD_DYLIB command for arm64
Writing executable to WeChat.app/WeChat...)
打包重签名
1. 删除注入了动态库的.app中的包文件里的Watch目录,将含有iWatch工程先删除不签名
2. 将目标设备的UUID加到即将要签名的证书中并更新配置文件下载安装到Mac
3. 下载应用重签工具并运行该Mac程序 https://github.com/DanTheMan827/ios-app-signer
4. 选择重签的证书和配置文件及保存路径后点击开始
5. 用工具将ipa装入设备检测是否有了动态库的相关改动
可能会有报错无法是被object格式等错误 检测好动态库注入cp 和 optool install路径 尽量放在同一文件夹下操作 暂时应该就无其它错误了