Nag的本义是烦人的意思。Nag窗口是软件设计者用来不时提醒用户购买正式版本的窗口。软件设计者可能认为当用户受不了试用版中的这些烦人的窗口时就会考虑购买正式版本。它可能会在程序启动或退出时弹出来,或者在软件运行的某个时刻随机或定时地弹出来,确实比较烦人。
去除警告窗口常用的三种方法是:修改程序的资源、静态分析,动态分析。
去除警告窗口用资源修改工具是个不错的方法,可以将可执行文件中的警告窗口的属性改成透明、不可见,这样就变相去除了警告窗口。如果是动态跟踪调试,只需找到创建此窗口的代码,跳过即可。常用的显示窗口的函数MessageBoxA、MessageBoxExA、MessageBeep 、DialogBoxParamA 、ShowWindow、CreateWindowExA等。然而某些警告窗口用这些断点不管用,就可试试利用消息设断点,一般都应能拦截下来。
接下来,我们来探究去除nag的方法:
我们打开程序,让程序跑起来,可以发现到GetModuleHandleA
GetModuleHandleA:API函数用于获取程序的ImageBase(基址)
获取程序的值是存放在EAX寄存器里面,所以有函数、或过程调用之后的返回值都是存放在EAX
00401002 |. E8 0D020000 call <jmp.&KERNEL32.GetModuleHandleA> ; GetModuleHandleA
00401007 |. A3 1C314000 mov dword ptr ds:[0x40311C],eax
0040100C |. 83F8 00 cmp eax,0x0
Call完之后的eax返回值是存放在0x40311C内存之中的值。
比较eax是否为0,如果为0就跳到je。
1.去除ang的方法,直接用JMP跳转
JMP 无条件转移指令
2.去除ang的方法,直接二进制->使用nop填充
NOP表示什么也不做,本来是用来对齐代码,提高程序的执行速度的。在破解中可以把一条不想让其执行的指令用NOP覆盖,这条指令就会失去原有的功能。
3.MessageBoxA里面的参数HWND(handle of owner wind父句柄)
由于pModule=null为空,所以我们这里可以让他不为0.
把0修改为1,因为1是一个不存在句柄值,使父句柄无意义。
本文作者:whitecell-club.org Wens0n
文章欢迎转载,转载请保留作者与出处
本文始发于微信公众号(WhiteCellClub):二进制破解科普系列之去除警告(NAG)窗口
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论