OD 实验(四) - 去除 NAG 窗口的几种方法
程序:
运行
弹出一个窗口,说要注册
点击确定,到主窗口
关闭主窗口
然后弹出提醒注册的对话框
逆向程序
用 OD 打开程序
GetModuleHandleA 获取程序模块的句柄,程序在内存中的基址
内存中的一个模块代表一个可执行文件进程所需要的所有代码、数据、资源的集合
GetModuleHandleA 获取到的值放在 EAX 寄存器中
接下来的
mov dword ptr ds:[0x40311C],eax
把 EAX 的值赋给地址为 0x40311C 上
即把 00400000 放到地址 0x40311C 上
接下来,cmp 指令比较 eax 和 0 的关系
如果 eax 等于 0 的话,je 将跳过第一个 NAG弹窗
eax 为 0 的话,GetModuleHandleA 的返回值就为 0,GetModuleHandleA 就是没有句柄
可以把 je 改为 jmp 实现无条件跳转
第一个窗口也可以用 nop 填充来跳过第一个 NAG 窗口
选定区域
右键 -> 二进制 -> 用 NOP 填充
一个 NOP 相当于一个字节
还有一种方法
MessageBoxA 函数的第一个参数为 hOwner
hOwner 为该消息框的父窗口句柄,如果此参数为 NULL,则该消息框没有拥有父窗口
把 push 0x0 改为 push 0x1
1 不可能是一个句柄的值,所以这是一个不存在的句柄,则这个 MessageBoxA 也是不存在的
也可以通过修改 PE 文件头来去除 NAG 窗口
程序从地址 00401000 处开始
GetModuleHandleA 获取到的基地址为 00400000
所以地址 00400000 到地址 00401000 存放程序的文件头
可以通过修改程序的初始地址来跳过 NAG 窗口
点击 m,快捷键为 Alt+M,进入显示内存的窗口
00400000 开始为 PE 文件头,大小为 00001000
00401000 开始为代码块,00402000 开始为数据块
双击 PE 文件头这行,查看文件头的内容
第一列为地址,第二列为在内存中的指令形式,第三列为方便阅读的指令形式
例如第二行的 9000,是低地址 09 放前面,高地址 00 放后面
内存中的存放形式与现实中的读数是倒过来的
这个地方是 PE 结构的开始,是双字类型
C0 为指向 PE 头的偏移地址,相对于基地址偏移,即为 00400000 的偏移,地址为 004000C0
看一下地址为 004000C0 的地方
这个就是 PE 头,以 PE 的 ASCII 码开头
这个地方是程序的入口地址,这里的值为 0x1000,地址即为 00401000
把入口地址修改为 MessageBoxA 之后
地址为 00401024
在这里按 Ctrl+G 跟随表达式
输入设置程序入口地址的地址
接下来修改数值
把这个修改为 24,即为 1024
接下来保存文件
右键 -> 复制到可执行文件
右键 -> 备份 -> 保存数据到文件
运行一下保存的程序
没有弹第一个 NAG 窗口,而是直接进入主窗口
关闭主窗口,将弹出第二个 NAG 窗口
最新文章
- 使用SecureCRT连接虚拟机(ubuntu)配置记录
- ElasticSearch 5学习(5)——第一个例子(很实用)
- JavaScript Patterns 6.2 Expected Outcome When Using Classical Inheritance
- HTTP 权威指南
- deerlet-redis-client添加集群支持,邀请各路大神和菜鸟加入。
- dedecms的title怎么优化?
- 02.lib-v1.js
- fill的用法
- 数据结构之平衡二叉树(AVL)
- php连mssql中文乱码问题
- 如何同时激活两个不同版本的MyEclipse 【MyEclipse2013和MyEclipse2014同时激活】
- 圆形的ImageView
- java类的继承的一些细节
- 框架学习之Spring(一IOC)----HelloWrod
- Anaconda3 tensorflow安装 及ModuleNotFoundError: No module named 'tensorflow' 解答
- JS中if判断 非空即为真 非0即为真
- add_featurelayer_to_map
- PL/SQL客户端连Oracle很快就断开问题的解决
- sdut2193救基友记3(三维)
- node的超时timeout
热门文章
- JVM运行时数据区和垃圾回收机制
- 解决错误:This bundle is invalid - The file extension must be .zip
- xcode好玩的条件断点设置. 可以真人发声。
- Swift 开源项目精选
- JavaScript class 使用
- 线性回归 Linear regression(2)线性回归梯度下降中学习率的讨论
- Quartz 2D编程指南(4) - 颜色和颜色空间
- 《DSP using MATLAB》示例Example8.2
- timequest 中set input delay set output delay 的使用
- 【spring源码学习】spring配置的事务方式是REQUIRED,但业务层抛出TransactionRequiredException异常问题