http://blog.fishc.com/734.html
让编程改变世界
Change the world by program
去除NAG窗口
nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口。
软件设计者可能认为当用户忍受不了试用版中的这些烦人的窗口时,就会考虑购买正式版本。
但在我国特殊国情嘛,我们是不允许有这样欺负用户的软件设计的…所以小甲鱼教大家“替天行道”?错了,我们只是在探讨技术细节。
一般nag在程序启动或退出的时候弹出来,或者在程序运行的某个时刻突然蹦出来吓你一跳。
今天的课程小甲鱼将教大家不同的几种方法来去除烦人的NAG窗口。
一般情况下,一个注册后的软件,他是不会弹出NAG窗口的。
所以,一般在程序启动的时候,他会有一段代码检查改程序是否已经被注册,我们可以先把这个程序的注册破解掉,NAG窗口即会自动消失。
不过这节课小甲鱼要教给大家的是新的技巧:去除NAG窗口的几种方法。
好滴,先上菜:RegisterMe.exe
把程序跑一遍之后我们发现程序有两个NAG,一个是在程序界面启动前出现,另一个是在程序关闭后出现的。
好了,这是一个很简单的程序,如果前边几讲的知识都掌握了,鱼油们应该可以自己动手解决!
还在等什么?把视频暂停,然后开始吧。这节课我们会讲大概四种方式来去掉nag。哈,但不是懂了就可以不听课哦,会有很重要的内容滴。
PE文件结构
为什么需要了解PE文件结构?
大家想象一下,某天在班上,小甲鱼突然想知道黑夜童鞋今天穿什么颜色的裤子,要怎么办呢?点名让黑夜童鞋站起来?不行,因为苍老师在上课呢。那小甲鱼就只好掏出班级里的座位名单,然后找到黑夜的名字,看是在第几行第几列就找到了,然后在看他的裤子是什么颜色,对啵?
其实如果把PE结构比作我们刚才提到的班级,那么座位名单就是PE文件头啦~
PE(PortableExecutable)可执行文件结构是一样规范,发明这个主要用来指导系统如何执行你所设计的程序。
可能有鱼油会说我TM不用十分钟可以写个小马,怎么不见得需要用到这个PE文件结构?
其实不然,因为编译器已经为你将代码按照PE结构的形式编译链接为可执行文件,这过程只是它默默的完成,所以我们没有察觉。
但是我们现在学习的是逆向,所以连一条毛我们都不能放过。
PE文件结构有一个非常优势的地方就是它在硬盘上的存储结构跟载入内存时候的存储结构是一样的。
所以,只要你了解如何在PE文件结构里边找出某样你想要的东西,那么当这个文件映射到内存后,你也可以很容易的找到它(因为OD是动态调试,程序需要先载入内存嘛)。
内存中的一个模块代表一个可执行文件进程所需要的所有代码、数据、资源的集合。
PE文件结构:
DOS header
DOS stub
PE File Header
Image Optional Header
Section Table
Data Directories
Sections
No picture you say a J8…
这个社会太复杂了,许多东西都蒙蔽了我们的双眼,而真相有时候确是如此简单╭(╯3╰)╮。
本质上,最下边的节区(有些人也叫区块)是运行一个程序真正需要的内容。
上边所有的“头”都仅仅是帮助Windows加载器定位和寻找下边的节区的内容。
在PE文件头中,这节课我们需要知道的是如何找到AddressOfEntryPoint即可,更多详细内容可以看下小甲鱼的《解密系列》系统篇|PE结构。
小结
GetModuleHandleA这个API函数用于获取程序的ImageBase(基址)
这个程序的MessageBox的OwnerHandle(父窗口句柄)为0(NULL),我们可以将这个值改为一个不存在的值,例如1,这样它就找不到老豆,就不会被显示出来。
名词注释:
VA(VirtualAddress,虚拟地址)
RVA(RelativeVirtualAddress,相对虚拟地址)
EP(EntryPoint,程序入口点)
课后作业
同样的程序,但做了一些手脚,大家自己动手试试能不能把这个程序的两个nag窗口去掉?
作业程序下载:RegisterMe.Oops.exe
我们下节课将要讲解的内容涉及PE文件头知识,PE文件头的相关知识小甲鱼在《解密系列》系统篇已经有详细讲解,有兴趣的朋友可以参考下。