ios 微信逆向部分

一、砸壳方法(转载注明出处)

###准备工作:

  1. 越狱的手机(必须的)
  2. dumpdecrypted (砸壳使用)
  3. class-dump (导出砸壳后的二进制包的头文件)
  4. Cycript(Cydia)(在越狱手机的越狱市场下载,安装)
  5. adv-cmds(Cydia)(在越狱手机的越狱市场下载,安装)
  6. OpenSSH(Cydia) (在越狱手机的越狱市场下载,安装)

###具体实现步骤

首先在APPStore中下载正版的应用

以QQ为例

  1. 首先确保手机连接和电脑连接的是同一个网段

  2. 用ssh命令连接上手机,密码默认是 alpine

   ssh [email protected]
  1. 关闭所有的后台APP,仅保持QQ后台活跃
ps -e | grep QQ

(如果这里是其他APP,不清楚具体名字,那么执行这个命令,我这里是知道我破壳的应用叫QQ,所以,直接执行 ps -e | grep QQ)

ps -e

屏幕快照 2018-07-06 上午11.39.27

  1. 使用cycript命令,找到目标app的Document路径,使用如下命令
cycript -p QQ

屏幕快照 2018-07-06 上午11.42.59

键入一下命令

[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]

拿到地址并且记录下来,后面要用到

屏幕快照 2018-07-06 上午11.45.50

control + z退出cy模式

  1. 这里一定要注意,将我们下载好的 dumpdecrypted 编译一下,生成动态库dylib,编译方法是,进入到我们下载好的dumpdecypted目录下

直接执行make命令

屏幕快照 2018-07-06 上午11.53.16

这样会编译一遍dumpdecrypted,生成dylib

  1. 将生成的将dumpdecrypted.dylib拷贝到Documents目录下,执行该命令
sudo scp dumpdecrypted.dylib [email protected]:/var/mobile/Containers/Data/Application/531B07B4-3048-4EEF-BB76-25F6F83D1EEC/Documents/

屏幕快照 2018-07-06 上午11.58.25

  1. 开始砸壳,使用以下命令,会在当前目录下生成QQ.decrypted砸壳后的文件。
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

成功后有如下结果

ios 微信逆向部分_第1张图片

  1. 将砸壳后的QQ.decrypted文件拷贝到电脑上。
sudo cp [email protected] /var/root/QQ.decrypted

屏幕快照 2018-07-06 下午12.34.17

(我在这里是拷贝到当前文件夹下,所以后面没有带路径),如拷贝到指定文件夹,后面需要带路径

你会看到这个文件屏幕快照 2018-07-06 下午12.37.33

到此,砸壳完成,接下来,操作一下,如何提取头文件

class-dump最新安装方法

当Mac升级了OSX 10.11后,配置class-dump的时候,会发现逆向书上推荐的class-dump存放目录**/usr/bin**,class-dump存放不进去,尝试过用sudo 还是不被允许。

  1. 首先打开Terminal,输入mkdir ~/bin,在当前用户根目录下创建一个bin目录

  2. 把下载下来的 dmg 打开,复制文件里面的class-dump到创建的bin目录下。赋予其可执行权限

 chmod +x ~/bin/class-dump
  1. 打开bash_profile文件配置环境变量:
vim ~/.bash_profile
  1. 按下 i 键进入编辑状态,在最下方加一行
 export PATH=$HOME/bin/:$PATH
  1. 按下esc键,再按shift+: 输入 wq进行保存退出编辑

6.在Terminal中执行

source ~/.bash_profile

具体可参见

https://www.jianshu.com/p/025fa775f3a6

执行该命令

class-dump -H QQ.decrypted  -o output/

紧接着,你就会发现,

ios 微信逆向部分_第2张图片

二、重签名 (以WeChat为例,当然,上面用的是QQ的,原理都一样)

准备工作:砸壳完成的二进制文件、IPA包、脚本文件、证书、描述文件

1.解压ipa包
unzip WeChat.ipa -d WeChat_unzip
2.替换二进制文件
  • 微信砸壳会得到一个WeChat.decrypted文件, 重命名为WeChat,在终端,输入 chmod 777 ,然后把 WeChat拖到终端上按回车 修改下权限。
sudo chmod 777 WeChat
  • 替换砸壳了的WeChat二进制文件

用WeChat替换Payload/WeChat包内容里的二进制文件

3.修改Bundle identifier

​ 找到WeChat_unzip/Payload/WeChat包内容的info.plist 文件,修改 Bundle identifier,需要与使用的额证书和描述文件相一致

4.重签名

​ 打开终端,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
5.签名成功,得到ipa文件

ios 微信逆向部分_第3张图片

三、防撤回+步数统计

1.获取砸壳后的头文件,如图

ios 微信逆向部分_第4张图片

2.用编辑器打开搜索关键词message、revoke等,最终锁定CMessageMgr.h文件

ios 微信逆向部分_第5张图片

经过尝试找到如下方法

- (void)onRevokeMsg:(id)arg1;
- (void)DelMsg:(id)arg1 MsgList:(id)arg2 DelAll:(_Bool)arg3;

onRevokeMsg为收到一条撤回通知(此时微信里显示“对方已撤回”)

DelMsg为删除本地消息,所以我们hook该方法即可换成自己的方法

ps:注意,只有当收到revoke通知删除本地消失时才替换成自己的方法,其它情况调用父类方法

微信步数实现步骤

1.获取步数
  • 通过脱壳后的微信ipa包,获取到工程中的所有头文件,找到其中管理微信运动步数的类为WCDeviceStepObject。
  • 通过几次实验(以及对函数名的猜测)得到了获取步数的函数为m7StepCount。
  • 通过开源的CaptainHook类,利用ObjC的runtime机制,对m7StepCount函数进行method swizzling,也就是用我们自己的实现来替换微信的实现。为了避免改得太假被微信发现,如果修改的不是当天或者改的步数比微信自己计算的还少,就直接调用微信原有的方法。
2.在设置中加入修改入口

ios 微信逆向部分_第6张图片

  • 微信的设置页比较好找,在NewSettingViewController类中。
  • 通过Reveal软件能看到微信设置界面的结构,在MMTableViewSectionInfo中增加一行输入步数的MMTableViewCellInfo,并最后加到MMTableViewInfo中。
  • 重新刷新tableView,就能看到新加的入口了。

你可能感兴趣的:(高级问题)