18-lldb(下)chisel & 插件

2021-05-29  本文已影响0人  深圳_你要的昵称

前言

一、虚拟内存 & ASLR

在我之前写的文章启动优化解析中,有介绍物理内存虚拟内存的区别,以及ASLR的概念,现在我们再次总结一下。

1.1 虚拟内存小结

1.2 ASLR小结

在我之前的逆向文章中,也不止一次的提到和用到ASLR,可见其重要性。我们需要掌握它的原理,为什么底层会这么设计,最好做到知其然知其所以然

ASLR的概念 👉 (Address Space Layout Randomization) 地址空间配置随机加载,是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。

ASLR的目的 👉 通过利用随机方式配置数据地址空间,使某些敏感数据(例如APP登录注册、支付相关代码)配置到一个恶意程序无法事先获知的地址,令攻击者难以进行攻击。

二、Chisel

Chisellldb的指令集合,可帮助开发者调试iOS应用程序。详情可查看 官方文档

2.1 安装

brew update
brew install chisel

打开~/.lldbinit,添加以下指令 👇

command script import /usr/local/opt/chisel/libexec/fbchisellldb.py

2.2 案例演示

2.2.1 查看View的视图层级

使用pviews指令👇

指定View下的视图结构👇

pviews self.view

指定View的上层视图结构👇

pviews -u self.view

2.2.2 查看控制器的视图结构

使用pvc指令👇

2.2.3 查看指定类的结构

使用pclass指令👇

2.2.4 查看指定对象的方法列表

使用pmethod指令👇

2.2.5 查看指定对象的成员属性

使用pinternals指令👇

2.2.6 寻找视图的所属控制器

使用fvc指令👇

fvc -v `view的地址`

2.2.7 寻找指定控件

使用fv指令👇

2.2.8 指令的使用帮助

pviews --help
-------------------------
Usage:  [options]

Options:
 -h, --help            show this help message and exit
 -u, --up              Print only the hierarchy directly above the view, up
                       to its window.
 -d DEPTH, --depth=DEPTH
                       Print only to a given depth. 0 indicates infinite
                       depth.
 -w WINDOW, --window=WINDOW
                       Specify the window to print a description of. Check
                       which windows exist with "po (id)[[UIApplication
                       sharedApplication] windows]".
 -s, --short           Print a short description of the view
 -m, --medium          Print a medium description of the view

2.2.9 让指定控件闪烁,可快速找到视图的位置

使用flicker指令👇

2.2.10 交互式搜索视图

使用vs指令👇

w:移动到父视图
s:移动到第一个子视图
a:移动到上一个同级
d:移动到下一个同级
p打印视图结构
q退出调试状态

三、LLDB

LLDBaliases/regexesPython的脚本集合,可帮助开发者进行调试。详情可查看 官方文档

3.1 安装

  1. 克隆LLDB
git clone https://github.com/DerekSelander/LLDB.git
  1. 打开~/.lldbinit,添加以下指令👇
command script import /Users/xxx/LLDB/lldb_commands/dslldb.py

⚠️注意:LLDB的安装路径。

3.2 案例演示

3.2.1 查找UIView的所有实例和子类

使用search指令👇

3.2.2 找到指定类的方法列表

使用methods指令👇

找到方法地址,可以对其设置断点👇

b -a `方法的地址`

3.2.3 找回方法的符号

使用sbt指令👇

总结

上一篇下一篇

猜你喜欢

热点阅读