1、chisel
这是Facebook提供的一款逆向的插件,chisel地址。
官方文档是这样写的:
Chisel is a collection of LLDB commands to assist in the debugging of iOS apps.
本质就是一个Python写的插件,调用了LLDB的相关API
GitHub上面有详细的安装和使用说明,这里对应插件的安装就不多做赘述。我们只来展示一下它的一些使用,在安装好插件之后,记得重启Xcode,让插件生效。
我们在逆向的过程中,如果不能通过ViewDebug
去查看视图的层级关系,那么安装了chisel
之后,就可以通过指令来打印视图的层级关系,如下:
-
pviews -u self.view
查看上一级图层:
image -
pvc
查看控制器的层级
image -
pclass 0x7fb77f80e0b0
打印类的详细信息。比如我们想更了解一下上面的JaxViewController
,可以这样做:
image -
pclass 0x7fb77f80e0b0
查看JaxViewController
中有哪些方法:
image -
pinternals 0x7fb77f80e0b0
查看JaxViewController
有哪些成员属性: image -
fvc -v 0x7fb77fc15e90
通过空间的地址,查找它的父控制器: image -
fv UIView
通过名称,查找控件 image - 当我们通过
pviews
打印出图层信息之后,由于信息比较多,不太好确定空间位置的时候,可以用flicker 0x7fb77fc15e90
(比如Demo中的Button
控件),执行这一条指令,对应的控件就会闪烁一下,可以用于定位。 - 我们除了用
flicker
来定位控件之外,还可以用vs 0x7fb77fc15e90
的形式来定位,它会给控件一个前景色,并且进入一个调试状态;在调试状态的情况下,可以使用特定指令来定位不同层级的控件:
Use the following and (q) to quit.
(w) move to superview
(s) move to first subview
(a) move to previous sibling
(d) move to next sibling
(p) print the hierarchy
2、LLDB
接下来再来介绍一款插件LLDB
;下载地址
LLDB
文件夹下,有一个README.md
文件,里面介绍了LLDB
插件的使用规范。
clone
下来之后将整个文件夹发到opt
文件夹下面(cmd+shift+.
可以查看隐藏文件夹)。
然后配置.lldbinit
文件,在文件中添加dslldb.py
的路径:
command script import /opt/LLDB/lldb_commands/dslldb.py
image
-
下面我们来简单介绍一下
imageLLDB
这个插件的使用,比如说,可以去全局的检索控件:search UIVIew
-
通过地址对方法进行断点。
image
比如我们的Demo中有一个按钮:
我们都知道,在发布的APP中,符号是被脱离的,我们无法通过符号断点去定位到对应的方法,并下断点的。这个时候我们就可以利用LLDB
插件,下一个地址断点。
我们使用插件已经找到了方法的地址,操作步骤如下:
image
然后通过地址下断点:
image
点击登录按钮:
image -
通过
imagesbt
恢复符号:
3、Cycript
Cycript
是由Cydia
创始人Saurik推出的一款脚本语言,Cycript
混合了OC
、JavaScript
语法的解释器,这意味着我们能够在一个命令中使用OC
或者JavaScript
,甚至两者并用。它能够挂钩正在运行的进程,能够在运行时修改很多东西。官网地址
下载后使用Cycript
可执行文件:
如果你像我一样运行这个可执行文件报错了:
image
没关系,还记得我们之前安装的
MonkeyDev
吗?在这里面也有一个同样的可执行文件cycript
,把这个可执行文件拷贝出来替换我们从官网下载的可执行文件就可以了:image
image
-
当然我们不可能每次都要来到这个文件夹去执行对应的可执行文件,这个时候,我们就要配置一下环境变量了。
image
同样的,将刚刚的文件夹放到opt
里面:
然后配置一下zsh
:
image
如果配置了MonkeyDev的环境变量,就没必要再去配置Cycript的环境变量了,因为MonkeyDev里面包含Cycript -
Cycript
常用命令- 进入
Cycript
环境:执行Cycript
可执行文件就可以了,如果配置了环境变量,直接使用Cycript
命令就可以了。 - 附加进程:
Cycript -r ip: port
- 退出
Cycript
环境:Ctrl + D
-
Cycript
调试命令:-
UIWindow.keyWindow()
:获取keyWindow
-
UIApp
:获取Application
单例对象 -
recursiveDescription()
循环打印子视图 -
toString()
:格式化打印(遇到\n
换行) -
# 对象地址
:拿到该对象,可用于调用方法 -
* 对象地址
:可以去除对象的成员变量 -
Choose(类名)
:查询当前进程中该类型的对象
-
- 进入
-
如何使用
Cycript
- 通过WiFi链接
假设我们逆向的工程正在运行,并我们已经安装了Cycript
。
这个时候我们获取到手机使用的IP地址(比如是:192.168.50.173
,此时电脑和手机在同一个WiFi下)。
那么我们就可以利用下面的指令进行连接:
cycript -r 192.168.50.173:6666
接下来我们就可以通过
Cycript
的调试指令去调试我们需要逆向的工程了。 - 通过WiFi链接
网友评论