iOS越狱开发入门帮助文档
- 工具列表:
Reveal 2真机查看其它应用
旧版本Reveal安装要求
一台能够越狱的iPhone,最好是iOS7或者iOS8版本;
Reveal1.6.3最新版本
PP助手直接下载越狱后的微信ipa
- iphone的插件:
afc2文件系统
openssh,ssh链接终端
在iphone上使用ps命令查看进程
cycript脚本语言
解压后Payload里有个WeChat
如果需要自己砸壳的话,砸壳工具dumpdecrypted
用cycript找出TargetApp的Documents目录路径。不要用pid,pid可能会有问题。
cycript -p TargetApp
Paste_Image.png
右键显示包内容
使用class-dump它的头文件备用。
class-dump安装及使用
class-dump下载地址
点击下载后解压后会有class-dump和源码文件。
书上推荐的class-dump存放目录/usr/bin不再可写。Operation not permitted。
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
解压之后,我们继续操作:
1.打开终端,新建一个bin目录
mkdir ~/bin
2.把class-dump给拷贝到这个目录里,然后进入bin目录并赋予可执行权限:
cd ~/bin
chmod 777 class-dump
3.然后设置环境变量,编辑bash_profile文件
vi ~/.bash_profile
4.在bash_profile文件最上方加一行
export PATH=$HOME/bin/:$PATH
5.在终端中执行
source ~/.bash_profile
6.在终端中执行,看看是否成功,出现下图所示,说明成功。
class-dump
Paste_Image.png
在终端中进入解压后的文件中的Payload目录,armv7替换为你手机对应的架构,然后执行(tweak项目中如果需要这些头文件,则需要放到theos的include中即/opt/theos/include
)
class-dump -H --arch armv7 WeChat.app -o test
Paste_Image.png
ssh进手机的终端,输入ps命令,查找到微信的进程id
iOS使用SSH通过USB直连 比WIFI快
首先下载usbmuxd-1.0.8.tar 到PC。
解压之后把usbmuxd-1.0.8放到~目录下
新起一个终端
python ~/usbmuxd-1.0.8/python-client/tcprelay.py -t 22:2222
另起终端
ssh root@localhost -p 2222
输入默认密码:alpine
Paste_Image.png- ssh进手机的终端,输入ps命令,查找到微信的进程id
ps aux | grep WeChat
Paste_Image.png
- 使用神器cycript,根据上一步找到的pid注入到微信的进程,图中665就是pid
cycript -p 665
- 在cycript的终端输入这一串方法,作用就是打印出当前界面的view层级,(cycript还有很多妙用,大家可以上官网看文档,这里不详细介绍)
UIApp.keyWindow.recursiveDescription().toString()
Paste_Image.png
找到了当前聊天窗口的ViewController类名,他就是BaseMsgContentViewController
安装Theos方式一:
export THEOS=/opt/theos
sudo git clone git://github.com/DHowett/theos.git $THEOS
配置 ldid
ldid 是专门用来签名 iOS 可执行文件的工具,用以在越狱 iOS 中取代 Xcode 自带的 codesign。从 http://joedj.net/ldid 下载 ldid,把它放在“ /opt/theos/bin/ ”下,然后用以下命 令赋予它可执行权限:
sudo chmod 777 /opt/theos/bin/ldid
配置 dpkg-deb
deb 是越狱开发安装包的标准格式,dpkg-deb 是一个用于操作 deb 文件的工具,有了这 个工具,Theos 才能正确地把工程打包成为 deb 文件。
从 https://raw.githubusercontent.com/DHowett/dm.pl/master/dm.pl 下载 dm.pl,将其重命 名为 dpkg-deb 后,放到“/opt/theos/bin/”目录下,然后用以下命令赋予其可执行权限:
sudo chmod 777 /opt/theos/bin/dpkg-deb
报错 Error: The vendor/include and/or vendor/lib directories are missing. Please run git submodule update --init --recursive
in your Theos directory. More information:
安装Theos方式二:
logify.pl 地址/BaseMsgContentViewController.h > 地址/Tweak.xm
Tweak.xm的一些修改:
类名 * > id
%x 改成%lx
Tweak的一些资料
debugserver + lldb环境搭建(最好重启一下,不然可能有kill 9的错误):
debugserver(需要的文件夹)
在配置前看一下有个地方需要注意一下,就是下面的命令,我试过没法执行,如果遇到的话,需要替换一下。
codesign -s - --entitlements entitlement.plist -f debugserver
如果不行的话,改为以下命令执行,-S后面无空格
ldid -Sentitlement.plist debugserver
动态分析-lldb
要在刚刚追踪到的addMessageNode:layout:addMoreMsg:方法中打断点,首先我们得知道它在运行时的内存地址,那么内存地址怎么来呢?有这么一个公式:
内存地址=进程内存基地址+函数在二进制中的偏移量
首先偏移量我们可以通过反汇编工具hooper来查,在pc上用hooper打开微信的二进制文件(注意,打开时会让你选择armv7或者arm64,这需要根据你越狱手机的cpu类型来选,一定要和你的手机一致),hooper的界面非常简洁,左侧有个搜索框,可以输入函数名,直接找到函数在二进制中的位置
Paste_Image.png通过左侧的搜索框搜addMessageNode关键字,找到它的偏移量是
0x0000000101e770c0
找到了偏移量,还需要进程的基地址,这个地址需要连lldb,所以下面讲一下如何连接lldb进行远程调试,先ssh进越狱手机的终端,在终端输入如下命令(注意,你的手机必须连xcode调试过才会有这个命令):
debugserver介绍
debugserver *:19999 -a WeChat
然后在pc端新起一个终端窗口,输入如下命令来连接手机端进行调试:
lldb -> process connect connect://deviceIP:19999
如果连接成功,会进入lldb的控制台,我们在lldb的控制台输入如下命令来获取微信进程的基地址:
image list -o -f
Paste_Image.png0x0000000000058000
- debugserver的错误:
Administratorde-iPhone:~ root# debugserver *:1234 -a Zhixing
debugserver-310.2 for armv7.
Attaching to process Zhixing...
Segmentation fault: 11
实战:干掉高德地图7.2.0版iOS客户端的反动态调试保护
砸壳的方法:
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib
若此过程出现Killed:9错误,只需要执行命令:
cd /
su mobile
基本入门看这个iOS ARM汇编入门
iOS ARM分析实例这个看完,可以开始对一些汇编进行解读。
ARM汇编与objc_msgSend这个也是必须看的,系统函数的不同,调用规则就不同。
ARM处理器汇编几乎所有的指令都可以在这里找到
ARM向量浮点指令集剩余找不到的基本上可以从这里找到
-
具体ARM指令集合:
TBB TBH -
指令扩展部分
ARM位域提取指令SBFX和UBFX
SBFX{cond} Rd, Rn, #lsb, #width
UBFX{cond} Rd, Rn, #lsb, #width
cond 可选,条件码
Rd 目标寄存器
Rn 源寄存器
lsb 位域的最低有效位的位置,范围是0-31
width 位域的宽度,范围是1到 32-lsb
SBFX 从一个寄存器提取位域,并符号扩展到32位,结果写入到目标寄存器
UBFX 类似,0扩展
限制:
源寄存器和目标寄存器 都不要用 PC和 SP
举例
UBFX R8, R4, #8, #4
实际就是 R8 = (R4 & 0xF00)>>8;
UBFX R1, R1, #8, #8
实际就是 R1 = (R1 & 0xFF00)>>8;
lldb http://blog.csdn.net/quanqinyang/article/details/51321338