首页
社区
课程
招聘
[原创]分析一个有意思的CrackMe
发表于: 2012-8-22 10:52 12663

[原创]分析一个有意思的CrackMe

2012-8-22 10:52
12663

这几天一直在找各种CrackMe来玩,觉得这个CrackMe很有意思,为啥?因为本人初学,一直没破解过有经典算法的CrackMe,这次正好碰到一个用MD5加密的,于是下定决心好好研究一下,大牛无视吧。
这个CrackMe有一个壳,我也不知道具体是什么壳,但是很容易脱掉,用模拟跟踪法,几秒钟到达OEP,然后就直接进入主题了。
首先,下GetWindowTextA断点,来到这里。

00031143    6A 64           PUSH 64
00031145    68 26400300     PUSH 34026                               ; ASCII "liuying"
0003114A    6A 00           PUSH 0
0003114C    FF75 08         PUSH DWORD PTR SS:[EBP+8]
0003114F    E8 2B200000     CALL 0003317F                            ; JMP 到 USER32.GetDlgItemTextA
00031154    83F8 04         CMP EAX,4
00031157    0F86 11010000   JBE 0003126E                             ; 这里可以看出,输入的name长度必须大于4,不然就跳到退出了
0003115D    A3 EE400300     MOV DWORD PTR DS:[340EE],EAX
00031162    6A 64           PUSH 64
00031164    68 8A400300     PUSH 3408A
00031169    6A 01           PUSH 1
0003116B    FF75 08         PUSH DWORD PTR SS:[EBP+8]
0003116E    E8 0C200000     CALL 0003317F                            ; JMP 到 USER32.GetDlgItemTextA
00031173    85C0            TEST EAX,EAX
00031175    0F84 F3000000   JE 0003126E
0003117B    FF35 EE400300   PUSH DWORD PTR DS:[340EE]
00031181    68 26400300     PUSH 34026                               ; name放在这里
00031186    E8 EE000000     CALL 00031279                            ; 这里是MD5算法的关键地方
0003118B    8BF0            MOV ESI,EAX
0003118D    BF 06400300     MOV EDI,34006
00031192    B9 10000000     MOV ECX,10
00031197    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
00031199    83C4 08         ADD ESP,8
0003119C    33C0            XOR EAX,EAX
0003119E    B9 8A400300     MOV ECX,3408A
000311A3    8841 08         MOV BYTE PTR DS:[ECX+8],AL
000311A6    8861 11         MOV BYTE PTR DS:[ECX+11],AH
000311A9    8841 1A         MOV BYTE PTR DS:[ECX+1A],AL
000311AC    51              PUSH ECX
000311AD    E8 720F0000     CALL 00032124                            ; 将key的值分三组放在三个变量中
000311B2    A3 F2400300     MOV DWORD PTR DS:[340F2],EAX
000311B7    BE 93400300     MOV ESI,34093
000311BC    56              PUSH ESI
000311BD    E8 620F0000     CALL 00032124                            ; 将key的值分三组放在三个变量中
000311C2    C1C0 07         ROL EAX,7								;这里将注册码循环左移了7位,所以我们要把下面得到的注册码先右移7位。
000311C5    A3 F6400300     MOV DWORD PTR DS:[340F6],EAX
000311CA    BE 9C400300     MOV ESI,3409C
000311CF    56              PUSH ESI
000311D0    E8 4F0F0000     CALL 00032124                            ; 将key的值分三组放在三个变量中
000311D5    C1C8 09         ROR EAX,9								; 这里将注册码循环左移了9位,所以我们要把下面得到的注册码先右移9位。
000311D8    A3 FA400300     MOV DWORD PTR DS:[340FA],EAX
000311DD    F8              CLC
000311DE    1BC9            SBB ECX,ECX
000311E0    BE 06400300     MOV ESI,34006
000311E5    BF 6D210300     MOV EDI,3216D
000311EA    0FB606          MOVZX EAX,BYTE PTR DS:[ESI]              ; 以MD5的值作为指针,取表中的数据
000311ED    8B1C38          MOV EBX,DWORD PTR DS:[EAX+EDI]           ; 取表中的第一个值放到ebx中
000311F0    0FB646 03       MOVZX EAX,BYTE PTR DS:[ESI+3]
000311F4    8B1438          MOV EDX,DWORD PTR DS:[EAX+EDI]           ; 取表中的第二个值放到edx中
000311F7    33DA            XOR EBX,EDX                              ; 取出两个数进行异或
000311F9    A1 F2400300     MOV EAX,DWORD PTR DS:[340F2]
000311FE    33C3            XOR EAX,EBX                              ; 再与eax,即注册码的前一部分进行异或
00031200    03C8            ADD ECX,EAX                              ; 将结果进行累加,放在ecx中
00031202    0FB646 04       MOVZX EAX,BYTE PTR DS:[ESI+4]
00031206    8B1C38          MOV EBX,DWORD PTR DS:[EAX+EDI]           ; 取表中的第三个值放到ebx中
00031209    0FB646 08       MOVZX EAX,BYTE PTR DS:[ESI+8]
0003120D    8B1438          MOV EDX,DWORD PTR DS:[EAX+EDI]           ; 取表中的第四个值放到edx中
00031210    33DA            XOR EBX,EDX
00031212    A1 F6400300     MOV EAX,DWORD PTR DS:[340F6]
00031217    33C3            XOR EAX,EBX                              ; 与注册码中间部分进行异或
00031219    03C8            ADD ECX,EAX                              ; 将结果进行累加,放在ecx中
0003121B    0FB646 09       MOVZX EAX,BYTE PTR DS:[ESI+9]
0003121F    8B1C38          MOV EBX,DWORD PTR DS:[EAX+EDI]           ; 取表中的第五个值放到ebx中
00031222    0FB646 0A       MOVZX EAX,BYTE PTR DS:[ESI+A]
00031226    8B1438          MOV EDX,DWORD PTR DS:[EAX+EDI]           ; 取表中的第六个值放到edx中
00031229    33DA            XOR EBX,EDX
0003122B    A1 FA400300     MOV EAX,DWORD PTR DS:[340FA]
00031230    33C3            XOR EAX,EBX
00031232    03C8            ADD ECX,EAX                              ; 将结果进行累加,放在ecx中
00031234    8BC1            MOV EAX,ECX
00031236    B9 20000000     MOV ECX,20
0003123B    F8              CLC
0003123C    72 30           JB SHORT 0003126E                        ; 这个是关键跳,如果跳了就注册失败
0003123E    D1E8            SHR EAX,1
00031240  ^ E2 FA           LOOPD SHORT 0003123C
00031242    6A 40           PUSH 40
00031244    E8 07000000     CALL 00031250

上传的附件:
收藏
免费 6
支持
分享
最新回复 (16)
雪    币: 316
活跃值: (128)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
沙发占楼,等待加精.
2012-8-22 11:10
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
没事找事型。。。。。。。。精力不够饿。
2012-8-22 11:47
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
4
打包的附件中,CrackMe因为有壳,杀软件会报毒,不过请放心,不会对电脑有危害的。
2012-8-22 14:08
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
真的可谓是大牛级别的人物了!
2012-8-22 15:10
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
6
说笑了,我哪是是什么大牛啊。。还差一大截距离。。
2012-8-22 22:34
0
雪    币: 3248
活跃值: (1962)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
已经很牛了,都能写注册机,分析算法了。

俺还困在爆破中。
2012-8-23 03:55
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
md5好像之前有帖子分析过,本来想照那帖跟下去,但是看到那长度实在畏惧了,不过我想要是别人在md5加密的过程里面改动一点点,那不是得重来一遍吗。用软件算不出值就是因为改了一点点东西的话,那重新跟一遍不又是几个小时。。。
2012-8-23 10:37
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
9
嗯,说得对,其实我跟踪的时候完全不知道是md5,用peid也没查到,直到最后把算法完全模拟下来过后,才思考这算法这么长,会不会是某个经典算法,然后去网上用md5加密后发现真的是md5,所以就算写软件的在md5加密时做了手脚,我一样能把算法搞出来,跟踪时是很累的,但是也挺好玩的。。呵呵。
2012-8-23 11:12
0
雪    币: 182
活跃值: (246)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
以楼主的毅力,成为牛是迟早的事情
2012-8-23 21:04
0
雪    币: 324
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我就喜欢分析过程!~
LZ大好!~
2012-8-23 21:53
0
雪    币: 500
活跃值: (905)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
lz真有毅力,学习了
2012-8-24 14:33
0
雪    币: 102
活跃值: (50)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
楼主学习的毅力着实让人钦佩,楼主将来一定大有可为!
2012-8-26 14:06
0
雪    币: 250
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zdd
14
强烈学习中。。。
2012-8-29 23:04
0
雪    币: 125
活跃值: (161)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
  太牛了  
MD5算法 直接给逆了~

我刚还想吐槽代码难看不是抠的吧。  看到是这样果断不说话了。
2012-8-30 20:28
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
16
呵呵,代码是写得很差,因为调试的时候很麻烦,所以都写得很简单,方便调试
2012-8-31 12:27
0
雪    币: 395
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
我喜欢暴力破解,直接改跳转!
2012-9-2 10:38
0
游客
登录 | 注册 方可回帖
返回
//