小弟最近开始学习反汇编。碰到一个具体的例子,在此记录一下。
使用的小程序是Part10Tut.ReverseMe。首先碰到第一个问题:去除所有的Nag。关键在于寻找一个函数代码的起始地址。后续根据书上的示例和自己做的过程仔细对照,发现可以从栈中寻找。
图中是正在进入的函数语句,需要寻找它的代码位置。此时函数还没进入栈中,观察此时的栈:
栈顶元素所指向的地址为0F038913,使用ctrl+G语句在地址中寻找该地址:
找到该处地址。如何确定自己找的对不对呢?在语句的上一句call函数处设置断点,运行程序,停在了断点处,继续执行程序,发现它返回了00402C17地址,就是需要动手脚处函数的地址。可以确定,我们找到了代码的存放地址。接下来需要确定函数的参数有几个,以便返回正确的栈地址。
最终可以确定,应该返回4栈地址以跳过函数。改写为retn 4。
以上。