hongxin2005 发表于 2006-3-12 16:48:50

一个简单的crackme

目标软件:crackmeno3_1
破解方式:寻找注册码
难易等级:初
相关工具:peid ollydbg dede
过程:首先查壳无,并且是用Borland Delphi 6.0 - 7.0语言编写,输入用户名:tong注册码:54321 点验证,无信息。看来只有正确的注册码才会提示。用OD载入,用消息断点无法拦截,DEDE载入,查得验证信息地址,并在OD中拦截成功。如下:


00459938/.55            PUSH EBP
00459939|.8BEC          MOV EBP,ESP
0045993B|.33C9          XOR ECX,ECX
0045993D|.51            PUSH ECX
0045993E|.51            PUSH ECX
0045993F|.51            PUSH ECX
00459940|.51            PUSH ECX
00459941|.51            PUSH ECX
00459942|.51            PUSH ECX
00459943|.51            PUSH ECX
00459944|.53            PUSH EBX
00459945|.56            PUSH ESI
00459946|.8945 FC       MOV DWORD PTR SS:,EAX
00459949|.33C0          XOR EAX,EAX
0045994B|.55            PUSH EBP
0045994C|.68 8E9A4500   PUSH CrackMeN.00459A8E
00459951|.64:FF30       PUSH DWORD PTR FS:
00459954|.64:8920       MOV DWORD PTR FS:,ESP
00459957|.8D55 EC       LEA EDX,DWORD PTR SS:
0045995A|.8B45 FC       MOV EAX,DWORD PTR SS:
0045995D|.8B80 00030000 MOV EAX,DWORD PTR DS:
00459963|.E8 FCEFFDFF   CALL CrackMeN.00438964
00459968|.8B45 EC       MOV EAX,DWORD PTR SS:            ;注册名
0045996B|.E8 FCABFAFF   CALL CrackMeN.0040456C                   ;注册名位数(eax)
00459970|.8BF0          MOV ESI,EAX
00459972|.33DB          XOR EBX,EBX
00459974|.8BC6          MOV EAX,ESI
00459976|.85C0          TEST EAX,EAX
00459978|.7E 21         JLE SHORT CrackMeN.0045999B
0045997A|.BA 01000000   MOV EDX,1                              ;第一次计算
0045997F|>69CE 8E91C621 /IMUL ECX,ESI,21C6918E                   ;ecx=esi*21c6918e
00459985|.03D9          |ADD EBX,ECX                           ;ebx=ebx+ecx(初始ebx=0)
00459987|.8B4D EC       |MOV ECX,DWORD PTR SS:
0045998A|.0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:       ;依次取用户名
0045998F|.69C9 CE020000 |IMUL ECX,ECX,2CE                        ;ecx=ecx*2ce
00459995|.03D9          |ADD EBX,ECX                           ;ebx=ebx+ecx
00459997|.42            |INC EDX                                 ;edx=edx+1
00459998|.48            |DEC EAX
00459999|.^ 75 E4         \JNZ SHORT CrackMeN.0045997F             ;是否为0
0045999B|>8BC3          MOV EAX,EBX
0045999D|.99            CDQ                                       先扩展判断eax符号位为0,edx=00000000,否则edx =ffffffff
0045999E|.33C2          XOR EAX,EDX                              eax=eax^edx
004599A0|.2BC2          SUB EAX,EDX                              eax=eax-edx
004599A2|.8D55 F8       LEA EDX,DWORD PTR SS:
004599A5|.E8 9AEBFAFF   CALL CrackMeN.00408544                   ;计算第一串
004599AA|.8BC6          MOV EAX,ESI
004599AC|.85C0          TEST EAX,EAX
004599AE|.7E 21         JLE SHORT CrackMeN.004599D1
004599B0|.BA 01000000   MOV EDX,1
004599B5|>8B4D EC       /MOV ECX,DWORD PTR SS:         ;进行第二次转换
004599B8|.0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:       ;又依次取用户名
004599BD|.69C9 8E91C621 |IMUL ECX,ECX,21C6918E                   ;ecx=ecx*21c6918e
004599C3|.69C9 BC070000 |IMUL ECX,ECX,7BC                        ;ecx=ecx*7bc
004599C9|.03D9          |ADD EBX,ECX                           ;ebx=ebx+ecx
004599CB|.2BDE          |SUB EBX,ESI                           ;ebx=ebx-esi(esi为用户名位数)
004599CD|.42            |INC EDX                                 ;循环次数
004599CE|.48            |DEC EAX
004599CF|.^ 75 E4         \JNZ SHORT CrackMeN.004599B5             ;为0跳
004599D1|>8BC3          MOV EAX,EBX
004599D3|.99            CDQ                                        先扩展判断eax符号位为0,edx=00000000,否则edx =ffffffff
004599D4|.33C2          XOR EAX,EDX                              ;eax=eax^edx
004599D6|.2BC2          SUB EAX,EDX                              ;eax=eax-edx
004599D8|.8D55 F4       LEA EDX,DWORD PTR SS:
004599DB|.E8 64EBFAFF   CALL CrackMeN.00408544                      计算第二串
004599E0|.8BC6          MOV EAX,ESI
004599E2|.85C0          TEST EAX,EAX
004599E4|.7E 1E         JLE SHORT CrackMeN.00459A04
004599E6|.BA 01000000   MOV EDX,1                              ;第三次进行运算
004599EB|>8B4D EC       /MOV ECX,DWORD PTR SS:
004599EE|.0FB64C11 FF   |MOVZX ECX,BYTE PTR DS:
004599F3|.0FAFCE      |IMUL ECX,ESI                            ;ecx=ecx*esi
004599F6|.69C9 C6040000 |IMUL ECX,ECX,4C6                        ;ecx=ecx*4c6
004599FC|.03D9          |ADD EBX,ECX                           ;ebx=ebx+ecx
004599FE|.03DE          |ADD EBX,ESI                           ;ebx=ebx+esi
00459A00|.42            |INC EDX                                 ;循环次数
00459A01|.48            |DEC EAX
00459A02|.^ 75 E7         \JNZ SHORT CrackMeN.004599EB             ;为0跳
00459A04|>81C3 8E91C621 ADD EBX,21C6918E                         ;ebx=ebx+21c6918e
00459A0A|.8BC3          MOV EAX,EBX                              ;eax=ebx
00459A0C|.99            CDQ                                           先扩展判断eax符号位为0,edx=00000000,否则edx =ffffffff
00459A0D|.33C2          XOR EAX,EDX                              ;eax=eax^edx
00459A0F|.2BC2          SUB EAX,EDX                                  eax=eax-edx
00459A11|.8D55 F0       LEA EDX,DWORD PTR SS:
00459A14|.E8 2BEBFAFF   CALL CrackMeN.00408544                      计算第三串
00459A19|.8D55 E8       LEA EDX,DWORD PTR SS:
00459A1C|.8B45 FC       MOV EAX,DWORD PTR SS:

(公用部分)
00408E92|$B9 0A000000   MOV ECX,0A                               ;ecx=0a
00408E97|>8D75 9F       LEA ESI,DWORD PTR SS:
00408E9A|>31D2          /XOR EDX,EDX                           ;以下计算第一字串
00408E9C|.F7F1          |DIV ECX                                 ;eax=eax/ecx 余数在 edx中
00408E9E|.80C2 30       |ADD DL,30
00408EA1|.80FA 3A       |CMP DL,3A
00408EA4|.72 03         |JB SHORT CrackMeN.00408EA9
00408EA6|.80C2 07       |ADD DL,7
00408EA9|>4E            |DEC ESI
00408EAA|.8816          |MOV BYTE PTR DS:,DL
00408EAC|.09C0          |OR EAX,EAX                                 
00408EAE|.^ 75 EA         \JNZ SHORT CrackMeN.00408E9A             eax为0则结束
00408EB0|.8D4D 9F       LEA ECX,DWORD PTR SS:
00408EB3|.29F1          SUB ECX,ESI
00408EB5|.8B55 DC       MOV EDX,DWORD PTR SS:
00408EB8|.83FA 10       CMP EDX,10
00408EBB|.76 01         JBE SHORT CrackMeN.00408EBE
00408EBD|.C3            RETN

算法:1、用注册名计算出三个串,(注意:每一串的计算都是以前一串和用户名为基础计算出的)

      2、以前三个串为基础,调用(公用部分)计算。所得到的三串数字(每串9位)用“-”连接起来即为注册码。

如:注册名:tong
    注册码:476965616-434456928-134355326

由于有是登录网站特别慢,附件还有大小限制,所以没传上来,这是今天起早传的。

[ 本帖最后由 hongxin2005 于 2006-3-13 21:29 编辑 ]

飘云 发表于 2006-3-13 07:36:10

将 CrackMe 打包上来 就给你来个 精华标志

野猫III 发表于 2006-4-21 18:52:07

原帖由 飘云 于 2006-3-13 07:36 发表
将 CrackMe 打包上来 就给你来个 精华标志

老大。。。他放上来了。。。:victory:

godhack 发表于 2006-5-3 15:21:54

学习中......算法好难啊!
页: [1]
查看完整版本: 一个简单的crackme