美文网首页
逆向开发-动态调试总结

逆向开发-动态调试总结

作者: 汩汩汩汩 | 来源:发表于2018-12-18 15:59 被阅读0次

前言


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

相关文章

  • 逆向开发-动态调试总结

    前言 iOS逆向开发已经发展了很多年,各种各样的逆向开发工具层出不穷。逆向开发者早已不再纠结如何对APP的重签名以...

  • LLDB调试命令

    一、LLDB 正向开发与逆向都经常会用到LLDB调试,而熟悉LLDB调试对正向、逆向开发都有很大的帮助,尤其是动态...

  • iOS逆向开发(四)----LLDB,ASLR

    iOS逆向开发(四)----LLDB,ASLR 我们常常需要动态调试app,通过xcode安装的app都支持动态调...

  • Nexus 5X如何开启系统调试,如何root

    一、如何开启系统调试 很多时候我们逆向app的时候就会需要动态调试,动态调试需要修改AndroidManifest...

  • OD常用断点之CC断点

    在做Windows平台软件逆向时,Ollydbg是极其常用的逆向工具,动态调试功能非常强大。在调试过程中,断点的使...

  • Android Studio 动态调试apk

    一、什么是动态调试 其实是动态调试 Smail文件 ,一种逆向分析的方式,通过 jdwp 调试相关进程。一般在做竞...

  • Android Studio动态调试apk

    动态调试是Android逆向不可或缺的技能之一,本文简单介绍一下利用Android Studio动态调试apk的流...

  • iOS开发调试技巧总结

    iOS开发调试技巧总结 iOS开发调试技巧总结

  • Class - dump

    逆向原理 动态调试 通过界面调试Cycript\Xcode LLDB!静态分析 利用我们之前学习的汇编代码,分析三...

  • iOS 逆向开发20:LLDB 动态调试

    iOS 逆向开发 文章汇总[https://www.jianshu.com/p/a9b3c5ecc8aa] 目录 ...

网友评论

      本文标题:逆向开发-动态调试总结

      本文链接:https://www.haomeiwen.com/subject/cgilvftx.html