程序:

运行

弹出一个窗口,说要注册

点击确定,到主窗口

关闭主窗口

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

逆向程序

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

OD 实验(四) - 去除 NAG 窗口的几种方法的更多相关文章

  1. OD调试4--绕过nag窗口

    先看一下程序的运行情况 先跳出了一个nag窗口 点确定 又跳出了一个NAG窗口,这是一些程序编写的时候常用的方法,设法让你购买正版软件, 于是今天呢,学会了四种绕过NAG的方法 我们先用OD加载进入这 ...

  2. OD调试4--去除NAG窗口

    OD调试4--去除NAG窗口 nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口.软件设计者可能认为当用户忍受不了试用版中的这些烦人的窗口时,就会考虑购买正式版本. 一 ...

  3. python3 打开页面后多窗口处理三种方法

    多窗口处理三种方法 导包,实例化浏览器from selenium import webdriver fx=webdriver.Firefox()方法一fx.switch_to.window(fx.wi ...

  4. Windows 10 应用创建模糊背景窗口的三种方法

    原文 Windows 10 应用创建模糊背景窗口的三种方法 现代的操作系统中创建一张图片的高斯模糊效果非常容易,不过如果要在窗口中获得模糊支持就需要操作系统的原生支持了.iOS/Mac 和 Windo ...

  5. python3 selenium 切换窗口的几种方法

    第一种方法: 使用场景: 打开多个窗口,需要定位到新打开的窗口 使用方法: # 获取打开的多个窗口句柄windows = driver.window_handles# 切换到当前最新打开的窗口driv ...

  6. Response.Redirect 打开新窗口的两种方法

    一般情况下,Response.Redirect 方法是在服务器端进行转向,因此,除非使用 Response.Write("<script>window.location='htt ...

  7. selenium 切换窗口的几种方法

    第一种方法: 使用场景: 打开多个窗口,需要定位到新打开的窗口 使用方法: # 获取打开的多个窗口句柄 windows = driver.window_handles # 切换到当前最新打开的窗口 d ...

  8. C#中去除字符串空格的三种方法

    static void Main() { //demo1 除去空格,提取出各个单词 string s = "a b c"; string[] word = s.Split(new ...

  9. Delphi中拖动无边框窗口的5种方法

    1.MouseMove事件中加入: // ReleaseCapture;// Perform(WM_SYSCOMMAND, $F017 , 0); 2.MouseDown事件中加入: // POSTM ...

随机推荐

  1. python3精简笔记(三)——高级特性

    Python中 1行代码能实现的功能,决不写5行代码.请始终牢记,代码越少,开发效率越高. 切片 取一个list或tuple的部分元素是非常常见的操作.Python提供了切片(Slice)操作符 L ...

  2. $.ajax 的速度要快于 angular 里 $http (个别情况)

    $.ajax: $http:

  3. C#中PadLeft和PadRight小知识点

    当我们显示字符串数据时,有时候我们需要考虑数据的排列美观. 比如一些人名和一些编号,我们想让他们整齐对齐显示等. C# String类提供了2种操作方法: String.PadLeft(int tot ...

  4. erlang开发环境配置

    第一步  从源码安装erlang git clone https://github.com/erlang/otp 目前最新版本为17.X cd otp/ ./configer  检查编译环境 sudo ...

  5. hiho1523 数组重排2

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个1-N的排列A1, A2, ... AN,每次操作小Hi可以选择一个数,把它放到数组的最左边. 请计算小Hi最少进 ...

  6. BZOJ3609 Heoi2014 人人尽说江南好【推理+结论】

    BZOJ3609 Heoi2014 人人尽说江南好 Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家),最近他 想起了小时 ...

  7. 在制作跨平台的 NuGet 工具包时,如何将工具(exe/dll)的所有依赖一并放入包中

    NuGet 提供了工具类型的包支持,生成一个基于 .NET Core 的 dll 或者基于 .NET Framework 的 exe 之后,你几乎可以对项目做任何事情.但是,默认情况下,NuGet 不 ...

  8. iis 部署 未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序

    C#读取Access数据库在VS调试时正常,发布到win7-64的IIS之后报错“未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序”.原因是VS调试时模拟的是32位,发布 ...

  9. nginx+uwsgi 和nginx+gunicorn区别、如何部署

    [线上环境部署Django,nginx+uwsgi 和nginx+gunicorn,这两种方案,应该如何选择?] 大家是采用的何种部署方式? 第一种,高并发稳定一点 我们公司使用的是nginx+gun ...

  10. Eclipse 创建类时添加继承

    eclipse 中类的继承创建有两种方式: 1.手动敲代码通过 extends 关键字来继承 public class A extends B { } 2.在创建类的时候就选择好继承关系 点击 Fin ...