首页
社区
课程
招聘
[旧帖] [原创]破解WinRAR之(二)——清除标题栏的“(评估版本)” 0.00雪花
发表于: 2008-6-15 00:09 10127

[旧帖] [原创]破解WinRAR之(二)——清除标题栏的“(评估版本)” 0.00雪花

2008-6-15 00:09
10127
标 题:【原创】破解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期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sta
2
我不会保存

我要怎样做才好

谢谢
2008-6-15 01:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
也可更改更上面一处的跳转,来跳过加“(评估版本)”的这段code,
4432ba是调用,把上面的443222的jnz改成jmp,补一个nop字节,ok

0044320F  |.  BA F76C4A00   mov     edx, 004A6CF7                    ;  UNICODE " - WinRAR"
00443214  |.  8BC4          mov     eax, esp
00443216  |.  E8 95D5FCFF   call    004107B0
0044321B  |.  803D 24214B00>cmp     byte ptr [4B2124], 0
00443222      E9 8C000000   jmp     004432B3
00443227      90            nop

00443228  |.  A1 48814C00   mov     eax, dword ptr [4C8148]
0044322D  |.  83F8 14       cmp     eax, 14
00443230  |.  7C 05         jl      short 00443237
00443232  |.  83F8 28       cmp     eax, 28
00443235  |.  7C 1D         jl      short 00443254
00443237  |>  B8 69030000   mov     eax, 369
0044323C  |.  E8 8FF3FCFF   call    004125D0
00443241  |.  50            push    eax
00443242  |.  8D9424 040C00>lea     edx, dword ptr [esp+C04]
00443249  |.  52            push    edx
0044324A  |.  E8 314A0500   call    00497C80
0044324F  |.  83C4 08       add     esp, 8
00443252  |.  EB 27         jmp     short 0044327B
00443254  |>  B9 28000000   mov     ecx, 28
00443259  |.  B8 6A030000   mov     eax, 36A
0044325E  |.  2B0D 48814C00 sub     ecx, dword ptr [4C8148]
00443264  |.  51            push    ecx
00443265  |.  E8 66F3FCFF   call    004125D0
0044326A  |.  50            push    eax
0044326B  |.  8D9424 080C00>lea     edx, dword ptr [esp+C08]
00443272  |.  52            push    edx
00443273  |.  E8 58790500   call    0049ABD0
00443278  |.  83C4 0C       add     esp, 0C
0044327B  |>  BA 0B6D4A00   mov     edx, 004A6D0B                    ;  UNICODE " ("
00443280  |.  8BC4          mov     eax, esp
00443282  |.  E8 29D5FCFF   call    004107B0
00443287  |.  8BC4          mov     eax, esp
00443289  |.  E8 DAD4FCFF   call    00410768
0044328E  |.  8BD0          mov     edx, eax
00443290  |.  03D2          add     edx, edx
00443292  |.  8BCC          mov     ecx, esp
00443294  |.  03D1          add     edx, ecx
00443296  |.  8D8424 000C00>lea     eax, dword ptr [esp+C00]
0044329D  |.  B9 00000001   mov     ecx, 1000000
004432A2  |.  E8 0DD2FCFF   call    004104B4
004432A7  |.  BA 116D4A00   mov     edx, 004A6D11
004432AC  |.  8BC4          mov     eax, esp
004432AE  |.  E8 FDD4FCFF   call    004107B0
004432B3  |>  8BD4          mov     edx, esp
004432B5  |.  A1 644E4C00   mov     eax, dword ptr [4C4E64]
004432BA  |.  E8 F1040200   call    004637B0
2008-6-15 14:07
0
雪    币: 590
活跃值: (177)
能力值: ( LV9,RANK:680 )
在线值:
发帖
回帖
粉丝
4
支持你,很细很透彻
2008-6-15 15:10
0
雪    币: 207
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
确实,不好意思,我也不会,这个思路我是从Lena151的第四个教程那看来的,我当时也挺奇怪的,但他可以保存,郁闷。。。
2008-6-15 21:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我还以为WINRAR是破不了的呢
2008-6-16 14:32
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不错的教程,又学习了!
2008-6-17 10:21
0
游客
登录 | 注册 方可回帖
返回
//