该程序是经 release版本 进行编译的。
打开该程序之后,使用 鼠标左键 点击窗口,会弹出标题和内容均为 1 的窗口;使用 鼠标右键 点击窗口,会弹出标题和内容均为 2 的窗口。
打开该程序之后,选中窗口,当我们按下正确的键盘按键时,会弹出该按键的键盘码,否则便会弹出Error窗口。正确的键盘码有3个。下图以其中一个按键“A”为例,请找出剩余的2个(当然你要是一个个试那就没意思了)
定位程序对于鼠标左键的处理代码,过程如下图:
定位程序对于鼠标右键的处理代码,过程如下图:
LRESULT CALLBACK WindowProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ){...}
答:首先我们要知道,本次分析的程序是 release版 的,也就是说此时 对于参数和局部变量 所采用的 寻址方式 不再是 ebp寻址,而是 __esp寻址__了。相比于ebp寻址,esp寻址分析起来会比较的麻烦,因为 esp的值是会不断发生变化的。
0x4010F0位置处的汇编指令:mov eax,dword ptr ss:[esp+0x8] 汇编指令分析
0x401120位置处的汇编指令:mov eax,dword ptr ss:[esp+0x30]汇编指令分析