逆向工程核心原理笔记-快速找到指定代码的四种方法
这里使用的exe文件使用VS编写源代码如下
#include "stdafx.h"
#include "windows.h"
#include "tchar.h"
int _tmain(int argc,TCHAR *argv[])
{
MessageBox(NULL,
L"HelloWorld!",
L"www.reversevore.com",
MB_OK);
return 0;
}
程序运行如下,弹出一个对话框。
下面的分析方法都是放在Ollydbg中的调试的。
第一种:代码执行法
就是使用F2加断点,F7 F8不断去寻找位置,适用于小型简单的Crackme程序。不断地调试之后我们找到这个位置。
可以看到首先压入栈参数,再进行执行。
第二种:字符串检索法
等待程序运行完毕,右键查找所有参考字符串,但是这个方法我并未成功。
第三种:API检索法
右键查找所有模块间的调用,搜索MessageBoxW但是这个我也未能成功。
第四种:API检索法二
右键查找所有模块中的名称,找到了这个输出函数,双击。
得到这,我们在这里加一个断点。下次F9直接执行到这里。
执行到这里时,目标函数已经被调用,于是其返回地址也被压入栈中。我们看到此时的栈状态。
我们可以看到参数被压入栈中后返回地址压入。返回地址为,0x00B91724,我们查看这里的汇编指令。
同方法一,我们也找到了这里的目标函数。
函数调用栈的规则得清楚。
简单哈哈哈。