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

时间:2023-03-09 17:48:21
OD 实验(四) - 去除 NAG 窗口的几种方法

程序:

运行

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

弹出一个窗口,说要注册

点击确定,到主窗口

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

关闭主窗口

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

然后弹出提醒注册的对话框

逆向程序

用 OD 打开程序

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

GetModuleHandleA 获取程序模块的句柄,程序在内存中的基址

内存中的一个模块代表一个可执行文件进程所需要的所有代码、数据、资源的集合

GetModuleHandleA 获取到的值放在 EAX 寄存器中

接下来的

mov dword ptr ds:[0x40311C],eax

把 EAX 的值赋给地址为 0x40311C 上

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

即把 00400000 放到地址 0x40311C 上

接下来,cmp 指令比较 eax 和 0 的关系

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

如果 eax 等于 0 的话,je 将跳过第一个 NAG弹窗

eax 为 0 的话,GetModuleHandleA 的返回值就为 0,GetModuleHandleA 就是没有句柄

可以把 je 改为 jmp 实现无条件跳转

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

第一个窗口也可以用 nop 填充来跳过第一个 NAG 窗口

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

选定区域

右键 -> 二进制 -> 用 NOP 填充

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

一个 NOP 相当于一个字节

还有一种方法

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

MessageBoxA 函数的第一个参数为 hOwner

hOwner 为该消息框的父窗口句柄,如果此参数为 NULL,则该消息框没有拥有父窗口

把 push 0x0 改为 push 0x1

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

1 不可能是一个句柄的值,所以这是一个不存在的句柄,则这个 MessageBoxA 也是不存在的

也可以通过修改 PE 文件头来去除 NAG 窗口

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

程序从地址 00401000 处开始

GetModuleHandleA 获取到的基地址为 00400000

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

所以地址 00400000 到地址 00401000 存放程序的文件头

可以通过修改程序的初始地址来跳过 NAG 窗口

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

点击 m,快捷键为 Alt+M,进入显示内存的窗口

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

00400000 开始为 PE 文件头,大小为 00001000

00401000 开始为代码块,00402000 开始为数据块

双击 PE 文件头这行,查看文件头的内容

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

第一列为地址,第二列为在内存中的指令形式,第三列为方便阅读的指令形式

例如第二行的 9000,是低地址 09 放前面,高地址 00 放后面

内存中的存放形式与现实中的读数是倒过来的

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

这个地方是 PE 结构的开始,是双字类型

C0 为指向 PE 头的偏移地址,相对于基地址偏移,即为 00400000 的偏移,地址为 004000C0

看一下地址为 004000C0 的地方

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

这个就是 PE 头,以 PE 的 ASCII 码开头

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

这个地方是程序的入口地址,这里的值为 0x1000,地址即为 00401000

把入口地址修改为 MessageBoxA 之后

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

地址为 00401024

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

在这里按 Ctrl+G 跟随表达式

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

输入设置程序入口地址的地址

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

接下来修改数值

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

把这个修改为 24,即为 1024

接下来保存文件

右键 -> 复制到可执行文件

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

右键 -> 备份 -> 保存数据到文件

运行一下保存的程序

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

没有弹第一个 NAG 窗口,而是直接进入主窗口

关闭主窗口,将弹出第二个 NAG 窗口

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