nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口。一般nag窗口会在程序启动或退出或运行时突然弹出,一般情况下,一个注册后的软件不会弹出NAG窗口,因此,一般在程序启动时会有一段代码检查该程序是否已经被注册,我们可以将该程序的注册破解掉以去除NAG窗口。
![F9{2YA(SDOU@LGRF}MSFKR.png
放入OD中之后首先看到了GetModuleHandleA,即获取程序模块的句柄(程序在内存中的基址),然后看到了je跳转后出现nag。
方法一:je直接改为jmp。
方法二:OO9}7WYXBP57AP)C{{72640.png
直接将messageBoxA全部改为nop。JWS}V9HUS@Q(0_3QGDAGI73.png

PE文件结构

PE(PortableExecutable)可执行文件结构是一种规范,发明这个主要用来指导系统如何执行你所设计的程序。PE文件结构有一个非常优势的地方就是它在硬盘上的存储结构跟 载入内存时候的存储结构是一样的。PE文件结构包括:
DOS header
DOS stub
PE File Header
Image Optional Header
Section Table
Data Directories
Sections
I}_2}3`Z]T7QCX~NS$RGIUU.png
本质上,最下边的节区(区块)是运行一个程序真正需要的内容。上边所有“头”都仅仅是帮助Windows加载器定位和寻找下边的节区的内容。

因此,只要了解如何在PE文件结构里边找出某样你想要的东西,那么当这个文件映射到内存后,你也可以很容易的找到它(因为OD是动态调试,程序需要先载入内存)。内存中的一个模块代表一个可执行文件进程所需要的所有代码、数据、资源的集合。此处只需知道如何找到AddressOfEntryPoint即可。

方法三:
利用PE文件结构的特点,将程序的入口改为原NAG窗口弹出之后即可去除NAG窗口。在OD中按M进入内存分布图![CF4GN26O3%M~8H7QTK7_}W.png
双击进入文件头![88}Y$PYG54114@{~}}DCNK.png
找到AddressOfEntryPoint![RZGQ}E`BYM6QR]21J692GN.png
可知入口为4010000

小结

该程序的MessageBox的OwnerHandle(父窗口句柄)为0(NULL),我们可以将该值改为一个不存在的值,例如1,这样就找不到父窗口句柄,就不会被显示出来。
名词注释:
VA(VirtualAddress,虚拟地址)
RVA(RelativeVirtualAddress,相对虚拟地址)
EP(EntryPoint,程序入口点)