程序:

运行

弹出一个窗口,说要注册

点击确定,到主窗口

关闭主窗口

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

逆向程序

用 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 窗口

nag在逆向中是什么意思_OD 实验(四) - 去除 NAG 窗口的几种方法相关推荐

  1. nag在逆向中是什么意思_OD调试4----去除nag窗口的几种方法

    本实验所用程序如下,一个主窗口,两个nag窗口.nag本意为烦人唠叨的意思.在这里指的是不断弹出来窗口,例如注册窗口. 这里第一个和第三个为烦人的nag窗口,这里我们要将它去除.接下来就介绍四种方法, ...

  2. Java1.使用二分搜索算法查找任意N个有序数列中的指定元素。 2.通过上机实验进行算法实现。 3.保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告。 4.至少使用两种方法进行编程,直接查

    1.使用二分搜索算法查找任意N个有序数列中的指定元素. 2.通过上机实验进行算法实现. 3.保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告. 4.至少使用两种方法进行编程,直接查找/递归 ...

  3. VS开发中的代码编写小技巧——避免重复代码编写的几种方法

    原文:VS开发中的代码编写小技巧--避免重复代码编写的几种方法 上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都 ...

  4. 去除html重复的元素 js,js数组中去除重复值的几种方法

    在日常开发中,我们可能会遇到将一个数组中里面的重复值去除,那么,我就将我自己所学习到的几种方法分享出来 去除数组重复值方法: 1,利用indexOf()方法去除 思路:创建一个新数组,然后循环要去重的 ...

  5. php删除头尾空,分享php中去除头尾空格的2种方法

    这篇文章主要介绍了php去除头尾空格的2种方法,本文给出了用preg_replace替换.trim函数两种方法并给出了示例,需要的朋友可以参考下 看似很简单的问题,其实还是有点坑的,首先这里 空格转义 ...

  6. nag在逆向中是什么意思_NAG在医学是什么意思

    展开全部 医学上,NAG指N-乙酰-β-D-葡萄糖苷酶.NAG 是一种细胞内溶酶体酶,32313133353236313431303231363533e78988e69d833133343135666 ...

  7. nag在逆向中是什么意思_什么叫逆向思维?

    展开全部 逆向思维也称求异思维,它是对司空见惯的似乎已成定论的事物或观点反过来思考的62616964757a686964616fe4b893e5b19e31333431353433一种思维方式.敢于& ...

  8. nag在逆向中是什么意思_【实验心理学】【题库+答案】

    练习题 一.填空 1. 现代心理学是一个非常庞大的学科体系,包含有许多心理学分支,例如__________.__________.__________.__________.__________.__ ...

  9. 【Qt】在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效的解决方法

    1.问题描述 Win10操作系统环境下,在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效. 2.原因分析 Ctrl+Shift+f快捷键在各种输入法中,常用来做中文简体和繁 ...

最新文章

  1. C语言实现基数排序Radix sort算法之一(附完整源码)
  2. windows 中搭建Zookeeper的搭建
  3. php faker 中文,使用faker 生成中文测试数据
  4. (BFS)Dungeon Master(poj2251)
  5. java检测栈溢出_java运行方法栈溢出
  6. 怎么保护自己的音乐作品不被盗用,用FL制作防盗水印片段。
  7. 使用opencv测量点到线的距离
  8. 使用 Docker 部署 MediaWiki
  9. No thread-bound request found: Are you referring to request attributes outside of an actual web requ
  10. C++ std::condition_variable::notify_one()与notify_all()
  11. Spectral–spatial hyperspectral image classification
  12. 原型软件--Balsamiq Mockups
  13. 解决:-bash redis-server 未找到命令
  14. 跨越数据的“叹息墙”:华为下一代数据湖与HPDA时代
  15. Vue教程(八)v-bind指令动态绑定
  16. 集美大学计算机工程专业,王宗跃 - 集美大学 - 计算机工程学院
  17. 电子设计教程10:电荷泵倍压输出电路
  18. AcWing1488. 最短距离
  19. linux系统挂载u盘拷贝文件
  20. 基于TCP协议fuzz testing模糊测试案例分享

热门文章

  1. python自定义类如何定义向量的模_gensim的word2vec如何得出词向量(python)
  2. SpringBoot配置Mybatis在控制台打印sql
  3. linux之sort 命令详解
  4. 如何查看用index.php,为什么整个网站使用一个index.php页面?
  5. java 设计原则_【无尽的编程之路】(java)-设计模式六大原则
  6. ) php中_如何在webmin中配置多个PHP版本
  7. matlab中system prt,急!!求救!!MATLAB关于prt报错!
  8. php intval 变小,php intval() 小数时安全漏洞分析
  9. fio模拟mysql写入速度_IO压力测试工具 -- FIO 使用说明
  10. 组件三层_Angular 练级之旅(8)-Zorro Select组件的实现和进阶