在顶部有一个下拉菜单,选择调试器后端位置

很多用户实际上使用的是Windows版本的IDA,该IDA可以直接调试Windows下32bit和64bit的程序
载入IDA后,程序实际上在对程序内置的一个字符串进行base64解码
考虑到运行过程中会直接生成所需的明文,所以调试直接抓取最终的嗯嗯解码结果会更加便捷

IDA中按F2设置,也可以单击左侧小蓝点设置
在切换为断点后,对应的底色将会变成红色
IDA使用反汇编的伪代码进行调试,同样支持反汇编的后伪代码下断点
伪代码窗口中行号左侧有蓝色的圆点,这些圆点与反汇编窗口左侧蓝色的小点功能一样,都是用来切换断点的状态的
单击这蓝色圆点,伪代码的对应类似反汇编窗口中的断点,变为红色底
通过debugme,在main函数上设置断点,然后运行

在中断后,选择”Debugger->Debugger windows->Locals“菜单命令,打开查看局部变量的窗口


默认情况下,locals窗口与伪代码窗口一起显示

单步执行至scanf,会发现程序进入运行状态,此时等待用户输入,随意输入一些内容后回车,程序再次中断
此时Loacal窗口中的v13变量显示刚才输入的值

红色代表这些变量的值被修改过
继续执行程序至base64_decode后,可以看见v5已经被修改成另有一个值

但实际上v5为一个字符串,存放着正确的输入
如何获取v5的内容


至此,我们成功的利用调试找到了内存中的flag
注意 IDA中的变与C语言中变量的行为并不完全一致,IDA中的变量有特殊的生命周期,尤其是寄存器中的变量,在超出一定范后,其值会被覆盖成其他变量的值,这是无法避免的
所以Locals中变量的值在远离被引用位置时并不可靠
请仅在该变量被引用时或明确知道该变量生存周期时再相信Locals显示的值