15、逆向插件的安装与使用

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之后,就可以通过指令来打印视图的层级关系,如下:

image

  • 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+.可以查看隐藏文件夹)。

image

然后配置.lldbinit文件,在文件中添加dslldb.py的路径:

command script import /opt/LLDB/lldb_commands/dslldb.py
image
  • 下面我们来简单介绍一下LLDB这个插件的使用,比如说,可以去全局的检索控件:search UIVIew

    image

  • 通过地址对方法进行断点。
    比如我们的Demo中有一个按钮:

    image

    我们都知道,在发布的APP中,符号是被脱离的,我们无法通过符号断点去定位到对应的方法,并下断点的。这个时候我们就可以利用LLDB插件,下一个地址断点。
    我们使用插件已经找到了方法的地址,操作步骤如下:
    image

    然后通过地址下断点:
    image

    点击登录按钮:
    image

  • 通过sbt恢复符号:

    image


3、Cycript

Cycript是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OCJavaScript语法的解释器,这意味着我们能够在一个命令中使用OC或者JavaScript,甚至两者并用。它能够挂钩正在运行的进程,能够在运行时修改很多东西。官网地址
下载后使用Cycript可执行文件:

image

如果你像我一样运行这个可执行文件报错了:
image

没关系,还记得我们之前安装的MonkeyDev吗?在这里面也有一个同样的可执行文件cycript,把这个可执行文件拷贝出来替换我们从官网下载的可执行文件就可以了:
image

image

  • 当然我们不可能每次都要来到这个文件夹去执行对应的可执行文件,这个时候,我们就要配置一下环境变量了。
    同样的,将刚刚的文件夹放到opt里面:

    image

    然后配置一下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的调试指令去调试我们需要逆向的工程了。

你可能感兴趣的:(15、逆向插件的安装与使用)