原文:https://www.pediy.com/kssd/pediy03/forum538.htm
有一个程序地址为http://www.newhua.com.cn/down/fldrmrkr.zip,它可给电脑中的众多文件加上说明。先是在白菜的论坛上看到有人要求破解,于是下载下来一试,竟然……,只怪我软柿子捏多了,连手都软了,竟然没有捏动,特请各路高手帮忙。
经过一下午的研究发现问题在Folderem.dll中,关键处在:
00406621 55
push ebp
00406622 8BEC
mov ebp, esp
00406624 8B550C
mov edx, dword ptr [ebp+0C]
00406627 8B4508
mov eax, dword ptr [ebp+08]
0040662A 8B08
mov ecx, dword ptr [eax]
0040662C 3B0A
cmp ecx, dword ptr [edx]
0040662E 7522
jne 00406652
00406630 8B4804
mov ecx, dword ptr [eax+04]
00406633 3B4A04
cmp ecx, dword ptr [edx+04]
00406636 751A
jne 00406652
00406638 8B4808
mov ecx, dword ptr [eax+08]
0040663B 3B4A08
cmp ecx, dword ptr [edx+08]
0040663E 7512
jne 00406652
00406640 8B480C
mov ecx, dword ptr [eax+0C]
00406643 3B4A0C
cmp ecx, dword ptr [edx+0C]
00406646 750A
jne 00406652
00406648 8B4010
mov eax, dword ptr [eax+10]
0040664B 8B5210
mov edx, dword ptr [edx+10]
0040664E 3BC2
cmp eax, edx
00406650 7404
je 00406656
00406652 33C0
xor eax, eax
00406654 EB05
jmp 0040665B <-注意
00406656 B801000000 mov eax,
00000001
0040665B 5D
pop ebp
0040665C C3
ret
上面的一些全是比较,如全对最后EAX就为1,暴破的话只要将EB05改为EB00就可以了,它是用ASPACK2.1加壳的,是用UNASPACK1.0.9.1能脱,能反汇编,就是不能用。SMC我也不会。注册算法与注册名无关,是用注册码进行计算后与一常数串比较,正算法是看懂了,但逆算法却找不到。只怪我学艺不精,恳请各路高手帮忙。
另:上面的地址是反汇编来的,每次重启动WIN后66XX是不变的,但前面的会变,如7D66XX。还有它是在WIN启动时加载的。不知如何脱光它!
【声明】
我写文章以交流为主,希望大家在转载时能保持文章的完整性。(这一段是从ljttt那剽窃来的 8-))
【前言】
前天到白菜乐园闲逛,在论坛看到有人请求破解Folder Remarker,它可给电脑中的众多文件加上说明,象我们这种经常下载东西的人尤其用得着。于是马上架起jetcar把它装回家,抄起trw2000就剁,结果剁了半天竟然没剁开,只怪我软柿子捏多了,手上没劲,咳……。
【工具】
IDA4.04、trw2000、Uedit7.0
【破解方法】
SMC
【正文】
经过一下午的研究发现问题在Folderem.dll中,关键处在:
00406621 55
push ebp
00406622 8BEC
mov ebp, esp
00406624 8B550C
mov edx, dword ptr [ebp+0C]
00406627 8B4508
mov eax, dword ptr [ebp+08]
0040662A 8B08
mov ecx, dword ptr [eax]
0040662C 3B0A
cmp ecx, dword ptr [edx]
0040662E 7522
jne 00406652
00406630 8B4804
mov ecx, dword ptr [eax+04]
00406633 3B4A04
cmp ecx, dword ptr [edx+04]
00406636 751A
jne 00406652
00406638 8B4808
mov ecx, dword ptr [eax+08]
0040663B 3B4A08
cmp ecx, dword ptr [edx+08]
0040663E 7512
jne 00406652
00406640 8B480C
mov ecx, dword ptr [eax+0C]
00406643 3B4A0C
cmp ecx, dword ptr [edx+0C]
00406646 750A
jne 00406652
00406648 8B4010
mov eax, dword ptr [eax+10]
0040664B 8B5210
mov edx, dword ptr [edx+10]
0040664E 3BC2
cmp eax, edx
00406650 7404
je 00406656
00406652 33C0
xor eax, eax
00406654 EB05
jmp 0040665B <-注意
00406656 B801000000 mov eax,
00000001
0040665B 5D
pop ebp
0040665C C3
ret
上面的一些全是比较,如全对最后EAX就为1,可惜的是,正算法是看懂了,但逆算法却找不到(事实上,它用的是SHA算法,数论的高才生也搞不定,何况是我,不过如果谁对SHA算法感兴趣的话,可以分析它的原程序,由于太长我就不贴了)。没办法只有考虑暴破。暴破的话只要将EB05改为EB00就可以了,但用FI240一看,发现它是用ASPACK2.1加壳的,用UNASPACK1.0.9.1能脱,能反汇编(上面的就是脱后反汇编来的,要注意的是每次重启动WIN后地址66XX是不变的,但前面的0040会变,如可能是变为007D66XX),就是不能用(真可惜!)。对dll文件的手动脱壳我也不会,而且它是在WIN启动时加载的不知如何断下来(主要是我太菜!)。想来想去只有用SMC,可怜我从没用过,这次是被逼上梁山了!废话少说,马上烧香请出Crack宝典——看雪论坛精华。看了半天终于有了一些头绪,于是开始动手。
分析发现ASPACK2.1加壳的软件开始不久就有一长串的00,而且似乎没有用,不知它放在那干什么?(就等我来CRACK它?不会吧!)不过刚好放我的代码。
00419001 pusha
00419002 call
sub_419579
00419007 jmp
short loc_41903C
00419009 xchg
ebx, ebx
0041900B nop
0041900C db
0 ; \
0041900D db
0 ; \
0041900E db
0 ; \好长一串00,
0041900F db
0 ; \刚好有用。
00419010 db
0 ; \
00419011 db
0 ; \
00419012 db
0 ; \
00419013 db
0 ; \
00419014 db
0 ; \
00419015 db
0 ; \
00419016 db
0 ; \
00419017 db
0 ; \
00419018 db
0 ; \
00419019 db
0 ; \
0041901A db
0 ; \
0041901B db
0 ; \
0041901C db
0 ; \
0041901D db
0 ; \
0041901E db
0 ; \
0041901F db
0 ; \
00419020 db
0 ; \
再看尾部:
004194DD mov
eax, [ebp+443A0Eh]
004194E3 push
eax
004194E4 add
eax, [ebp+444798h]
004194EA pop
ecx
004194EB or
ecx, ecx
004194ED mov
[ebp+443E3Bh], eax <-eax为返回地址
004194F3 popa
<-到这儿就该去执行SMC代码了,而且不能
004194F4 jnz
short loc_4194FE 先popa,不然eax的值就丢了。
004194F6 mov
eax, 1
004194FB retn
0Ch
004194FE push
00000000 <-00的地址为[ebp+443E3Bh],执行4194ED一句后
00419503 retn
原来的00000000就变为了返回地址
还有一个问题,前面说到每次重启动WIN后,执行地址都不同,有7D66XX、16766XX等,而且不跟踪的话我也不知道那时eax到底是多少(是不知如何跟踪吧?),不过这也难不倒我,估计EAX的高4位和要修改的地址的高4位应该是一样的如007D、0167等,那我只要把它的低4位改为6654就可以了,这样两句汇编就可以办到了。
修改后反汇编如下:
头部
00419001 pusha
00419002 call sub_419579
00419007 jmp short loc_41903C
00419009 db 87h ;
0041900A db 0DBh ;
0041900B db 90h ;
0041900C and eax, FFFF0000h
<-低4位清0
00419012 add eax, 6654h
<-低4位变为6654
00419017 mov dword ptr [eax+0], 01B800EBh
<-将EB05变为EB00
0041901E jmp loc_4194FD
<-回到出口
尾部
004194E3 push eax
004194E4 add eax, [ebp+444798h]
004194EA pop ecx
004194EB or ecx, ecx
004194ED mov [ebp+443E3Bh], eax
004194F3 jmp loc_41900C
<-去执行SMC代码
004194F8 db 0 ; \
004194F9 db 0 ; \ 这些没用
004194FA db 0 ; /
004194FB db 0C2h ; 0 /
004194FC db 0Ch ;
004194FD popa
<-出口
004194FE push 00000000
00419503 retn
收工,试一下一切OK。(需要重启到DOS下,再用修改好的覆盖)
附:程序下载地址为http://www.newhua.com.cn/down/fldrmrkr.zip
hying[CCG] 2001.1.21