逆向开发-动态调试总结

前言


iOS逆向开发已经发展了很多年,各种各样的逆向开发工具层出不穷。逆向开发者早已不再纠结如何对APP的重签名以及代码的注入。动态调试的能力基本上可以衡量一个逆向开发者的水平。如果你是一个iOS逆向开发新人,熟练掌握的动态调试工具将会让你的逆向水平上一个LEVEL。


· LLDB

大部分的iOS开发人员日常工作中都经常使用LLDB(Xcode内置REPL)进行动态调试,但是大部分的正向开发者都只是使用了其中一小部分的功能。作为一个逆向开发者来说,你必须更加全面的了解LLDB,因为其功能异常强大。

· 语法基础

<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]

1.<command>(命令)和<subcommand>(子命令):LLDB调试命令的名称。

2.<action>:执行命令的操作

3.<options>:命令选项

4.<arguement>:命令的参数

5.[]:表示命令是可选的,可以有也可以没有

· 断点设置


1.根据方法/函数名称设置断点

breakpoint/br set/s -r selectorName (名称带有selectorName的所有方法)

br s  -n  "[Class selector:]" (Class类的selector方法)

br s --method/-M funcName (C++函数)

br s --selector/-S  selectorName (方法名称)

2.根据方法/函数的地址设置断点

br s -a 0x00000001cc6e58d4 


· 断点查看与断点操作


1. 获取当前断点的列表

br list

1.0

每一次设置断点都会添加一个断点分组(如图1.0所示当前有两个断点组1和2)

2.开关某个断点(断点组)

br enable/disable  2/2.1 

3.删除某个断点(断点组)

br delete 2/2.1 

br delete(删除所有断点)

这里要注意,如果删除单个断点,断点并不会被删除,而只会变成disable

4.给某个断点(断点组)增加执行命令(一旦触发断点便会立刻执行)

breakpoint/break command add 2/2.1 

Enter your debugger command(s). Type 'DONE' to end. 

> bt 

> DONE

上面例子给2/2.1断点一旦触发就会执行bt(打印当前调用栈)命令

5.变量观察者断点(变量一旦发生变化就会触发类似KVO)

watchpoint set variable str 

watchpoint list (观察者断点列表)

· 流程控制


1.继续执行

thread continue/continue/c  

2.单步运行,将子函数当做整体一步执行

thread step-over/next/n 

thread step-over-inst/nexti/ni(单步运行汇编级别

3.单步运行,遇到子函数会进去

thread step-in/step/s

thread step-inst/stepi/si (单步运行可跳转指令内部,汇编级别)

4.表示直接走完当前方法,返回到上层frame

thread step-out/finish/f

5、当前frame(当前帧)往下执行多少行

thread until 100 (如果100行超出当前frame,则在退出当前frame的时候停止)

· 其他常用命令


1.执行代码

expression/p self.name/self.name="change value"

-o  可选:调用变量的description方法(可以直接用po)

2.打印当前frame的变量的值

 frame variable (所有变量)

frame variable self/&self/self.isa 打印某个变量或者某个变量的其他属性

-o  可选:调用变量的description方法

3.为当前线程调试增加执行命令

target stop-hook add

Enter your stop hook command(s). Type 'DONE' to end.

> bt

> DONE

4.其他命令

bt 打印当前调用栈

image list 查看某块列表

image lookup -a 0x34324234 查找对应地址的函数

register read 读取寄存器

register write 写入寄存器

Memory read 读取内存值

结尾


除了LLDB原生的命令之外,LLDB还支持开发者编写自定义插件。下面就两个插件就非常流弊,大家可以自行学习。

LLDB插件chisel

LLDB插件LLDB

以上也只是LLDB工具功能的冰山一角,想继续深入理解可以去官方八一八

LLDB命令官方文档链接

本来想继续介绍另外一个更加牛逼的 debugger工具 cycript 的,但是由于本菜鸡需要去搬砖了,就暂时写到这里,有时间再补上~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容