逆向开发-动态调试总结

前言


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


· LLDB

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

· 语法基础

[ [...]] [-options [option-value]] [argument [argument...]]

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

2.:执行命令的操作

3.:命令选项

4.:命令的参数

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 的,但是由于本菜鸡需要去搬砖了,就暂时写到这里,有时间再补上~

你可能感兴趣的:(逆向开发-动态调试总结)