步骤简化工具
MJAppTools
编译放在手机目录,usr —> bin中
- MJAppTools 如果没有权限
- chmod +x /usr/bin/MJAppTools
- MJAppTools 会列出各指令名的
-
MJAppTools -l
一. 连接工作
1. OpenSSH 连接
- 通过Cydia安装OpenSSH;
- 使用OpenSSH远程登录手机.
- 两种方案:
1. WIFI登录,同一局域网内(通常使用秘钥登录
);
- 终端输入:sshroot@10.1.1.168(手机IP)(这里的服务器是手机);
- 初始密码:Alpine.
2. USB登录
- 下载usbmuxd,主要用到里面的一个pthony脚本;
- 将iPHone的22端口(SSH端口)映射到本地MAC的10010端口;
cd~/Documents/usbmuxd-1.0.8/python-client
python[tcprelay.py](http://tcprelay.py/)-t22:10010
- 终端新建一个窗口,SSH登录到MAC10010端口(以下两种方式都可以).
ssh root@localhost -p 10010
ssh root@127.0.0.1 -p 10010
二. 界面分析
- Cycript和Reveal配合使用,负责找控件或数据源等,即:界面分析。
1. 使用Cycript 调试APP
1)使用Cydia安装Cycript 和adv-cmds;
-
ps -A
(列出手机的所有app) -
ps–A|grep 关键词
(按关键词搜索) -
cycript-p进程ID
或cycript-p进程名称
2)可以使用语法查看app的 BunldID 、控制器名称 等 (李明杰有一个工具).
2. 使用Reveal 可视化工具 查看APP 界面结构
1)在MAC和iPhone上安装 Rreveal;
2)手机打开对应app的界面,会在mac上的reveal上显示对应的界面.
三. 代码分析
- 对Mach-O文件的静态分析;
- MachOView、class-dump、HopperDisassembler、ida等可以查看头文件.
1)MachOView 查看 Mach-O的结构;
2)Hopper 可以查看APP/UIKit等的伪代码;
3)class-dump 导出Mach-O的头文件.
1. 解析出头文件
1)拿到Mach-O文件;
- 拿到ipa安装包的:pp助手下载的ipa安装包,改名成zip解压,然后找到与文件名同名的文件,就是Mach-O文件;
- 拿不到安装包的:通过安装路径去拿.
-
ps -A
找到对应app安装路径; - 使用iFunBox去对应路径找Mach-O文件.
-
2)判断是否需要脱壳
方法一:
-
otool -l WeChat | grep crypt
(otool 工具常用的还有打印动态库); - 如果cryptid 为非0 ,那就是加密了,需要脱壳;
- 如果没有打印,那就是没有加密的.
方法二:MachOView
- Load Commands —> LC_ENCRYPTION_INFO —> Crypt ID 为0代表没有加密,非0代表加密了.
方法三:Clutch -i
- 一般列出来的app就是需要脱壳的.
3)脱壳,工具:Clutch 、dumpdecryted (Clutch脱壳失败后用dump~)
- Clutch
-
Clutch -i
列出app Clutch -d
列出app的排序序号如:Clutch -d 9
-
- dumpdecryted 得到的文件有后缀名,去掉就好。
4) 得到Mach-O文件, 使用class-dump 获取头文件(cd 到WeCheat文件夹下)
class-dump -H WeCheat -o WeCheatHeaders
四. 开始逆向(以微信为例)
1. 工具: Theos 下载配置;
2. 拿到应用的唯一标识 ~root#下;
方法一:Clutch -i
的时候就可以拿到
方法二:
cycript -p WeChat
@import mjcript
MJAppID
3. 新建一个终端窗口,新建一个WeChat文件夹,放入Mach-O文件和Headers文件夹;
4. cd到WeChat;
5. 新建Tweak项目;
nic.pl 选择11;
输入项目名 :tweak_wechat ;
输入插件的唯一标示 ,随便写:com.yzq.wechat;
输入微信的唯一标示:com.tencent.xin.
6. 将创建好的Tweak项目拖拽到subline中;
7. 在MakeFile中配置环境变量,每次都要写,所以通常添加到用户配置文件中;
8. 在Tweak.xm 中写代码;格式:
注意:多文件路径配置
9. Logos 常用语法;
%hook、%end :hook一个类的开始和结束;
%orig :函数的原代码逻辑;
-
%new :新建一个函数;
注意:
只用%new,函数有时候可能会找不到,所以需要声明一下
%ctor :在加载动态库时调用;
%dtor:在程序退出时调用;
%c(className):生成一个Class对象.
10. 编译安装
来到Tweak.mk 文件目录下:
-
make
编译一下; - 如果没法编译,
make clean
一下; -
make package
打包一下make package debug=0
(release版本); - 注意:
make package命令已经包含了 make ,所以 make 可以省去;
-
mask install
安装.
1. 如果失败,那就是没有配置环境变量,可以如下图写,也可以直接在用户配置文件中改。
11. 插件卸载
- iFunBox —> Library —> mobileSubstrate —> DynamicLibraies;
- 插件格式 .deb.