iOS逆向学习笔记15(LLDB插件安装以及使用)

1. LLDB高级调试插件

  这里介绍以下LLDB调试三个好用的插件安装以及简单使用,这三个插件分别是Chisel、DerekSelander/LLDB以及Cycript。

2. Chisel安装及使用

2.1 Chisel的安装

2.1.1 首先安装Homebrew

homebrew安装及介绍
安装报错解决方案
如果安装报错为这个(LibreSSL SSL_read: SSL_ERROR_SYSCALL),就下载下面的sh文件并使用bash执行
homebrew安装文件 密码:84bv
homebrew使用帮助

2.1.2 安装Chisel

Chisel Git地址
安装的时候如果遇到下面的报错:

解决方案,终端输入下面其中一个命令
git -C $(brew --repository homebrew/core) checkout master
or
git -C $(brew --repository homebrew/core) reset --hard HEAD.

如下图所示:


2.2 Chisel的使用

2.2.1 查看视图及其子视图层级

界面如下:


  • 使用po命令查看
po [self.view recursiveDescription]
  • 使用Chisel命令查看
![](https://upload-images.jianshu.io/upload_images/26010159-9bb7325f2f912276.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 查看当前界面视图层级
pviews

2.2.1 查看视图的父视图的层级

pviews -u self.view

2.2.1 查看当前界面控制器的层级

pvc

2.2.3 查看类的信息

  • 查看一个类的父类
pclass 类对象的内存地址
  • 查看类中的方法
pmethods 类对象的内存地址
  • 查看类中的成员属性
pinternals 类对象的内存地址

2.2.3 查看一个视图所属的控制器

fvc -v 视图对象内存地址

2.2.4 查看当前视图中某一类型视图的所有对象

fv 视图类名

更多使用:请查看其README.md文件

2.2.5 在界面中查找视图

  • 闪动视图
flicker 视图对象内存地址
  • 在界面中显示视图
vs 视图对象内存地址

3. DerekSelander/LLDB安装及使用

3.1 DerekSelander/LLDB下载及安装

DerekSelander/LLDB Git地址
进入页面后,操作如下图所示:


下载完成后,将LLDB放入到根目录的opt文件夹中,如下图所示:

配置.lldbinit文件,添加如下一行字符串:

command script import /opt/LLDB/lldb_commands/dslldb.py

然后保存,重新编译运行项目就可以使用了。

3.2 DerekSelander/LLDB的基本使用

3.2.1 搜索当前内存中存在的某一个类型的对象

search 类名

3.2.2 使用举例

给注册按钮的响应事件方法添加断点,hook的应用添加符号断点是没有用的,因为这个时候调试符号,内部符号都被脱去了,打不上断点了,如下图所示:



那么如果我们还要想要下断点怎么办呢,可以设置一个内存断点,首先获取当前显示的控制器,然后打印这个控制器中的所有方法及其内存地址,通过方法地址下断点,如下所示:



找到方法名及其地址后,设置一个符号断点,如下所示:


然后点击注册按钮就可以断到断点了。



可以通过sbt命令恢复符号(类的方法符号)查看堆栈信息,如下所示:

3. Cycript介绍及使用

3.1 Cycript的介绍

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

3.2 Cycript的使用

  因为我们在之前已经安装好了Monkey了,其中已经内置安装好了Cycript,我们直接使用就可以了。


3.2.1 使用无线网络链接无线设备

  • 获取设备IP地址



    这个图中的IP地址就是了

  • 链接设备


3.2.2 使用举例

  • 打印对象信息


  • 定义变量


  • 打印对象及显示对象的所有成员变量


  • 查看视图层级



  • 搜索并打印内存中存在的某个类的所有对象信息




    使用Cycript的好处就是这种方式不会阻塞住应用程序的进程,很方便。

  • 打印当前界面的控制器层级


3.2.3 修改界面

  • 修改应用角标数



    效果图
  • 修改界面显示


    界面修改前的显示

    执行链接,打印出所有的view


    打印当前界面所有的视图对象

    或使用下面的命令,输出内容更少一些
    打印所有的UILabel对象
搜索文本视图
拿到视图的内存地址
修改视图文本内容
修改完成后显示

3.2.2 脚本自动链接

  • 创建文件目录


  • 配置环境变量


    编辑.zshrc文件

    配置路径

    自动链接

3.2.2 封装自定义的cy文件

cycript之所以能够使用以上的这些命令,是因为这些命令实际上是一些实现好了的函数,如下图所示:



红框中的两个链接就是,这些命令的地址

https://raw.githubusercontent.com/AloneMonkey/MDCycript/master/MS.cy
https://raw.githubusercontent.com/AloneMonkey/MDCycript/master/md.cy

除此之外我们也可以自定义cy文件来使用。


创建一个cy文件

自定义一个sum函数

将文件加到工程中去

编译运行项目,在项目运行之后链接cycript,执行下面的命令:



然后就可以使用这个自定义cy文件中的函数了,如下所示:

你可能感兴趣的:(iOS逆向学习笔记15(LLDB插件安装以及使用))