iOS 逆向基础总结

1,253 阅读4分钟

步骤简化工具

MJAppTools

编译放在手机目录,usr —> bin中

  • MJAppTools  如果没有权限
  • chmod +x /usr/bin/MJAppTools
  • MJAppTools  会列出各指令名的
  • MJAppTools -l

01. 连接工作

1. OpenSSH 连接

  1. 通过Cydia安装OpenSSH;
  2. 使用OpenSSH远程登录手机.

两种方案:

1). WIFI登录,同一局域网内(通常使用秘钥登录)

  1. 终端输入:sshroot@10.1.1.168(手机IP)(这里的服务器是手机);
  2. 初始密码:Alpine.

2). USB登录

  1. 下载usbmuxd,主要用到里面的一个pthony脚本;

  2. 将iPHone的22端口(SSH端口)映射到本地MAC的10010端口;

    cd~/Documents/usbmuxd-1.0.8/python-client

    python[tcprelay.py](http://tcprelay.py/)-t22:10010

  3. 终端新建一个窗口,SSH登录到MAC10010端口(以下两种方式都可以).

    ssh root@localhost -p 10010

    ssh root@127.0.0.1 -p 10010

02. 界面分析

Cycript和Reveal配合使用,负责找控件或数据源等,即:界面分析。

1. 使用Cycript 调试APP:

1). 使用Cydia安装Cycript 和adv-cmds;

ps -A(列出手机的所有app)

ps–A|grep 关键词 (按关键词搜索)

cycript-p进程IDcycript-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). 解析出头文件,拿到Mach-O文件;

  • 拿到ipa安装包的:pp助手下载的ipa安装包,改名成zip解压,然后找到与文件名同名的文件,就是Mach-O文件;
  • 拿不到安装包的:通过安装路径去拿.
    • ps -A 找到对应app安装路径;
    • 使用iFunBox去对应路径找Mach-O文件.

2). 判断是否需要脱壳;

方法一:otool

  • 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

1.Clutch -i   列出app

2.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 文件目录下:

  1. make  编译一下;
  2. 如果没法编译,make clean一下;
  3. make package 打包一下    make package debug=0 (release版本);
    • 注意:make package命令已经包含了 make ,所以 make 可以省去;
  4. mask install  安装.
  5. 如果失败,那就是没有配置环境变量,可以如下图写,也可以直接在用户配置文件中改。

11. 插件卸载

  • iFunBox —> Library —> mobileSubstrate —> DynamicLibraies;
  • 插件格式  .deb.