前言
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和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工具功能的冰山一角,想继续深入理解可以去官方八一八
本来想继续介绍另外一个更加牛逼的 debugger工具 cycript 的,但是由于本菜鸡需要去搬砖了,就暂时写到这里,有时间再补上~