首页
社区
课程
招聘
CRACKME算法分析(锻炼耐心型)
发表于: 2006-3-17 22:24 5986

CRACKME算法分析(锻炼耐心型)

2006-3-17 22:24
5986

【破文标题】CRACKME算法分析
【破文作者】逍遥风
【作者邮箱】tc-xb@163.com
【破解工具】OD peid
【破解平台】WINXP
【破解声明】一次锻炼耐性的好机会
----------------------------------------------------------------------
00430C58  /.  55            PUSH EBP
00430C59  |.  8BEC          MOV EBP,ESP
00430C5B  |.  B9 05000000   MOV ECX,5
。。。。。。省略一些代码。
00430CA7  |.  8B86 DC010000 MOV EAX,DWORD PTR DS:[ESI+1DC]
00430CAD  |.  E8 669FFEFF   CALL ocrackme.0041AC18                   ;  取注册名位数
00430CB2  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
00430CB5  |.  8B86 E0010000 MOV EAX,DWORD PTR DS:[ESI+1E0]
00430CBB  |.  E8 589FFEFF   CALL ocrackme.0041AC18                   ;  取注册码位数
00430CC0  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00430CC3  |.  E8 702CFDFF   CALL ocrackme.00403938
00430CC8  |.  83F8 06       CMP EAX,6                                ;  注册名位数与6比较
00430CCB  |.  7D 0F         JGE SHORT ocrackme.00430CDC
00430CCD  |.  B8 F40E4300   MOV EAX,ocrackme.00430EF4                ;  name must be at least 6 characters long
00430CD2  |.  E8 65DEFFFF   CALL ocrackme.0042EB3C
00430CD7  |.  E9 E8010000   JMP ocrackme.00430EC4
00430CDC  |>  837D F8 00    CMP DWORD PTR SS:[EBP-8],0               ;  输入注册吗了吗
00430CE0  |.  75 34         JNZ SHORT ocrackme.00430D16
00430CE2  |.  B8 240F4300   MOV EAX,ocrackme.00430F24                ;  enter a serial #
00430CE7  |.  E8 50DEFFFF   CALL ocrackme.0042EB3C
00430CEC  |.  E9 D3010000   JMP ocrackme.00430EC4
00430CF1  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]            ;  开始第一步计算,作用就是把注册名进行倒序
00430CF4  |.  E8 3F2CFDFF   |CALL ocrackme.00403938                  ;  取注册名
00430CF9  |.  2BC3          |SUB EAX,EBX                             ;  EAX=EAX-EBX
00430CFB  |.  8B55 FC       |MOV EDX,DWORD PTR SS:[EBP-4]
00430CFE  |.  8A5402 FF     |MOV DL,BYTE PTR DS:[EDX+EAX-1]          ;  倒序取注册名的ASCII码
00430D02  |.  8D45 E4       |LEA EAX,DWORD PTR SS:[EBP-1C]
00430D05  |.  E8 562BFDFF   |CALL ocrackme.00403860
00430D0A  |.  8B55 E4       |MOV EDX,DWORD PTR SS:[EBP-1C]
00430D0D  |.  8D45 F4       |LEA EAX,DWORD PTR SS:[EBP-C]
00430D10  |.  E8 2B2CFDFF   |CALL ocrackme.00403940
00430D15  |.  43            |INC EBX                                 ;  每计算一次EBX+1
00430D16  |>  8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00430D19  |.  E8 1A2CFDFF   |CALL ocrackme.00403938
00430D1E  |.  3BD8          |CMP EBX,EAX                             ;  计算完了吗?
00430D20  |.^ 7C CF         \JL SHORT ocrackme.00430CF1              ;  没有就继续计算。
00430D22  |.  BB 01000000   MOV EBX,1                                ;  使EBX=1
00430D27  |.  EB 36         JMP SHORT ocrackme.00430D5F              ;  设第一步结果为“甲”
00430D29  |>  FF75 EC       /PUSH DWORD PTR SS:[EBP-14]              ;  开始第二步计算
00430D2C  |.  8D45 E4       |LEA EAX,DWORD PTR SS:[EBP-1C]
00430D2F  |.  8B55 FC       |MOV EDX,DWORD PTR SS:[EBP-4]
00430D32  |.  8A541A FF     |MOV DL,BYTE PTR DS:[EDX+EBX-1]
00430D36  |.  E8 252BFDFF   |CALL ocrackme.00403860
00430D3B  |.  FF75 E4       |PUSH DWORD PTR SS:[EBP-1C]
00430D3E  |.  8D55 E0       |LEA EDX,DWORD PTR SS:[EBP-20]
00430D41  |.  8B45 F4       |MOV EAX,DWORD PTR SS:[EBP-C]
00430D44  |.  0FB64418 FF   |MOVZX EAX,BYTE PTR DS:[EAX+EBX-1]       ;  按顺序取甲每一位的ASCII值
00430D49  |.  E8 2A5AFDFF   |CALL ocrackme.00406778                  ;  将每一位的ASCII码转换成对应的十进制数
00430D4E  |.  FF75 E0       |PUSH DWORD PTR SS:[EBP-20]
00430D51  |.  8D45 EC       |LEA EAX,DWORD PTR SS:[EBP-14]
00430D54  |.  BA 03000000   |MOV EDX,3                               ;  令EDX=3
00430D59  |.  E8 9A2CFDFF   |CALL ocrackme.004039F8                  ;  注册名与十进制数按对应位置相交叉组成一个字符串
00430D5E  |.  43            |INC EBX                                 ;  每计算一次EBX+1
00430D5F  |>  8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00430D62  |.  E8 D12BFDFF   |CALL ocrackme.00403938
00430D67  |.  3BD8          |CMP EBX,EAX                             ;  计算完了吗?
00430D69  |.^ 7C BE         \JL SHORT ocrackme.00430D29              ;  没有就继续计算。
00430D6B  |.  BB 01000000   MOV EBX,1                                ;  使EBX=1
00430D70  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]             ;  设第二步结果为“乙”。
00430D73  |.  E8 4429FDFF   CALL ocrackme.004036BC
00430D78  |.  EB 4D         JMP SHORT ocrackme.00430DC7              ;  开始第三步计算
00430D7A  |>  8D45 DC       /LEA EAX,DWORD PTR SS:[EBP-24]           ;  第三步计算就是从乙的第2位开始重复取每一位到倒数第2位
00430D7D  |.  8B55 EC       |MOV EDX,DWORD PTR SS:[EBP-14]
00430D80  |.  8A141A        |MOV DL,BYTE PTR DS:[EDX+EBX]
00430D83  |.  8850 01       |MOV BYTE PTR DS:[EAX+1],DL
00430D86  |.  C600 01       |MOV BYTE PTR DS:[EAX],1
00430D89  |.  8D55 DC       |LEA EDX,DWORD PTR SS:[EBP-24]
00430D8C  |.  8D45 D8       |LEA EAX,DWORD PTR SS:[EBP-28]
00430D8F  |.  E8 581AFDFF   |CALL ocrackme.004027EC                  ;  取乙的每一位
00430D94  |.  8D45 D4       |LEA EAX,DWORD PTR SS:[EBP-2C]
00430D97  |.  8B55 EC       |MOV EDX,DWORD PTR SS:[EBP-14]
00430D9A  |.  8A141A        |MOV DL,BYTE PTR DS:[EDX+EBX]
00430D9D  |.  8850 01       |MOV BYTE PTR DS:[EAX+1],DL
00430DA0  |.  C600 01       |MOV BYTE PTR DS:[EAX],1
00430DA3  |.  8D55 D4       |LEA EDX,DWORD PTR SS:[EBP-2C]
00430DA6  |.  8D45 D8       |LEA EAX,DWORD PTR SS:[EBP-28]
00430DA9  |.  B1 02         |MOV CL,2                                ;  使CL=2
00430DAB  |.  E8 0C1AFDFF   |CALL ocrackme.004027BC                  ;  重复取乙的每一位
00430DB0  |.  8D55 D8       |LEA EDX,DWORD PTR SS:[EBP-28]
00430DB3  |.  8D45 F0       |LEA EAX,DWORD PTR SS:[EBP-10]
00430DB6  |.  E8 212BFDFF   |CALL ocrackme.004038DC
00430DBB  |.  8D45 F4       |LEA EAX,DWORD PTR SS:[EBP-C]
00430DBE  |.  8B55 F0       |MOV EDX,DWORD PTR SS:[EBP-10]
00430DC1  |.  E8 7A2BFDFF   |CALL ocrackme.00403940
00430DC6  |.  43            |INC EBX                                 ;  每计算一次EBX+1
00430DC7  |>  8B45 EC        MOV EAX,DWORD PTR SS:[EBP-14]
00430DCA  |.  E8 692BFDFF   |CALL ocrackme.00403938
00430DCF  |.  48            |DEC EAX                                 ;  每计算一次EAX-1
00430DD0  |.  3BD8          |CMP EBX,EAX                             ;  计算完了吗?
00430DD2  |.^ 7C A6         \JL SHORT ocrackme.00430D7A              ;  没有就继续计算。
00430DD4  |.  BB 01000000   MOV EBX,1                                ;  使EBX=1
00430DD9  |.  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]            ;  设第三步结果为“丙”
00430DDC  |.  E8 DB28FDFF   CALL ocrackme.004036BC
00430DE1  |.  EB 1C         JMP SHORT ocrackme.00430DFF              ;  开始第四步计算
00430DE3  |>  8D55 E4       /LEA EDX,DWORD PTR SS:[EBP-1C]           ;  第四步计算就是把丙除最后一位舍去都转换成相应的十进制数
00430DE6  |.  8B45 F4       |MOV EAX,DWORD PTR SS:[EBP-C]
00430DE9  |.  0FB64418 FF   |MOVZX EAX,BYTE PTR DS:[EAX+EBX-1]       ;  取丙每一位的ASCII值
00430DEE  |.  E8 8559FDFF   |CALL ocrackme.00406778                  ;  每一位的ASCII值转换成对应的十进制数
00430DF3  |.  8B55 E4       |MOV EDX,DWORD PTR SS:[EBP-1C]
00430DF6  |.  8D45 EC       |LEA EAX,DWORD PTR SS:[EBP-14]
00430DF9  |.  E8 422BFDFF   |CALL ocrackme.00403940                  ;  将每一位的十进制数顺次合并
00430DFE  |.  43            |INC EBX                                 ;  每计算一次EBX+1
00430DFF  |>  8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]
00430E02  |.  E8 312BFDFF   |CALL ocrackme.00403938
00430E07  |.  3BD8          |CMP EBX,EAX                             ;  计算完了吗?
00430E09  |.^ 7C D8         \JL SHORT ocrackme.00430DE3              ;  没有就继续计算。
00430E0B  |.  BB 03000000   MOV EBX,3                                ;  使EBX=3
00430E10  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]             ;  设第四步结果为“丁”
00430E13  |.  E8 A428FDFF   CALL ocrackme.004036BC
00430E18  |.  83FB 30       CMP EBX,30
00430E1B  |.  7D 22         JGE SHORT ocrackme.00430E3F              ;  开始第五步计算
00430E1D  |>  8D45 E4       /LEA EAX,DWORD PTR SS:[EBP-1C]           ;  第五步计算就是从丁第三位开始隔3位取一个数,取到48位为止
00430E20  |.  8B55 EC       |MOV EDX,DWORD PTR SS:[EBP-14]
00430E23  |.  8A541A FF     |MOV DL,BYTE PTR DS:[EDX+EBX-1]          ;  取丁中与EBX的值相对应位数
00430E27  |.  E8 342AFDFF   |CALL ocrackme.00403860
00430E2C  |.  8B55 E4       |MOV EDX,DWORD PTR SS:[EBP-1C]
00430E2F  |.  8D45 F4       |LEA EAX,DWORD PTR SS:[EBP-C]
00430E32  |.  E8 092BFDFF   |CALL ocrackme.00403940
00430E37  |.  83C3 03       |ADD EBX,3                               ;  每计算一次EBX+3
00430E3A  |.  83FB 30       |CMP EBX,30                              ;  取到EBX=48为止
00430E3D  |.^ 7C DE         \JL SHORT ocrackme.00430E1D              ;  设第五步计算结果为“戊”
00430E3F  |>  BB 01000000   MOV EBX,1                                ;  使EBX=1
00430E44  |.  EB 5B         JMP SHORT ocrackme.00430EA1              ;  开始第六步计算
00430E46  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]            ;  取注册名
00430E49  |.  E8 EA2AFDFF   |CALL ocrackme.00403938                  ;  取注册名位数
00430E4E  |.  03C3          |ADD EAX,EBX                             ;  EAX=EAX+EBX
00430E50  |.  8B55 EC       |MOV EDX,DWORD PTR SS:[EBP-14]           ;  EBP-14=丁
00430E53  |.  8A5402 FD     |MOV DL,BYTE PTR DS:[EDX+EAX-3]          ;  取丁中与EAX值对应位数的值的ASCII值。
00430E57  |.  8D45 E4       |LEA EAX,DWORD PTR SS:[EBP-1C]
00430E5A  |.  E8 012AFDFF   |CALL ocrackme.00403860
00430E5F  |.  8B45 E4       |MOV EAX,DWORD PTR SS:[EBP-1C]
00430E62  |.  E8 4159FDFF   |CALL ocrackme.004067A8                  ;  使EAX等于丁中对应位数的值
00430E67  |.  50            |PUSH EAX
00430E68  |.  8D45 E4       |LEA EAX,DWORD PTR SS:[EBP-1C]
00430E6B  |.  8B55 F4       |MOV EDX,DWORD PTR SS:[EBP-C]
00430E6E  |.  8A541A FF     |MOV DL,BYTE PTR DS:[EDX+EBX-1]          ;  取戊每一位的ASCII值
00430E72  |.  E8 E929FDFF   |CALL ocrackme.00403860
00430E77  |.  8B45 E4       |MOV EAX,DWORD PTR SS:[EBP-1C]
00430E7A  |.  E8 2959FDFF   |CALL ocrackme.004067A8                  ;  使EAX等于戊中对应位数的值
00430E7F  |.  5A            |POP EDX
00430E80  |.  2BC2          |SUB EAX,EDX
00430E82  |.  99            |CDQ
00430E83  |.  33C2          |XOR EAX,EDX
00430E85  |.  2BC2          |SUB EAX,EDX                             ;  EAX=EAX-EDX,结果为A
00430E87  |.  8D55 E8       |LEA EDX,DWORD PTR SS:[EBP-18]
00430E8A  |.  E8 E958FDFF   |CALL ocrackme.00406778
00430E8F  |.  8D45 F4       |LEA EAX,DWORD PTR SS:[EBP-C]
00430E92  |.  E8 712CFDFF   |CALL ocrackme.00403B08                  ;  取戊
00430E97  |.  8B55 E8       |MOV EDX,DWORD PTR SS:[EBP-18]
00430E9A  |.  8A12          |MOV DL,BYTE PTR DS:[EDX]
00430E9C  |.  885418 FF     |MOV BYTE PTR DS:[EAX+EBX-1],DL          ;  用An替换戊中对应位数的值
00430EA0  |.  43            |INC EBX                                 ;  每计算一次EBX+1
00430EA1  |>  8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]
00430EA4  |.  E8 8F2AFDFF   |CALL ocrackme.00403938                  ;  取戊的位数
00430EA9  |.  3BD8          |CMP EBX,EAX                             ;  计算完了吗?
00430EAB  |.^ 7E 99         \JLE SHORT ocrackme.00430E46             ;  没有就继续计算。
00430EAD  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  EBP-C=注册码
00430EB0  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]
00430EB3  |.  E8 902BFDFF   CALL ocrackme.00403A48                   ;  比较CALL,
00430EB8  |.  75 0A         JNZ SHORT ocrackme.00430EC4              ;  不相等就跳向失败
00430EBA  |.  B8 400F4300   MOV EAX,ocrackme.00430F40                ;  you got it!!! :)

------------------------------------------------------------------------
算法总结:
1)注册名不得小于6位。
2)算法分为6步。
第一步:将输入的注册名进行倒序。结果设为‘甲’
第二步:取‘甲’每一位的ASCII值,再转换成对应的十进制数。把注册名与十进制数每间隔三位交叉。得到‘乙’
第三步:将乙掐头去尾(首尾两位舍弃)重复取中间部分(如A变为AA。。。)。结果设为‘丙’位数为N
第四步:取丙的前N-1位的ASCII值,并转换成相对应的十进制数,结果设为‘丁’
第五步:从丁的第三位开始,每隔三位取一个数。将这些数合并。结果设为‘戊’
第六步:在丁和戊中取一定位数的值,经过计算后将新的计算结果替换戊中原来的数字。结果即是注册码。
例,注册名:lovetc
第一步:ctevol
第二步:l99o116v101e118t111     注意:第一位是L
第三步:9999oo111166vv110011ee111188tt1111
第四步:57575757111111494949495454118118494948484949101101494949495656116116494949
第五步:571149441149491
第六步:004638330000003
所以,
注册名:lovetc
注册码:004638330000003
总算搞出些头绪了,头都大了.该回宿舍了,回去晚了会被看门大叔打PP的:)
算法不难,就是比较麻烦。
在网吧完成的,所以比较仓促,有疏漏请大家指出
----------------------------------------------------------------------
【版权声明】欢迎交流,请保留作者及文章完整性。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 157
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
先做沙发,再慢慢看。。。
2006-3-18 08:55
0
雪    币: 390
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
真让人受不了!
2006-3-18 09:26
0
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
4
不太喜欢这样的crackme,纯以算法繁复难为人
2006-3-18 09:37
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
5
呵呵 ~用来锻炼自己的
2006-3-18 09:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
呵呵
这样是出不来耐性的
完全可以把ASM的代码直接抠出来用
:)
2006-3-18 14:59
0
雪    币: 183
活跃值: (563)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
7
耐心。。。
2006-4-15 11:09
0
游客
登录 | 注册 方可回帖
返回
//