iOS备忘录Rason的iOS开发进阶专题iOS Developer

iOS越狱开发入门帮助文档

2017-10-19  本文已影响272人  RasonWu

旧版本Reveal安装要求
一台能够越狱的iPhone,最好是iOS7或者iOS8版本;
Reveal1.6.3最新版本

PP助手直接下载越狱后的微信ipa

解压后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
ps aux | grep WeChat
Paste_Image.png
cycript -p 665
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方式二:

iOS逆向工程之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

debugserver + lldb环境搭建

动态分析-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.png

0x0000000000058000

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向量浮点指令集剩余找不到的基本上可以从这里找到

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

上一篇下一篇

猜你喜欢

热点阅读