- 作者: 纯情
- 时间:
- 分类: 开源
全是干货,笔者在使用IDA的过程,总结了很多场景下的使用,以下内容来自笔者+互联网总结。有些文章我不记得从哪看了,但是感谢大佬的分享。
Python条件断点与hook功能
目的:使程序在 rand返回值是16949时断下来,其他情况继续执行。让python脚本帮我们做。
导入脚本:
设置普通断点,在call rand()之后设置(此时能获取rand()函数的返回值)
[右键] --> [Edit Break ···]
[Condition] --> [···]
输入bp(),并选择语言为Python
运行样本程序,发现rax == 16949(0x4235)时断了下来
适用的情况:当达到条件时触发断点,然后执行脚本中的功能,然后继续运行程序。
总归还是一个很有用的技巧
IDA-Fork双进程调试法
fork的子进程特点:
●无法直接启动调试,只能附加。
●进程存在时间短,很可能执行完逻辑后就退出,开没开始附加进程就没了。
目的,想调试下面fork子进程的代码:
思路:
1将子进程的第一条指令patch为死循环
2循环处下断点,重新打开IDA附加子进程,恢复第一条patch后的指令,调试
步骤:
1fork调用处设置断点,断下来后,对子进程进行patch。
观察到第一条指令只是log输出,没什么用处。所以可以对<span class="ne-text">BL __android_log_print</span>指令进行patch:
patch后:(一个死循环,自己跳自己)
2f9使程序运行起来,再主线程Detach掉(取消附加)
3 然后死循环处下断点,重新附加子进程( 此时子进程由于死循环的关系,会一直存在 )
4子进程会断在死循环处:
5 最后使用SetIP跳出死循环到需要调试的代码上,就可以与愉快的调试子进程了:
IDA编写脚本语法提示
日常逆向,肯定需要编写IDA脚本,在vscode进行编写,如果有提示,那就很方便了
vscode 安装插件 idacode
配置环境变量
然后就可以获得提示啦:
堆栈不平衡-报错修复技巧
// positive sp value has been detected, the output may be wrong!
打开IDA设置
设置为0,就OK了
IDA Trace功能
Trace 的粒度:
第一个是指令级别的trace,就是记录的是每条指令的指令。
第二个是基本块的trace,基本块的概念 ollvm 里面有,可以找下文档。
第三个是函数级别的trace,仅仅记录函数的调用。
运行然后卡在断点处时,这个选项就可以选了
我们停止调试,打开 trace 窗口看看,打开菜单项 [Debugger] → [Tracing] → [Tracing Window] 查看 Trace 记录:
将这些数据导出,可以直接右键 export trace to text file,以文本模式导出来,这样可以直接用 python 处理,比较方便。
标签: python脚本, 逆向工程, IDA Pro, 调试技巧, 条件断点