NAG窗口:


nag窗口在软件试用期过后,很可能屏蔽软件的正式窗口或某些具有重要功能的重要功能的窗口,从而使软件不能正常使用。


小程序:


逆向调试入门-去除NAG窗口_NAG窗口


使用OD调试工具


还是老方法,先运行一遍程序。


逆向调试入门-去除NAG窗口_逆向调试入门_02


运行程序全弹出一个窗口


逆向调试入门-去除NAG窗口_NAG窗口_03



然后是主程序运行


逆向调试入门-去除NAG窗口_逆向调试入门_04



关掉主程序之后,还是弹出nag窗口。



逆向调试入门-去除NAG窗口_逆向调试入门_05


载入OD,进行调试


逆向调试入门-去除NAG窗口_NAG窗口_06


我们可以发现,当程序到第一个call函数的时候,就弹出的nag窗口


我们点击“确定”


逆向调试入门-去除NAG窗口_NAG窗口_07


到了中间这一块,我们发现,主程序在这个call函数中。


逆向调试入门-去除NAG窗口_NAG窗口_08


最后在退出程序前,调用了一次call函数,使得nag窗口弹出。


思路


1、我们可以在messagebox函数之前,跳过该函数,不调用nag窗口。

2、我们可以参考messagebox函数,让其中的参数不合法,使得messagebox函数失效。


第一种方法,简单粗暴。


将汇编指令


je      short 00401024


改为


jmp      short 00401024


逆向调试入门-去除NAG窗口_逆向调试入门_09


跳过call函数


将call函数


call    004011EA


改为


nop


逆向调试入门-去除NAG窗口_逆向调试入门_10


就可以爆破nag窗口。



第二个方法,参数不合法


逆向调试入门-去除NAG窗口_NAG窗口_11


我们先了解这个函数的用法


逆向调试入门-去除NAG窗口_NAG窗口_12


再者,我们了解到一个函数在call之前,都会push参数进去


逆向调试入门-去除NAG窗口_逆向调试入门_13


我们发现第一个参数的值为窗口句柄。


于是我们修改为1


逆向调试入门-去除NAG窗口_逆向调试入门_14


push 0    改为  push   1



逆向调试入门-去除NAG窗口_NAG窗口_15


由于参数不合法,messagesbox函数不会弹出。


下节我们分析文件的PE结构,并且修改PE结构,从而爆破程序。