首页
社区
课程
招聘
[原创]wrar501爆破
2014-3-11 11:56 12815

[原创]wrar501爆破

2014-3-11 11:56
12815
昨天参见一个面试,叫我爆破wrar501。需求是不要弹窗(把计算机时间调到未来。。)
 (不知道怎么把qq截图加到这个帖子上)
和窗口上不要显示evaluation copy字样
(不知道有没有写过
当时觉得时间紧,就做了不要弹窗的爆破。(结果后面的时间一直在等。。擦。。)
首先弹窗一般是MessageBoxW 或者是DialogBoxParamW
OD载入下段:
bp MessageBoxW
bp DialogBoxParamW
F9 运行
断在了DialogBoxParamW ,看堆栈,查看返回地址到0046DB3D  
进入0046DB3D;看该函数怎么做的。
地址入0046DB3D所在的函数代码很长 就不分析。跟一跟就知道关键点在哪儿:

0046D80E  |. /75 16         jnz     short 0046D826
0046D810  |. |A1 F84B5300   mov     eax, dword ptr [534BF8]
0046D815  |. |83F8 28       cmp     eax, 28                          ;  时间限制
0046D818  |. |7F 04         jg      short 0046D81E
0046D81A  |. |85C0          test    eax, eax

这段代码决定着要不要弹出窗口。
程序在地址534BF8处存了一个值。这个值只要小于0x28就可以了
在代码中搜索 534BF8
有四个地方有引用:
0046D810  |.  A1 F84B5300   mov     eax, dword ptr [534BF8]

004B14B8  |> \C705 F84B5300>mov     dword ptr [534BF8], 0


004B15A3  |.  A3 F84B5300   mov     dword ptr [534BF8], eax
004B15A8  |.  85C0          test    eax, eax
004B15AA  |.  7D 0A         jge     short 004B15B6
004B15AC  |.  C705 F84B5300>mov     dword ptr [534BF8], 168

004B1685   .  A1 F84B5300   mov     eax, dword ptr [534BF8]

对534BF8赋值的地方就两个 有一个给它赋值为0 不关心。。所以对地址004B15A3  下端即可
(也可以对534BF8下硬件访问断点)。。重启程序运行
程序断在:

004B1599  |.  56            push    esi
004B159A  |.  6A 18         push    18
004B159C  |.  52            push    edx
004B159D  |.  50            push    eax
004B159E  |.  E8 6D210100   call    004C3710
004B15A3  |.  A3 F84B5300   mov     dword ptr [534BF8], eax
004B15A8  |.  85C0          test    eax, eax
004B15AA  |.  7D 0A         jge     short 004B15B6
004B15AC  |.  C705 F84B5300>mov     dword ptr [534BF8], 168
004B15B6  |>  8B8C24 281000>mov     ecx, dword ptr [esp+1028]

进入分析函数004C3710 (我是没有分析函数啦啦啦。。)
直接在函数 004C3710的头几句汇编改为
004C3710      B8 00000000   mov     eax, 0
004C3715      C2 1000       retn    10
004C3718      90            nop

保存修改,另存为exe。。点击运行 没有弹窗。。
其实函数004C3710返回的是当前计算机日期和程序安装时日期之差,存放在534BF8之后在
地址0046D815  处于0x28相比较。。也就是说 在使用程序40天内是不会弹窗的,超过40天就会弹出窗口提示注册。

刚才那个爆破只是解决了未注册弹出窗口的问题。。但是窗标题 中显示 evaluation copy字样和Help菜单下的About子菜单弹窗的窗口 40days trials copy字样还在。。程序依然没注册,只是让程序永远以为40day还没到。。

OD重载原程序。。(爆破注册。。。)
线索:窗口标题显示,,可能会调用 SetWindowTextW函数
bp SetWindowTextW
F9运行
断下来后 查看栈
00127174   004B176F  /CALL 到 SetWindowTextW 来自 WinRAR.004B1769
00127178   002301A0  |hWnd = 002301A0 ('WinRAR',class='WinRarWindow')
0012717C   00127584  \Text = ""D7,"烂?- WinRAR (evaluation copy)"

正好是设置窗口标题。
地址004B176F  所在函数也很长。。(汇编函数都很长。。。
只贴关键代码:
004B1640   >  66:8B48 02    mov     cx, word ptr [eax+2]
004B1644   . |83C0 02       add     eax, 2
004B1647   . |66:85C9       test    cx, cx
004B164A   .^\75 F4         jnz     short 004B1640
004B164C   .  803D C03C4F00>cmp     byte ptr [4F3CC0], 0
004B1653   .  8B0D 24054E00 mov     ecx, dword ptr [4E0524]
004B1659   .  8B15 28054E00 mov     edx, dword ptr [4E0528]          ;  WinRAR.00570020
004B165F   .  8908          mov     dword ptr [eax], ecx
004B1661   .  8B0D 2C054E00 mov     ecx, dword ptr [4E052C]
004B1667   .  8950 04       mov     dword ptr [eax+4], edx
004B166A   .  8B15 30054E00 mov     edx, dword ptr [4E0530]          ;  WinRAR.00410052
004B1670   .  8948 08       mov     dword ptr [eax+8], ecx
004B1673   .  8B0D 34054E00 mov     ecx, dword ptr [4E0534]
004B1679   .  8950 0C       mov     dword ptr [eax+C], edx
004B167C   .  8948 10       mov     dword ptr [eax+10], ecx
004B167F   .  0F85 D5000000 jnz     004B175A
004B1685   .  A1 F84B5300   mov     eax, dword ptr [534BF8]
004B168A   .  8D50 EC       lea     edx, dword ptr [eax-14]
004B168D   .  83FA 13       cmp     edx, 13
004B1690   .  77 27         ja      short 004B16B9
004B1692   .  B9 28000000   mov     ecx, 28
004B1697   .  2BC8          sub     ecx, eax

这里可以好到
cmp     byte ptr [4F3CC0], 0

判断4F3CC0的值是不是0,如果是0进行后续操作---这里还有地址534BF8。。又判断了一次是不是40天以后。。
所以4F3CC0的值很重要。。内存搜素4F3CC0,发现好多地方都用这个值去判断
但是赋值的地方只有四处:
004B1A76   .  A2 C03C4F00   mov     byte ptr ds:[4F3CC0], al


0049D485   .  A2 C03C4F00   mov     byte ptr ds:[4F3CC0], al


004AAC92  |.  A2 C03C4F00   mov     byte ptr ds:[4F3CC0], al


004AE221  |.  A2 C03C4F00   mov     byte ptr ds:[4F3CC0], al


看第一处:004B1A76   
004B1A6F   .  6A 00         push    0
004B1A71   .  E8 5A5AFFFF   call    004A74D0
004B1A76   .  A2 C03C4F00   mov     byte ptr [4F3CC0], al

004AAC92处  也是调用函数004A74D0
004AAC8B  |.  6A 01         push    1
004AAC8D  |.  E8 3EC8FFFF   call    004A74D0
004AAC92  |.  A2 C03C4F00   mov     byte ptr [4F3CC0], al

调用函数之后再赋值。。
ok
修改函数004A74D0头几个字节

004A74D0      B8 01000000   mov     eax, 1
004A74D5      C2 0400       retn    4
004A74D8      90            nop
004A74D9      90            nop

再看0049D485 处:
0049D475   .  3805 C03C4F00 cmp     byte ptr [4F3CC0], al            ;  Case 110 of switch 0049D445
0049D47B   .  74 0D         je      short 0049D48A
0049D47D   .  3805 C83C4F00 cmp     byte ptr [4F3CC8], al
0049D483   .  75 05         jnz     short 0049D48A
0049D485   .  A2 C03C4F00   mov     byte ptr [4F3CC0], al

ok修改跳转。修改后
0049D475   .  3805 C03C4F00 cmp     byte ptr [4F3CC0], al            ;  Case 110 of switch 0049D445
0049D47B      EB 0D         jmp     short 0049D48A
0049D47D   .  3805 C83C4F00 cmp     byte ptr [4F3CC8], al
0049D483   .  75 05         jnz     short 0049D48A
0049D485   .  A2 C03C4F00   mov     byte ptr [4F3CC0], al


地址004AE221  
004AE212  |.  6A 01         push    1
004AE214  |.  8D9424 141000>lea     edx, dword ptr [esp+1014]
004AE21B  |.  52            push    edx
004AE21C  |.  E8 1F29F7FF   call    00420B40
004AE221  |.  A2 C03C4F00   mov     byte ptr [4F3CC0], al

也是调用了一个函数 00420B40
ok 修改函数头几个字节
00420B40      B8 01000000   mov     eax, 1
00420B45      C2 0800       retn    8
00420B48      90            nop
00420B49      90            nop

保存所有修改到可执行文件

运行 窗口没有evaluation copy字样,Help菜单下的About子菜单弹窗的窗口 40days trials copy字样也没有。。改为 Register to

这次修改让程序以为我们注册给谁了。。

函数004A74D0和00420B40就是判断有没有注册的关键函数。。

下次不爆破,写个怎么注册的帖子吧。。

还在等面试结果。。求大神,团队带走啊。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (24)
雪    币: 3000
活跃值: (3542)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 5 2014-3-11 14:55
2
0
注册算法不是说是很难吗?
雪    币: 265
活跃值: (211)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
冰琥珀 2 2014-3-11 16:13
3
0
我分析的版本是5.0.0.0的,感觉不太一样,没有看到cmp     eax, 28这个比较,注册的话,似乎需要用到rarlng.dll和winrar.lng这两个文件,似乎没有这两个文件或是注册表中没有找到rarkey,就会使用一次弹一次窗
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
达文西 2014-3-11 18:40
4
0
文章结尾,楼主居然轻言注册winrar,初生牛犊不怕虎啊。
雪    币: 27
活跃值: (354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Promisejhy 2014-3-11 20:11
5
0
楼主能否上传爆破好的文件?看着你的步骤进行不下去。。。
雪    币: 10822
活跃值: (2669)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
menglv 2014-3-16 13:50
6
0
很好奇什么样的公司,面试需要人家会破解?
雪    币: 1040
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
KeyKernel 1 2014-3-16 14:02
7
0
应该是大腾讯吧..
雪    币: 7802
活跃值: (148)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guobing 2014-3-16 15:05
8
0
只能说,这面试题能考你什么? 逆向能力?
雪    币: 1409
活跃值: (1280)
能力值: ( LV12,RANK:212 )
在线值:
发帖
回帖
粉丝
shuax 2 2014-3-16 15:31
9
0
坐等楼主注册机
雪    币: 96
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wkxq 2014-3-17 22:04
10
0
坐等楼主注册机
雪    币: 307
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
过既冲云 1 2014-3-24 01:17
11
0
官网下载的。。
上传的附件:
雪    币: 307
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
过既冲云 1 2014-3-24 01:19
12
0
注册文件分析了。。没全分析出来。。惭愧。。
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
达文西 2014-3-25 10:11
13
0
分析不出也是正常的,就算分析出了他的保护思路,基本也是跑不出key的。
雪    币: 2739
活跃值: (2407)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiwushgya 2014-9-5 14:35
14
0
学习了一下,试着破解了winrar510。 wrar510sc破解文件32位.rar

wrar510sc原文件.rar
上传的附件:
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
时光鸟 2014-10-6 17:40
15
0
bp MessageBoxW
bp DialogBoxParamW

我试着用这两个试了下,断不下来
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
时光鸟 2014-10-6 18:09
16
0
[QUOTE=xiwushgya;1314516]学习了一下,试着破解了winrar510。 wrar510sc破解文件32位.rar

wrar510sc原文件.rar[/QUOTE]

看了下你的文件,有三个地方不同,能否分享下思路?谢谢!
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
时光鸟 2014-10-6 18:58
17
0
所以4F3CC0的值很重要。。内存搜素4F3CC0,发现好多地方都用这个值去判断
但是赋值的地方只有四处:

引用:
004B1A76 . A2 C03C4F00 mov byte ptr ds:[4F3CC0], al
引用:
0049D485 . A2 C03C4F00 mov byte ptr ds:[4F3CC0], al
引用:
004AAC92 |. A2 C03C4F00 mov byte ptr ds:[4F3CC0], al
引用:
004AE221 |. A2 C03C4F00 mov byte ptr ds:[4F3CC0], al


楼主,请教一下,这个内存搜索的OD操作!这些是怎么一下搜索出来的?
雪    币: 6329
活跃值: (3244)
能力值: ( LV8,RANK:138 )
在线值:
发帖
回帖
粉丝
zhighest 2014-10-7 00:27
18
0
刚刚试了下,爆破没多大难度…
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kxzpy 2014-10-7 07:51
19
0
同问 如何用OD搜内存的
雪    币: 15947
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killbr 2015-7-6 10:13
20
0
不明白  为什么  这句

004C3715      C2 1000       retn    10
要改成 retn 10呢,为什么不是11,不是20,不是其他的呢?

好像不是内存搜索吧,是搜索常量才对啊。
雪    币: 15947
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killbr 2015-7-6 10:29
21
0
为什么 这句要改成
00420B45      C2 0800       retn    8

retn    8哪来的呢?
雪    币: 15947
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killbr 2015-7-6 10:41
22
0
搜索常量就跟楼主的对号了

参考位于 WinRAR:.text 到常量 0x4F3CC0
地址       反汇编                                    注释
00426FA4   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
004271B4   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
0046D806   mov     cl, byte ptr ds:[0x4F3CC0]        ds:[004F3CC0]=00
0046D929   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
0046D98F   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
0049800D   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
0049D475   cmp     byte ptr ds:[0x4F3CC0], al        Case 110 of switch 0049D445
0049D485   mov     byte ptr ds:[0x4F3CC0], al
004A7BEE   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
004AAC73   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
004AAC92   mov     byte ptr ds:[0x4F3CC0], al
004ADA94   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
004AE0F8   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
004AE221   mov     byte ptr ds:[0x4F3CC0], al
004AE23A   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
004B164C   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
004B1767   push    ecx                               (初始 CPU 选择)
004B1A76   mov     byte ptr ds:[0x4F3CC0], al
004B1FC8   cmp     byte ptr ds:[0x4F3CC0], 0x0       ds:[004F3CC0]=00
雪    币: 393
活跃值: (224)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
BinGzL 1 2015-7-6 10:43
23
0
楼主改的点其实并不优雅,虽然是爆破不也应该追求优雅爆破吗?这东西1byte的解决方案不少
雪    币: 15947
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killbr 2015-7-6 12:17
24
0
断不下来说明用的是WIN7
是XP的话偏移地址是相同的。
雪    币: 101
活跃值: (104)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
tmxfh 2015-7-13 16:01
25
0
如果它内部采用了RAR密码的方式加密,破解起来可能会更困难
游客
登录 | 注册 方可回帖
返回