标 题:【原创】破解WinRAR之(二)——清除标题栏的“(评估版本)”
作 者: 我本寂寞
在
上一篇教程中,我们清除了一个烦人的NAG窗口。虽在实用上还是比较成功(最起码每次打开一个压缩包文件时不再会弹出一个可恶的窗口,然后我们不停的重复的点击着《关闭》,确实烦),但从美观上,还有点不雅,如图1所示(今天更惨,连图都传不了,不过没关系,和本教程几乎没影响),今天我们稍微让它雅观点,把标标题栏上的"WinRAR - WinRAR (评估版本)"给去掉。
我就从两个思路上解决这问题。
第一:在SetWindowText函数上设置断点。
[ INFO:SetWindowText
这个API函数用来改变窗口的标题栏的文字(如果有窗口的话),即我们所说的标题。这也就是我们在此函数上设置断点的原因所在。
函数原型如下:
BOOL SetWindowText(
HWND hWnd, // 窗口的句柄
LPCTSTR lpString // 指向标题字符串的指针 ***我们所关注的***
);
返回值:失败返回0,否则非0.
]
把这函数拦截下来之后我们应该怎么办呢,就像介绍这个函数时我们所说的,LPCTSTR lpString这就是我们所关注的,第一,可以更改其指针
,使其指向我们希望的地址。第二,可以更改它所指向的内容,让它变成我们所希望的。
分析好了,那我们就Fire Up OD,把WinRAR.exe给载入。按《Ctrl + N》组合键,查询我们所需的API,输入setwindowtext(咦,都没输入框
啊,怎么输啊,没事的,尽管输,然后再看下这个窗口的标题栏,哈,看到了们,你所输入的就在那,不区分大小写),然后光标定位到
SetWindowTextA上,咦?,下面怎么还有一个SetWindowTextW,若对windows编程的人有点了解,就应该知道怎么回事,这里不多说,A,代表
ANSI,也就是我们平常所用的ASCII编码方式,而W则为UNICODE,我们选择后者,因为我们要处理的标题栏有汉字,需用UNICODE编码。
指向SetWindowTextW这一行,《右击》,选择《在每个参考上设置断点》,然后回到CPU窗口,按F9运行,好,断在这了:
004640AD |. 57 push edi ; /Text ****这里****
004640AE |. FF75 FC push dword ptr [ebp-4] ; |hWnd
004640B1 |. E8 74EF0300 call <jmp.&USER32.SetWindowTextW> ; \SetWindowTextW
看到了没,EDI即我们所说的指向标题字符串的指针,然后看看右边的寄存器窗口,
EDI 0012920C UNICODE "WinRAR - WinRAR ("
好了,目标找出来的,该怎么做呢,前面我们也分析了,第一点,改变指针,不过,本人不推荐这方法,因此在此跳过。那们就用第二种方法
,我们分析知,EDI指向0012920C,因此我们转到数据窗口,按《Ctrl + G》,输入0012920C,回车,这样我们就跳到了我们所感兴趣的数据上
,用鼠标在00129290C上按住鼠标《左键》不放,拖到这字符串的结尾,即00129291D,在这高亮区域《右击》,选择《二进制》->《编辑》,
之后把UNICODE这行改为WinRAR,记得选上下面那个《保持大小》复选框。然后再在刚才的高亮区域《右击》,选择《复制到可执行文件》,保
存即可。
这样我们再次打开时,标题栏上的那个显眼的(评估版本)就没了。如图2所示。
第二方法呢,我们就稍微更深入一点,我们既然知道这个指针,那或许我们就会好奇那个EDI的值是从哪里来的,于是我们往上滚动几行。
...
....
00464094 |. 59 pop ecx
00464095 |. 5D pop ebp
00464096 \. C3 retn
00464097 90 nop
00464098 /$ 55 push ebp
00464099 |. 8BEC mov ebp, esp
0046409B |. 51 push ecx
0046409C |. 53 push ebx
0046409D |. 56 push esi
0046409E |. 57 push edi
0046409F |. 8BFA mov edi, edx ;*****这里*******
004640A1 |. 8945 FC mov dword ptr [ebp-4], eax
004640A4 |. E8 13C7FAFF call 004107BC
004640A9 |. 85C0 test eax, eax
004640AB |. 74 0B je short 004640B8
004640AD |. 57 push edi ; /Text
004640AE |. FF75 FC push dword ptr [ebp-4] ; |hWnd
004640B1 |. E8 74EF0300 call <jmp.&USER32.SetWindowTextW> ; \SetWindowTextW
哈,看到了没,就在那,mov edi, edx 。我们往上找,希望找到EDX又是怎么来的,可,咦,找到
00464098 /$ 55 push ebp
这行时,再往上找就是另一个函数了,也就是说我们这是一个被调用的函数,那是谁调用了它呢,我们把光标定位到
00464098 /$ 55 push ebp
这行,然后再这行上《右击》,选择《查找参考》->《选定命令》,然后出来了一个窗口,那里列出了调用这个函数的所有命令,我们《右击
》,选择《在每个命令上设置断点》,不放过任何一个断点。
好了,断点设置好了,返回CPU,按F9,哈,断在这了:
004438B9 |. E8 DA070200 call 00464098
往上看看:
004438AE 8D95 00F4FFFF lea edx, dword ptr [ebp-C00]
004438B4 |. A1 E46E4C00 mov eax, dword ptr [4C6EE4]
004438B9 |. E8 DA070200 call 00464098
哈,看到了,
004438AE 8D95 00F4FFFF lea edx, dword ptr [ebp-C00]
嗯,我们要马把EDX改成指向我们所需的地址,嗯,哪有呢,哈,别忘了寄存器窗口(也可往上找,不过在这,简单点处理),
ESI 0012CEEE UNICODE "WinRAR"
看到了没,我们就把它改成为,
004438AE |> \BA 638D4A00 mov edx, esi
运行,看到了没,那个可恶的“(评估版本)”也没了,如图2所示。好了,就这样,我们的WinRAR的第二个破解教程就这样结束了,不过,记得要保存啊,哈。。。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)