编程知识 购物 网址 新闻 笑话 | 软件 日历 阅读 图书馆 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
   -> 其它语言 -> ios逆向过程中lldb调试技巧 -> 正文阅读

[其它语言]ios逆向过程中lldb调试技巧

在ios逆向过程中,善于运用lldb,会给逆向带来很大的方便
一般的命令:
1、image list -o -f  看看各个模块在内存中的基址
2、register read r0  读取寄存器r0的值。register read  读取所有寄存器的值
3、expression(或者缩写expr)  表达式 
     例子:
     expression $r6 = 1   // 设置r6寄存器的值
     expression $r6       // 查看r6寄存器的值
     expression username(源代码中变量) = @"11111"
     expression [self btnTest]     // 调用某类某方法
4、po 表达式
    例子:
    po $r6
    po username
    po [[NSString alloc] initWithData:$r2 encoding:4]   // 打印$r2寄存器的明文数据
    po [$r5 base64EncodedStringWithOptions:0];          // 打印$r5寄存器(NSData)类型的base64明文数据
5、print (type)表达式
     例子:
     print (int)$r6
     print username
 6、bt [all]   --- 打印调用堆栈
     例子:
     bt
    返回如下:
 * thread #1: tid = 0x1ee09, 0x00035e80 debug`-[ViewController loginWithUserName:password:](self=0x15d7be60, _cmd=0x00036441, username=0x15db0120, password=0x0003768c) + 168 at ViewController.m:34, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1
  * frame #0: 0x00035e80 debug`-[ViewController loginWithUserName:password:](self=0x15d7be60, _cmd=0x00036441, username=0x15db0120, password=0x0003768c) + 168 at ViewController.m:34
7、breakpoint list     //打印断点列表
    例子:br l
8、s   源码级别单步执行,遇到子函数则进入
9、si  单步执行,遇到子函数则进入
10、n 源码级别单步执行,遇到子函数不进入,直接步过
11、ni 单步执行,遇到子函数不进入,直接步过
12、finish/f  退出子函数
13、thread list 打印线程列表
14、image lookup -a 表达式、image list
      例子:
     image lookup -a $pc
     返回如下:
      Address: debug[0x0000b236] (debug.__TEXT.__text + 1254)
      Summary: debug`main + 58 at main.m:16
15、查找某个函数:
      对于有调试符号的这样使用
      image lookup -r -n <FUNC_REGEX>
      对于无调试符号的这样使用:
      image lookup -r -s <FUNC_REGEX>
16、disassemble(简写di) -a 地址
      disassemble -A thumb    
      可选:
      thumbv4t
      thumbv5
      thumbv5e
      等等一系列
17、memory read [起始地址 结束地址]/寄存器 -outfile 输出路径
18、内存断点 watchpoint set expression 地址    /  watchpoint set variable 变量名称 -- (源码调试用到,略过)
      例子:
      watchpoint set expression 0x1457fa70
     命中后得到结果:
     Watchpoint 3 hit:
     old value: 3
     new value: 4
18.1、内存访问断点 watchpoint set expression -w read -- 内存地址
     watchpoint set expression -w read -- 0x16b9dd91
18.2、内存写入断点 watchpoint set expression -w write -- 内存地址
     watchpoint set expression -w read -- 0x16b9dd91
18.3、条件断点 watchpoint modify -c 表达式
     例子:
     watchpoint modify -c '*(int *)0x1457fa70 == 20'
     命中后得到结果:
     Watchpoint 3 hit:
     old value: 15
     new value: 20
19、找按钮事件 po [按钮名称/内存地址 allTargets] 
     例子:
    (lldb) po [[self btnTest] allTargets]
    {(
        <ViewController: 0x166af1f0>
    )}
  (lldb) po [[self btnTest] actionsForTarget:(id)0x166af1f0 forControlEvent:0]
   <__NSArrayM 0x165b8950>(
  testAction:
  )
Bash

// 在机器上实战一下:
(lldb) po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
<UIWindow:
 0x15e771c0; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 
0x15e96210>; layer = <UIWindowLayer: 0x15e988e0>>
   | <UIView: 0x15eb4180; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x15eb4300>>
  
 |    | <UIButton: 0x15eb32d0; frame = (277 285; 46 30); opaque = NO;
 autoresize = RM+BM; layer = <CALayer: 0x15eb2e30>>
   |    
|    | <UIButtonLabel: 0x15db5220; frame = (0 6; 46 18); text = 
'Button'; opaque = NO; userInteractionEnabled = NO; layer = 
<_UILabelLayer: 0x15db5410>>
   |    | <_UILayoutGuide: 0x15eb4360; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x15eb4540>>
   |    | <_UILayoutGuide: 0x15eb4af0; frame = (0 568; 0 0); hidden = YES; layer = <CALayer: 0x15eb4b70>>

(lldb) po [(UIButton *)0x15eb32d0 allTargets]
{(
    <ViewController: 0x15e93250>
)}

(lldb) po [(UIButton *)0x15eb32d0 allTargets]
{(
    <ViewController: 0x15e93250>
)}

(lldb) po [(UIButton *)0x15eb32d0 actionsForTarget:(id)0x15e93250 forControlEvent:0]
<__NSArrayM 0x15dbfc50>(
testAction:
)
// 调用--
(lldb) po [0x15e93250 testAction:nil]
0x00210c18

 // 再来一发,对按钮属性操作
Bash

(lldb) po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
<UIWindow: 0x15e771c0; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x15e96210>; layer = <UIWindowLayer: 0x15e988e0>>
   | <UIView: 0x15eb4180; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x15eb4300>>
   |    | <UIButton: 0x15eb32d0; frame = (277 285; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x15eb2e30>>
   |    |    | <UIButtonLabel: 0x15db5220; frame = (0 6; 46 18); text = 'Button'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x15db5410>>
   |    | <_UILayoutGuide: 0x15eb4360; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x15eb4540>>
   |    | <_UILayoutGuide: 0x15eb4af0; frame = (0 568; 0 0); hidden = YES; layer = <CALayer: 0x15eb4b70>>

(lldb) expression UIButton *$btn = (UIButton *)0x15eb32d0
(lldb) expression [$btn setHidden:YES]

20、std::string 读取方式:从内存+8的地方开始  64bit自行变通
    例:
    Bash

(lldb) x $r0+8      
0x02db9248: 20 82 e3 14 71 00 00 00 61 00 00 00 c0 82 d3 14   .惝q...a...喇赢
0x02db9258: 71 00 00 00 2b 00 00 00 20 f9 e6 14 61 00 00 00  q...+... .a...
(lldb) x/s 0x14e38220
0x14e38220: "hello!piaoyun"


参考:http://www.dllhook.com/post/51.html

  其它语言 最新文章
markdown入门杂记
Oracle数据库的安装
PHP 中 SESSION 反序列化机制
开发Maven插件
bat脚本:windows下一键启动zookeeper+kafka
3.指针
java分页三个类 PageBean ResponseUtil Str
c语言函数传参详解
自动扫描和暴力破解
汇编语言之寻址方式
上一篇文章      下一篇文章      查看所有文章
加:2017-07-06 22:05:35  更:2017-07-06 22:05:38 
 
360图书馆 软件开发资料 购物精选 新闻资讯 Chinese Culture 三丰软件 开发 中国文化 阅读网 日历 万年历 2019年12日历
2019-12-8 19:16:13
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程知识