首页
社区
课程
招聘
[原创]wxh9833's CrackMe 算法分析
发表于: 2006-8-2 15:33 5730

[原创]wxh9833's CrackMe 算法分析

2006-8-2 15:33
5730

【破解日期】 2006年8月2日
【破解作者】 冷血书生
【作者邮箱】 colddoctor@126.com
【作者主页】 http://www.126sohu.com
【使用工具】 OD
【破解平台】 Win9x/NT/2000/XP
【软件名称】 wxh9833's CrackMe
【下载地址】 本地
【软件大小】 32KB
【加壳方式】 无
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】

下断bp __vbaStrComp,中断取消并返回

00402FD7  call crackme_.00403470                        ; 将用户名用MD5进行四轮运算
00402FDC  mov dword ptr ss:[ebp-6C],eax                 ; 结果传送到[ebp-6C]
00402FDF  lea eax,dword ptr ss:[ebp-74]
00402FE2  lea ecx,dword ptr ss:[ebp-84]
00402FE8  push eax
00402FE9  push ecx
00402FEA  mov dword ptr ss:[ebp-74],8
00402FF1  call dword ptr ds:[<&MSVBVM60.#518>]          ; MSVBVM60.rtcLowerCaseVar
00402FF7  lea edx,dword ptr ss:[ebp-84]
00402FFD  lea ebx,dword ptr ds:[esi+34]
00403000  push edx
00403001  call dword ptr ds:[<&MSVBVM60.__vbaStrVarMove>; MSVBVM60.__vbaStrVarMove
00403007  mov edx,eax
00403009  lea ecx,dword ptr ss:[ebp-60]
0040300C  call edi
0040300E  mov edx,eax
00403010  mov ecx,ebx
00403012  call dword ptr ds:[<&MSVBVM60.__vbaStrCopy>]  ; MSVBVM60.__vbaStrCopy
00403018  lea eax,dword ptr ss:[ebp-60]
0040301B  lea ecx,dword ptr ss:[ebp-5C]
0040301E  push eax
0040301F  mov edi,2
00403024  push ecx
00403025  push edi
00403026  call dword ptr ds:[<&MSVBVM60.__vbaFreeStrLis>; MSVBVM60.__vbaFreeStrList
0040302C  add esp,0C
0040302F  lea ecx,dword ptr ss:[ebp-64]
00403032  call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>]  ; MSVBVM60.__vbaFreeObj
00403038  lea edx,dword ptr ss:[ebp-84]
0040303E  lea eax,dword ptr ss:[ebp-74]
00403041  push edx
00403042  push eax
00403043  push edi
00403044  call dword ptr ds:[<&MSVBVM60.__vbaFreeVarLis>; MSVBVM60.__vbaFreeVarList
0040304A  mov ecx,dword ptr ds:[ebx]
0040304C  add esp,0C
0040304F  push ecx
00403050  call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]  ; MSVBVM60.__vbaLenBstr
00403056  mov ebx,dword ptr ds:[<&MSVBVM60.__vbaVarMove>; MSVBVM60.__vbaVarMove
0040305C  lea edx,dword ptr ss:[ebp-A4]
00403062  lea ecx,dword ptr ss:[ebp-54]
00403065  mov dword ptr ss:[ebp-9C],eax
0040306B  mov dword ptr ss:[ebp-A4],3
00403075  call ebx
00403077  mov eax,1
0040307C  lea edx,dword ptr ss:[ebp-A4]
00403082  mov dword ptr ss:[ebp-9C],eax
00403088  mov dword ptr ss:[ebp-AC],eax
0040308E  lea eax,dword ptr ss:[ebp-54]
00403091  push edx
00403092  lea ecx,dword ptr ss:[ebp-B4]
00403098  push eax
00403099  lea edx,dword ptr ss:[ebp-F0]
0040309F  push ecx
004030A0  lea eax,dword ptr ss:[ebp-E0]
004030A6  push edx
004030A7  lea ecx,dword ptr ss:[ebp-24]
004030AA  push eax
004030AB  push ecx
004030AC  mov dword ptr ss:[ebp-A4],edi
004030B2  mov dword ptr ss:[ebp-B4],edi
004030B8  call dword ptr ds:[<&MSVBVM60.__vbaVarForInit>; MSVBVM60.__vbaVarForInit
004030BE  test eax,eax
004030C0  je crackme_.00403196
004030C6  mov edx,dword ptr ds:[esi+38]
004030C9  lea edi,dword ptr ds:[esi+38]
004030CC  lea eax,dword ptr ds:[esi+34]
004030CF  mov dword ptr ss:[ebp-BC],edx
004030D5  mov dword ptr ss:[ebp-9C],eax
004030DB  lea eax,dword ptr ss:[ebp-74]
004030DE  push eax
004030DF  lea ecx,dword ptr ss:[ebp-A4]
004030E5  push 14
004030E7  lea edx,dword ptr ss:[ebp-84]
004030ED  push ecx
004030EE  push edx
004030EF  mov dword ptr ss:[ebp-C4],8
004030F9  mov dword ptr ss:[ebp-6C],4
00403100  mov dword ptr ss:[ebp-74],2
00403107  mov dword ptr ss:[ebp-A4],4008
00403111  call dword ptr ds:[<&MSVBVM60.#632>]          ; MSVBVM60.rtcMidCharVar
00403117  lea eax,dword ptr ss:[ebp-C4]
0040311D  lea ecx,dword ptr ss:[ebp-84]
00403123  push eax
00403124  lea edx,dword ptr ss:[ebp-94]
0040312A  push ecx
0040312B  push edx
0040312C  call dword ptr ds:[<&MSVBVM60.__vbaVarCat>]   ; MSVBVM60.__vbaVarCat
00403132  push eax
00403133  call dword ptr ds:[<&MSVBVM60.__vbaStrVarMove>; MSVBVM60.__vbaStrVarMove
00403139  mov edx,eax                                   ; 取第三轮运算结果后面四位
0040313B  lea ecx,dword ptr ss:[ebp-58]
0040313E  call dword ptr ds:[<&MSVBVM60.__vbaStrMove>]  ; MSVBVM60.__vbaStrMove
00403144  mov edx,eax
00403146  mov ecx,edi
00403148  call dword ptr ds:[<&MSVBVM60.__vbaStrCopy>]  ; MSVBVM60.__vbaStrCopy
0040314E  lea ecx,dword ptr ss:[ebp-58]
00403151  call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]  ; MSVBVM60.__vbaFreeStr
00403157  lea eax,dword ptr ss:[ebp-94]
0040315D  lea ecx,dword ptr ss:[ebp-84]
00403163  push eax
00403164  lea edx,dword ptr ss:[ebp-74]
00403167  push ecx
00403168  push edx
00403169  push 3
0040316B  call dword ptr ds:[<&MSVBVM60.__vbaFreeVarLis>; MSVBVM60.__vbaFreeVarList
00403171  add esp,10
00403174  lea eax,dword ptr ss:[ebp-F0]
0040317A  lea ecx,dword ptr ss:[ebp-E0]
00403180  lea edx,dword ptr ss:[ebp-24]
00403183  push eax
00403184  push ecx
00403185  push edx
00403186  call dword ptr ds:[<&MSVBVM60.__vbaVarForNext>; MSVBVM60.__vbaVarForNext
0040318C  mov edi,2
00403191  jmp crackme_.004030BE                         ; 循环复制N次,具体不记得,用N代替,这里不是关键
00403196  mov eax,1
0040319B  lea ecx,dword ptr ss:[ebp-B4]
004031A1  mov dword ptr ss:[ebp-9C],eax
004031A7  mov dword ptr ss:[ebp-BC],eax
004031AD  lea eax,dword ptr ss:[ebp-A4]
004031B3  lea edx,dword ptr ss:[ebp-C4]
004031B9  push eax
004031BA  push ecx
004031BB  lea eax,dword ptr ss:[ebp-110]
004031C1  push edx
004031C2  lea ecx,dword ptr ss:[ebp-100]
004031C8  push eax
004031C9  lea edx,dword ptr ss:[ebp-24]
004031CC  push ecx
004031CD  push edx
004031CE  mov dword ptr ss:[ebp-A4],edi
004031D4  mov dword ptr ss:[ebp-AC],4
004031DE  mov dword ptr ss:[ebp-B4],edi
004031E4  mov dword ptr ss:[ebp-C4],edi
004031EA  call dword ptr ds:[<&MSVBVM60.__vbaVarForInit>; MSVBVM60.__vbaVarForInit
004031F0  test eax,eax
004031F2  je crackme_.004032E8
004031F8  lea ecx,dword ptr ss:[ebp-74]
004031FB  lea edx,dword ptr ss:[ebp-24]
004031FE  lea eax,dword ptr ds:[esi+38]
00403201  push ecx
00403202  push edx
00403203  mov dword ptr ss:[ebp-6C],1
0040320A  mov dword ptr ss:[ebp-74],edi
0040320D  mov dword ptr ss:[ebp-9C],eax
00403213  mov dword ptr ss:[ebp-A4],4008
0040321D  call dword ptr ds:[<&MSVBVM60.__vbaI4Var>]    ; MSVBVM60.__vbaI4Var
00403223  push eax
00403224  lea eax,dword ptr ss:[ebp-A4]
0040322A  lea ecx,dword ptr ss:[ebp-84]
00403230  push eax
00403231  push ecx
00403232  call dword ptr ds:[<&MSVBVM60.#632>]          ; MSVBVM60.rtcMidCharVar
00403238  lea edx,dword ptr ss:[ebp-84]
0040323E  lea eax,dword ptr ss:[ebp-58]
00403241  push edx
00403242  push eax
00403243  call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>>; MSVBVM60.__vbaStrVarVal
00403249  push eax
0040324A  call dword ptr ds:[<&MSVBVM60.#516>]          ; MSVBVM60.rtcAnsiValueBstr
00403250  lea edx,dword ptr ss:[ebp-C4]
00403256  lea ecx,dword ptr ss:[ebp-44]
00403259  mov word ptr ss:[ebp-BC],ax                   ; ax转移到[ebp-BC]
00403260  mov dword ptr ss:[ebp-C4],edi
00403266  call ebx
00403268  lea ecx,dword ptr ss:[ebp-58]
0040326B  call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]  ; MSVBVM60.__vbaFreeStr
00403271  lea ecx,dword ptr ss:[ebp-84]
00403277  lea edx,dword ptr ss:[ebp-74]
0040327A  push ecx
0040327B  push edx
0040327C  push edi
0040327D  call dword ptr ds:[<&MSVBVM60.__vbaFreeVarLis>; MSVBVM60.__vbaFreeVarList
00403283  add esp,0C
00403286  lea eax,dword ptr ss:[ebp-44]
00403289  lea ecx,dword ptr ss:[ebp-A4]
0040328F  lea edx,dword ptr ss:[ebp-74]
00403292  push eax
00403293  push ecx
00403294  push edx
00403295  mov dword ptr ss:[ebp-9C],3
0040329F  mov dword ptr ss:[ebp-A4],edi
004032A5  call dword ptr ds:[<&MSVBVM60.__vbaVarMul>]   ; MSVBVM60.__vbaVarMul /// 上面的值*3
004032AB  mov edx,eax                                 
004032AD  lea ecx,dword ptr ss:[ebp-44]
004032B0  call ebx
004032B2  lea eax,dword ptr ss:[ebp-34]
004032B5  lea ecx,dword ptr ss:[ebp-44]
004032B8  push eax
004032B9  lea edx,dword ptr ss:[ebp-74]
004032BC  push ecx
004032BD  push edx
004032BE  call dword ptr ds:[<&MSVBVM60.__vbaVarCat>]   ; MSVBVM60.__vbaVarCat
004032C4  mov edx,eax
004032C6  lea ecx,dword ptr ss:[ebp-34]
004032C9  call ebx
004032CB  lea eax,dword ptr ss:[ebp-110]
004032D1  lea ecx,dword ptr ss:[ebp-100]
004032D7  push eax
004032D8  lea edx,dword ptr ss:[ebp-24]
004032DB  push ecx
004032DC  push edx
004032DD  call dword ptr ds:[<&MSVBVM60.__vbaVarForNext>; MSVBVM60.__vbaVarForNext
004032E3  jmp crackme_.004031F0                         ; 循环四次
004032E8  mov eax,dword ptr ds:[esi]
004032EA  push esi
004032EB  call dword ptr ds:[eax+300]
004032F1  mov ebx,dword ptr ds:[<&MSVBVM60.__vbaObjSet>>; MSVBVM60.__vbaObjSet
004032F7  lea ecx,dword ptr ss:[ebp-64]
004032FA  push eax
004032FB  push ecx
004032FC  call ebx
004032FE  mov edi,eax
00403300  lea eax,dword ptr ss:[ebp-58]
00403303  push eax
00403304  push edi
00403305  mov edx,dword ptr ds:[edi]
00403307  call dword ptr ds:[edx+A0]
0040330D  test eax,eax
0040330F  fclex
00403311  jge short crackme_.00403325
00403313  push 0A0
00403318  push crackme_.0040299C
0040331D  push edi
0040331E  push eax
0040331F  call dword ptr ds:[<&MSVBVM60.__vbaHresultChe>; MSVBVM60.__vbaHresultCheckObj
00403325  mov eax,dword ptr ss:[ebp-58]                 ; 假码
00403328  lea ecx,dword ptr ss:[ebp-74]
0040332B  lea edx,dword ptr ss:[ebp-34]
0040332E  push ecx
0040332F  push edx
00403330  mov dword ptr ss:[ebp-58],0
00403337  mov dword ptr ss:[ebp-6C],eax                 ; 出现真码
0040333A  mov dword ptr ss:[ebp-74],8008
00403341  call dword ptr ds:[<&MSVBVM60.__vbaVarTstEq>] ; MSVBVM60.__vbaVarTstEq
00403347  lea ecx,dword ptr ss:[ebp-64]
0040334A  mov edi,eax
0040334C  call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>]  ; MSVBVM60.__vbaFreeObj
00403352  lea ecx,dword ptr ss:[ebp-74]

////////////////////////////////////////////////////////////////////////////////////////////

算法总结:

1) 将用户名用MD5进行四轮运算,取第三轮运算结果的后面四位(大写转小写) = A

2) A的每一位*3 =B

3) 将B的每一次计算结果转化为十进制并连接起来 = 注册码

如:

name : leng
code : 144168303297
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
MD5 学习了!!
2006-8-2 17:16
0
雪    币: 309
活跃值: (15)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3

看懂一半~
还没有学过加密算法~~
2006-8-3 00:54
0
雪    币: 174
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
最初由 冷血书生 发布
【破解日期】 2006年8月2日
【破解作者】 冷血书生
【作者邮箱】 colddoctor@126.com
【作者主页】 http://www.126sohu.com
【使用工具】 OD
........

大哥把我的软件拿这里来练手的,过程是对的,但是有几个部分不对啊,兄弟.呵呵.
2006-8-3 10:58
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
5
最初由 学习破解 发布
大哥把我的软件拿这里来练手的,过程是对的,但是有几个部分不对啊,兄弟.呵呵.


走了几天没看到,如果可以,请指点哪个部分不对呢?不怕你笑,我对VB代码不太熟悉的
2006-8-6 16:40
0
雪    币: 174
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
就是取MD5算法的值时,兄弟你在看一看,后面的都对,呵呵,取值是从那里取的,这个地方,兄弟说的不对,不是第四轮,你在看一下,哈,
2006-8-8 10:23
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
7
最初由 学习破解 发布
就是取MD5算法的值时,兄弟你在看一看,后面的都对,呵呵,取值是从那里取的,这个地方,兄弟说的不对,不是第四轮,你在看一下,哈,


我看得很清楚,我也没说取第四轮,我是说取第三轮后面四位,MD5一般就是进行四轮运算的!

你使用的是标准的MD5!
2006-8-8 13:11
0
游客
登录 | 注册 方可回帖
返回
//