OD学习之模态对话框

对话框从分类上分为两类:modal对话框和modeless对话框,翻译成中文就是模态对话框和非模态对话框。

他们的区别在于是否允许用户在不同窗口进行切换:模态对话框不允许,非模态对话框可以。

原理:模态对话框由windows为他内建一个消息循环,而非模态对话框的消息则是通过用户程序中的消息循环派送的。

创建模态对话框是由:DialogBoxParam函数实现的。非模态对话框是调用CreateDialogParam函数实现。

 

实验:

0x00

首先OD载入实验程序,然后运行,结果发现,在程序退出的时候会弹出一个modal对话框,就从此处入手。

 

0x01

用exescope查看完整的PE结构。找到程序结束后弹出的对话框的实例句柄(103)。

 

 

 

然后根据DialogBoxparam函数的原型,第一个参数就是要压入实例句柄。那么在OD代码段中寻找该窗口位置,可以根据指令push 0x67(103的16进制值)查找。

查找所有命令,找到一处出现。双击进入,下断点。

 

 

然后找到整个函数调用的起点。Push ebp。将上面的断点去掉,下新的断点。

 

 

0x02

然后根据函数调用堆栈数据变化找到调用这个函数的初始位置。

首先重载程序,然后F9运行到断点处停止,这个时候观察堆栈窗口。

然后右键,反汇编窗口跟随,找到调用原始处。

发现call,下断点。然后又看见jnz的条件跳转,那么这个地方应该就是破解关键。

 

 

 

 

 

 

 

 

 

 

0x03

在此处发现控制跳转的call调用,下断,重载然后跟进函数,控制eax的值,是jnz跳转。然后步过结束窗口的调用。

 

步入发现逻辑比较简单。

 

那么直接修改eax的值就可以完成破解,但此处不能直接更改,代码长度不同会造成部分代码被修改的代码覆盖。可采用内嵌补丁。

但发现此处有两句同时修改eax的值,那么我们讲两句修改为1句即可。

最后备份,保存,破解成功。

 

 

猜你喜欢

转载自blog.csdn.net/CSDNPM250/article/details/81839359