OD 实验(十六) - 从对话框入手对程序的逆向

Posted sch01ar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OD 实验(十六) - 从对话框入手对程序的逆向相关的知识,希望对你有一定的参考价值。

对话框:

对话框从类型上分为两类:modal 对话框和 modeless 对话框,就是模态对话框和非模态对话框,也有叫成模式和非模式

模态对话框不允许用户在不同窗口间进行切换,非模态对话框允许用户在不同窗口间进行切换

两者形成区别的原理是模态对话框由 windows 为它内建一个消息循环,而非模态对话框的消息则是通过用户程序中的消息循环派送的

创建模态对话框是由调用 DialogBoxParam 函数实现的,而创建非模态对话框是调用 CreatDialogParam 函数实现

程序:

技术分享图片

点击 SETUP.EXE 进行安装

按默认步骤安装

技术分享图片

这是主界面

技术分享图片

点击 File -> Register 是进行注册的地方

技术分享图片

关闭程序

技术分享图片

它会弹出该对话框,该对话框是模态对话框

技术分享图片

如果直接按退出会显示该帮助文档

技术分享图片

只有点击 I Will Register Soon 才会退出程序

用 eXeScope 载入程序

技术分享图片

选择 资源 -> 对话框 -> 103,是程序要退出时候的对话框

技术分享图片

103 为 MFC 下的 lpTemplateName 对话框模板

逆向:

用 OD 载入程序

技术分享图片

右键 -> 查找 -> 所有命令

技术分享图片

查找 push 0x67,67 为 103 的十六进制

调用模态对话框 DialogBoxParam 的时候会将它的参数入栈,103 也是它的第一个参数

技术分享图片

双击,来到它的位置

技术分享图片

在该代码块开头下一个断点

技术分享图片

跑一下程序

技术分享图片

点击退出程序之后,没有弹出对话框,直接停在该断点处

如果函数 A 调用函数 B 的话,函数 A 会被 push 入栈,当函数 B 执行完之后返回到函数 A 的时候,函数 A 会被 pop 出栈

看一下栈窗口

技术分享图片

返回到 004023C0 来自 00401220

右键 -> 反汇编窗口中跟随

技术分享图片

来到了该地址

上面那个 call 就是调用刚才那个过程

技术分享图片

上面有个 jnz 跳转指令,如果 eax 是一个非零值,它就会进行跳转,跳转就能跳过那个 call 指令

在 test 指令上面的 call 指令处下一个断点

技术分享图片

重新跑一下程序

点击关闭程序的按钮之后停在该断点处

技术分享图片

按 F7 步入

技术分享图片

只有几条指令之后就执行 retn,没有条件跳转,可能程序一运行就直接在这里检查是否注册

在该过程开头下一个断点

技术分享图片

重新跑一下程序

技术分享图片

一打开程序,就停在该断点处,说明这个过程就是检查是否注册

如果该过程返回非零值就会跳过程序最后的那个对话框

接下来修改指令

技术分享图片

如果修改将上面这条指令改为 mov eax, 0x1 的话,会覆盖掉后面的那条指令

技术分享图片

所以把这两条对 eax 的值有影响的指令做修改,改为 mov eax, 0x1

技术分享图片

选择这两行指令,右键 -> 汇编,进行修改

技术分享图片

 改完之后保存程序,运行

技术分享图片

Register 按钮已经不能点击了,退出程序的时候也没有对话框了

以上是关于OD 实验(十六) - 从对话框入手对程序的逆向的主要内容,如果未能解决你的问题,请参考以下文章

OD 实验(十三) - 对一个程序的逆向

OD 实验 - 对一个 Delphi 程序的逆向

OD 实验(十九) - 对多态和变形程序的逆向

OD 实验 - 对一个程序的逆向

OD 实验 - 去除 NAG 窗口的几种方法

对程序实施精准手术!阿里安全猎户座实验室首创“自动逆向机器人”