作为一个成熟 (笑) 的Rer,应该都已经在C程序的学习中使用过编译器的Debug功能,这些让程序实际运行起来,观察程序运行时的各种变化与行为,从而对程序进行分析。
Re里的动态调试其实与IDE上的大同小异,只不过以往的调试是源代码级别的,而逆向里的调试是汇编代码级别的跟踪,查看的是寄存器、栈、内存里面的数据,而不是已知的变量里的信息。
OllyDBG调试和x64DBG
由于OllyDBG只支持32bit,而x64DBG支持32bit与64bit。注意,这两款都是Windows平台软件。
笔者只用过OllyDBG,因此叙述会以OllyDBG为准。
打开文件:
咳咳,是吾爱破解特供版。如图,就是反汇编区,左下是内存数据区,右上是寄存器显示区,右下则是栈显示区。
控制程序运行
按control+G,即可跳转到目标地址,在反汇编窗口,摁F2键切换断点状态;F8为单步步过,F7为单步步入,F4为运行到光标处,F9运行。
常见的断点设置在程序内某个地址、程序调用的API(接口)。
简单的脱壳
Windows下调试很大部分的应用场景就是脱壳,所谓的“壳”就是一种特殊的程序,对另外一个需要保护的文件进行变换后,重新生成