OD调试4--去除NAG窗口

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

  一般nag在程序启动或退出的时候弹出来,或者在程序运行的某个时刻突然蹦出来吓你一跳。

  今天的任务是用不同的几种方法来去除烦人的NAG窗口。一般情况下,一个注册后的软件,他是不会弹出NAG窗口的。所以,一般在程序启动的时候,他会有一段代码检查改程序是否已经被注册,我们可以先把这个程序的注册破解掉,NAG窗口即会自动消失。

  • 试验软件:RegisterMe.exe
  • 把程序跑一遍之后我们发现程序有两个NAG,一个是在程序界面启动前出现,另一个是在程序关闭后出现的。如下图

所有函数/过程调用之后的返回值都存放在EAX里

1字=2字节(1 word = 2 byte)  1字节=8位(1 byte =8  bit)

打开OD载入该文件,跳过第一个提示框的4种方法:

(1)je处汇编为jmp,如下

(2)选中-鼠标右键-二进制-用nop填充

(3)将push 0改为push 1(因为1是一个不存在的句柄,从而导致下面的messagebox也不存在。也就是句柄无意义,子进程就消失)

(4)修改程序入口点

点击M进入内存分布图找到PE文件头双击进入找到AddressOfEntryPoint—对应内存中的地址为4000E8—回到cpu在数据模块中ctrl+g填入4000E8,将其本来的入口点值1000修改为1024.

回到cpu窗口中,再数据部分Ctrl+G跟随地址00400E8,如下图

对此处进行修改,00改为24.这样,程序的入口位置就由1000变为1024,就跳过了第一个NAG弹出窗口messagebox。

再处理之后的另一个NAG弹出窗口,可以使用nop汇编掉,也可以将push 0改为push 1进行修改。

PE结构:

为什么需要了解PE结构?

大家想象一下,某天在班上,我突然想知道小花同学今天穿什么颜色的裤子,要怎么办呢?点名让小花同学站起来?不行,因为老师在上课呢。那我就只好掏出班级里的座位名单,然后找到小花的名字,看是在第几行第几列就找到了,然后在看她的裤子是什么颜色,对啵?其实如果把PE结构比作我们刚才提到的班级,那么座位名单就是PE文件头啦~

  • PE(PortableExecutable)可执行文件结构是一样规范,发明这个主要用来指导系统如何执行你所设计的程序。
  • 编译器已经为你将代码按照PE结构的形式编译链接为可执行文件,这过程只是它默默的完成,所以我们没有察觉。但是我们现在学习的是逆向,所以连一条毛我们都不能放过。
  • PE文件结构有一个非常优势的地方就是它在硬盘上的存储结构跟载入内存时候的存储结构是一样的。
  • 所以,只要你了解如何在PE文件结构里边找出某样你想要的东西,那么当这个文件映射到内存后,你也可以很容易的找到它(因为OD是动态调试,程序需要先载入内存嘛)。
  • 内存中的一个模块代表一个可执行文件进程所需要的所有代码、数据、资源的集合。
  • PE文件结构:
    • DOS header
    • DOS stub
    • PE File Header
    • Image Optional Header
    • Section Table
    • Data Directories
    • Sections

  • 本质上,最下边的节区(有些人也叫区块)是运行一个程序真正需要的内容。
  • 上边所有的“头”都仅仅是帮助Windows加载器定位和寻找下边的节区的内容。
  • 在PE文件头中,这节课我们需要知道的是如何找到AddressOfEntryPoint(程序入口地址)即可。

小结:

  • GetModuleHandleA这个API函数用于获取程序的ImageBase(基址)
  • 这个程序的MessageBox的OwnerHandle(父窗口句柄)为0(NULL),我们可以将这个值改为一个不存在的值,例如1,这样它就找不到,就不会被显示出来。
  • 名词注释:

–      VA(VirtualAddress,虚拟地址)

–      RVA(RelativeVirtualAddress,相对虚拟地址)

–      EP(EntryPoint,程序入口点)

OD调试4--去除NAG窗口的更多相关文章

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

    程序: 运行 弹出一个窗口,说要注册 点击确定,到主窗口 关闭主窗口 然后弹出提醒注册的对话框 逆向程序 用 OD 打开程序 GetModuleHandleA 获取程序模块的句柄,程序在内存中的基址 ...

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

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

  3. OD调试学习笔记7—去除未注册版软件的使用次数限制

    OD调试学习笔记7—去除未注册版软件的使用次数限制 本节使用的软件链接 (想自己试验下的可以下载) 一:破解的思路 仔细观察一个程序,我们会发现,无论在怎么加密,无论加密哪里,这个程序加密的目的就是需 ...

  4. OD调试篇7--笔记及解题报告

    MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows AP ...

  5. OD调试17

    程序先出现一个nag 然后出现主窗口 然后出现第二个nag窗口        我们查个壳   没有壳 那就载入OD看看,继续用调用堆栈的方法 发现一直执行用的都是这一个call,最后执行到程序结束.之 ...

  6. OD调试16

    今天还是15的那个程序,但是呢,换一种方法去掉NAG窗口 用OD载入,暂停,查看调用的堆栈 先看最后一个    查看调用,下断点 往上看看,找到入口的地方,设下断.点,重载,运行,单步 通过单步发现 ...

  7. OD调试篇12

    Delphi的逆向 先看看今天需要破解的程序. 打开程序先出现了一个nag窗口,然后是unregistered未注册的提示,以及关于里的需要注册. 拖进die看了看      就是delphi写的.那 ...

  8. OD调试篇8

    那么今天需要破解的呢,是这样一款软件. 程序刚刚进去会发现一个nag弹窗   说没有注册,要花20美金才能注册.只有5天的限制期限可以用了 进去之后 点击help里的关于这款软件   也显示了这是一个 ...

  9. OD调试9—实例:深入分析代码完成软件破解

    OD调试9—实例:深入分析代码完成软件破解  爆破,是最初级的解决方案,不到万不得已,我们不直接修改JNZ通关.因为这样子的话,我们就享受不到破解.逆向的真正乐趣了. 了解程序背后按照剧情发展经常会出 ...

随机推荐

  1. 表单控件之select

    一.表单控件之表单 1.依次获取表单里的所有控件: for (i = 0; i < document.getElementById("formName").length; i ...

  2. MySQL跨表更新字段 工作记录

    工作中遇到两表查询,从user表中获取用户唯一id字段 写入到另外一张qiuzu表中的uid字段中; 二者可以关联起来的只有用户的手机号码tel字段; 了解需求后数据量稍多,不可能一个一个的手动修改 ...

  3. Python新手学习基础之数据类型——字符串的切片截取

    切片截取是python中字符串常见的一些操作,我们会在这篇文章里详细介绍,切片截取的作用是获取子字符或子字符串. 实际上,我们要做的就是使用索引,用冒号分隔两个索引,形式为:变量[头下标:尾下标],冒 ...

  4. [Flask Security]当不能通过认证的时候制定跳转

    Flask Security这个插件能对用户权限进行很好的控制. 通过三个model实现: User,存放用户数据 Role,存放角色数据 User_Role.存放用户角色信息 user_datast ...

  5. 基类方法的反隐藏 反private 秘籍

    class GoodStudent:private Mentor,private Student { public : using Mentor::GetInfo;   ///------------ ...

  6. 被误解的 MVC 和被神化的 MVVM

    被误解的 MVC 和被神化的 MVVM 被误解的 MVC MVC 的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (contro ...

  7. Swift--存储属性-备

    Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据. 存储属性可以存储数据,分为常量属性(用关键字let定义) ...

  8. swift中的&-备

    参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以引用方式传递,这也是可以实现的,Swift提供 ...

  9. Lintcode--004(最小子串覆盖)

    给定一个字符串source和一个目标字符串target,在字符串source中找到包括所有目标字符串字母的子串. 注意事项 如果在source中没有这样的子串,返回"",如果有多个 ...

  10. Gson JsonParser的使用

    package iotest; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gso ...