标 题:【原创】破解WinRAR之(一)——去除WinRAR烦人的NAG窗口
作 者: 我本寂寞
时 间: 2008-06-14,00:37
链 接: http://bbs.pediy.com/showthread.php?p=466465
初入反汇编,边学边练,由于实在受不了每次打开WinRAR时弹出的窗口(如图1),便决定亲自把它干了不可。
(用QQ裁的图,为BMP格式,竟传不上来
,不过,不影响我们这教程)
既然我们要去除的是个烦人的窗口,如何实现呢,简单点就是把创建这个NAG的过程给跳过去,所以我们自然首先就把目光放在创建窗口的函数上,通过初步的在CreateWindowExA和DialogBoxParamA等创建窗口的函数上设置断点,我们得知WinRAR是通过DialogBoxParamA来创建这个NAG的。
好了,目标找到了,该如何进一步缩小范围找到NAG这个窗口呢(WinRAR有相当的窗口,看下DialogBoxParamA此函数的引用次数就知道),这就看看这函数的原型了。
int DialogBoxParam(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpTemplateName, // identifies dialog box template ;这就是我们所关心的,对话框的ID。
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc, // pointer to dialog box procedure
LPARAM dwInitParam // initialization value
);
那如何找出这个NAG的ID呢,在这我们可用eXeScope这工具把它可测出来。打开这软件,把WinRAR.exe载入。在左侧的Resource中找到Dialog这一项,然后, 在那找到我们需要的信息,如图2所示,其中“REMINDER”字符串就是我们所说的ID。
既然ID都给找出来了,现在也该是把这个NAG给揪出来的时候了。Fire up OD,把WinRAR.exe载入。在CPU窗口《右击》,选择《查找》->《所有参考文本字串》,把光标行定高开头,因为OD是从上往下搜的,我们不想跑掉任何有用的信息。再《右击》,选择《查找文本》,在弹出的对话框里输入我们刚才找到的ID,即REMINDER。哈,找到了,即这一行:
0043FF13 | push 004A8A98 | ASCII "REMINDER"
《双击》进入CPU窗口,跳到此地址,来到下面
0043FF06 . 6A 00 push 0 ; /lParam = NULL
0043FF08 . 68 D0434800 push 004843D0 ; |DlgProc = WinRAR_o.004843D0
0043FF0D . FF35 E46E4C00 push dword ptr [4C6EE4] ; |hOwner = NULL
0043FF13 . 68 988A4A00 push 004A8A98 ; |pTemplate = "REMINDER" 《这就是我们找的ID》
0043FF18 . FF35 C8414B00 push dword ptr [4B41C8] ; |hInst = NULL
0043FF1E . E8 612E0600 call <jmp.&USER32.DialogBoxParamA> ; \DialogBoxParamA
0043FF23 > \803D B8894A00>cmp byte ptr [4A89B8], 0 ;④
嗯,这样就找到了这个NAG出现的地方呢,我们要的是把它给跳过去,所以我们往上看看:
0043FEDA . BA 918A4A00 mov edx, 004A8A91 ; ASCII "rarkey" ①
0043FEDF . B9 06000000 mov ecx, 6
0043FEE4 . E8 97F6FCFF call 0040F580 ;②
0043FEE9 . 85C0 test eax, eax ;③
0043FEEB . 74 36 je short 0043FF23 ;⑤
0043FEED . 833D C8A14C00>cmp dword ptr [4CA1C8], 28
0043FEF4 . 7F 09 jg short 0043FEFF
0043FEF6 . 833D C8A14C00>cmp dword ptr [4CA1C8], 0
0043FEFD . 7D 24 jge short 0043FF23
0043FEFF > C605 B9894A00>mov byte ptr [4A89B9], 1
0043FF06 . 6A 00 push 0 ; /lParam = NULL
看看标有①这行,旁有注释“rarkey”,因此②中的函数调用很有可能是注册算法,在此不深究,本人也是初学者一个,没那水平。不过,我们这教程的目的只是把这个烦人的NAG去掉,因此可以不管这。然后看下③这一行,是一个测试的语句,测试EAX是否为0(而EAX来自哪呢,就是刚才分析的②中函数,由于可以更加推定这函数很有可能是注册算法),若是则跳到short 0043FF23那,0043FF23在哪呢,就是我们上面的标有④的句子,即DialogBoxParamA函数调用的下一个句子,嘿,刚好把那个烦人的NAG给跳走了,还记得我们一开始分析的吗?把这创建NAG的过程给跳过去了,这样不就达到了我们的目的吗?
也就是说,我们只要把标有⑤的这句子改成如下所示就可以了:
0043FEEB . 74 36 jmp short 0043FF23 ;双击这行,把je改成jmp即可
这样,我们就永远把这个烦人的NAG给跳过去了。
不过,别高兴的太早了,得把这修改的保存啊,在CPU窗口《右击》,选择《复制到可执行文件》,随后再弹出的窗口再《右击》,选择《保存文件》,接着又跳出了个对话框,我们以WinRAR_.exe的保存它(以防我们修改错误)。
终于OK了,最后再测试下,双击WinRAR_.exe,哈,NAG终于没了。。。。(把它改为WinRAR.exe,这样以后我们再次打开压缩文件时就不再会弹出那个NAG了)这样教程也就完了。
谢谢批评,第一个反汇编教程。
[课程]FART 脱壳王!加量不加价!FART作者讲授!