IDA高级功能使用以及实战必备技巧 作者: 纯情 时间: 2026-01-14 分类: 开源 评论 返回文档 全是干货,笔者在使用IDA的过程,总结了很多场景下的使用,以下内容来自笔者+互联网总结。有些文章我不记得从哪看了,但是感谢大佬的分享。 Python条件断点与hook功能 目的:使程序在 rand返回值是16949时断下来,其他情况继续执行。让python脚本帮我们做。 导入脚本: 9123def bp():rax = idc.get_reg_value('rax')return rax == 16949设置普通断点,在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 处理,比较方便。