一个简单的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 编辑 ] 将 CrackMe 打包上来 就给你来个 精华标志 原帖由 飘云 于 2006-3-13 07:36 发表
将 CrackMe 打包上来 就给你来个 精华标志
老大。。。他放上来了。。。:victory: 学习中......算法好难啊!
页:
[1]