###准备工作:
###具体实现步骤
首先在APPStore中下载正版的应用
以QQ为例
首先确保手机连接和电脑连接的是同一个网段
用ssh命令连接上手机,密码默认是 alpine
ssh [email protected]
ps -e | grep QQ
(如果这里是其他APP,不清楚具体名字,那么执行这个命令,我这里是知道我破壳的应用叫QQ,所以,直接执行 ps -e | grep QQ)
ps -e
cycript -p QQ
键入一下命令
[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
拿到地址并且记录下来,后面要用到
control + z
退出cy模式
dumpdecypted
目录下直接执行make命令
这样会编译一遍dumpdecrypted,生成dylib
sudo scp dumpdecrypted.dylib [email protected]:/var/mobile/Containers/Data/Application/531B07B4-3048-4EEF-BB76-25F6F83D1EEC/Documents/
DYLD_INSERT_LIBRARIES=/var/mobile/Containers/Data/Application/531B07B4-3048-4EEF-BB76-25F6F83D1EEC/Documents/dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/20E39925-5231-4BE3-B483-9D6481BCC715/QQ.app/QQ
成功后有如下结果
sudo cp [email protected] /var/root/QQ.decrypted
屏幕快照 2018-07-06 下午12.34.17
(我在这里是拷贝到当前文件夹下,所以后面没有带路径),如拷贝到指定文件夹,后面需要带路径
到此,砸壳完成,接下来,操作一下,如何提取头文件
当Mac升级了OSX 10.11后,配置class-dump的时候,会发现逆向书上推荐的class-dump存放目录**/usr/bin**,class-dump存放不进去,尝试过用sudo 还是不被允许。
首先打开Terminal,输入mkdir ~/bin,在当前用户根目录下创建一个bin目录
把下载下来的 dmg 打开,复制文件里面的class-dump到创建的bin目录下。赋予其可执行权限
chmod +x ~/bin/class-dump
vim ~/.bash_profile
export PATH=$HOME/bin/:$PATH
6.在Terminal中执行
source ~/.bash_profile
具体可参见
https://www.jianshu.com/p/025fa775f3a6
执行该命令
class-dump -H QQ.decrypted -o output/
紧接着,你就会发现,
准备工作:砸壳完成的二进制文件、IPA包、脚本文件、证书、描述文件
unzip WeChat.ipa -d WeChat_unzip
sudo chmod 777 WeChat
用WeChat替换Payload/WeChat包内容里的二进制文件
找到WeChat_unzip/Payload/WeChat包内容的info.plist 文件,修改 Bundle identifier,需要与使用的额证书和描述文件相一致
打开终端,cd 进入 文件所在目录,运行
sh ios_resign_from_app_to_ipa WeChat_unzip "iPhone Distribution: Beijing 1000 Oaks Hu Lian Technology Development (UECH3VPJ68)" embedded.mobileprovision WeChat_resig.ipa
经过尝试找到如下方法
- (void)onRevokeMsg:(id)arg1;
- (void)DelMsg:(id)arg1 MsgList:(id)arg2 DelAll:(_Bool)arg3;
onRevokeMsg为收到一条撤回通知(此时微信里显示“对方已撤回”)
DelMsg为删除本地消息,所以我们hook该方法即可换成自己的方法
ps:注意,只有当收到revoke通知删除本地消失时才替换成自己的方法,其它情况调用父类方法