【破文标题】easycrackme算法分析
【破文标题】easycrackme破解手记【破文作者】网游难民
【作者邮箱】
【作者主页】https://www.chinapyg.com/discuz.php
【破解工具】PEiD,OD
【破解平台】Windows XP
【软件名称】easycrackme
【软件大小】22.0 KB
【原版下载】本地
【保护方式】注册码
【软件简介】一个比较简单的crackme,偶分析了给大家分享,
不足之处请大家多多指教~~
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
------------------------------------------------------------------------
用PEID查壳为Borland Delphi 4.0 - 5.0,无壳
+++++++++++++++++++++++++++++++++++++++++++
运行软件,输入试练码,点确定弹出对话框"Invalid",退出软件
再用OD截入脱壳后的程序,右键超级字串查找,找到"Invalid",双击进入程序代码段,往上查找合适地方下断。
+++++++++++++++++++++++++++++++++++++++++++++
004040BE|.8B45 FC MOV EAX,DWORD PTR SS: ;用户名放如EAX中
004040C1|.E8 0AEEFFFF CALL easycrac.00402ED0
004040C6|.8BD0 MOV EDX,EAX ;用户名位数
004040C8|.85D2 TEST EDX,EDX
004040CA|.7F 1F JG SHORT easycrac.004040EB ;检测用户名是否为空~~
004040CC|.8D45 F8 LEA EAX,DWORD PTR SS:
004040CF|.BA E0414000 MOV EDX,easycrac.004041E0 ;your name?
004040D4|.E8 A7EDFFFF CALL easycrac.00402E80
004040D9|.8D45 FC LEA EAX,DWORD PTR SS:
004040DC|.BA F4414000 MOV EDX,easycrac.004041F4 ;error
004040E1|.E8 9AEDFFFF CALL easycrac.00402E80
004040E6|.E9 98000000 JMP easycrac.00404183
004040EB|>33F6 XOR ESI,ESI
004040ED|.8BDA MOV EBX,EDX
004040EF|.85DB TEST EBX,EBX
004040F1|.7E 19 JLE SHORT easycrac.0040410C
004040F3|.B8 01000000 MOV EAX,1 ;EAX=1
004040F8|>8B4D FC /MOV ECX,DWORD PTR SS: ;用户名放入ECX
004040FB|.0FB64C01 FF |MOVZX ECX,BYTE PTR DS:
00404100|.8BF8 |MOV EDI,EAX
00404102|.4F |DEC EDI
00404103|.0FAFCF |IMUL ECX,EDI
00404106|.03F1 |ADD ESI,ECX
00404108|.40 |INC EAX
00404109|.4B |DEC EBX
0040410A|.^ 75 EC \JNZ SHORT easycrac.004040F8 ;循环,用户名第一位*0,第二位*1。依次类推~~结果相加,和记为A
0040410C|>8D1C12 LEA EBX,DWORD PTR DS: ;用户名位数*2放入EBX
0040410F|.83C3 63 ADD EBX,63 ;用户名位数*2放入EBX加上63
00404112|.81E3 FFFF0000 AND EBX,0FFFF
00404118|.81E6 FFFF0000 AND ESI,0FFFF
0040411E|.C1E3 10 SHL EBX,10 ;左移10位
00404121|.03F3 ADD ESI,EBX ;A加上上面的数,值放在ESI中。
00404123|.8BDE MOV EBX,ESI ;
00404125|.8BF3 MOV ESI,EBX
00404127|.83E6 0F AND ESI,0F ;ESI与0F与,结果放入ESI中
0040412A|.8B1CB5 B85040>MOV EBX,DWORD PTR DS: ;把ESI与0F与后的数*2+4050B8对应的地址里的数放入EBX,值记为B---在后面给出这个表格
00404131|.8D45 F8 LEA EAX,DWORD PTR SS:
00404134|.8B4D F8 MOV ECX,DWORD PTR SS: ;注册码放入ECX
00404137|.BA 04424000 MOV EDX,easycrac.00404204 ;0
0040413C|.E8 DBEDFFFF CALL easycrac.00402F1C
00404141|.8B45 F8 MOV EAX,DWORD PTR SS: ;0+注册码
00404144|.E8 57FEFFFF CALL easycrac.00403FA0 ;关键CALL哦,跟进
00404149|.8BF0 MOV ESI,EAX ;得到的值C放入ESI
0040414B|.8D45 FC LEA EAX,DWORD PTR SS:
0040414E|.BA F4414000 MOV EDX,easycrac.004041F4 ;error
00404153|.E8 28EDFFFF CALL easycrac.00402E80
00404158|.8D45 F8 LEA EAX,DWORD PTR SS:
0040415B|.BA 10424000 MOV EDX,easycrac.00404210 ;invalid
00404160|.E8 1BEDFFFF CALL easycrac.00402E80
00404165|.3BDE CMP EBX,ESI ;关键比较,即B与C比较,不相等则GAMEOVER
00404167|.75 1A JNZ SHORT easycrac.00404183 ;关键跳转
00404169|.8D45 FC LEA EAX,DWORD PTR SS:
0040416C|.BA 20424000 MOV EDX,easycrac.00404220 ;ok
00404171|.E8 0AEDFFFF CALL easycrac.00402E80
00404176|.8D45 F8 LEA EAX,DWORD PTR SS:
00404179|.BA 2C424000 MOV EDX,easycrac.0040422C ;thanks a lot
0040417E|.E8 FDECFFFF CALL easycrac.00402E80
00404183|>6A 00 PUSH 0
++++++++++++++++++++++++++++++++++++++++++++++++++++
在0040412A处在信息窗口右击--数据窗口中跟随地址:
004050B819791126
004050BC19791007
004050C011261979
004050C410071979
004050C812345678
004050CC9ABCDEF0
004050D012123434
004050D478787878
004050D8CCC6CCC6
004050DCCC00CC00
004050E0FFEFEFFF
004050E4DDCC5555
004050E867678789
004050ECCECECBCC
004050F0778899AB
004050F444337766
004050F800000000
004050FC00000000
0040510000000000
SI与0F与后的数*2+4050B8对应的地址里的数,就是上面的地址对应的数,即为B。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
关键CALL:
00403FA0/$55 PUSH EBP
00403FA1|.8BEC MOV EBP,ESP
00403FA3|.83C4 F8 ADD ESP,-8
00403FA6|.53 PUSH EBX
00403FA7|.33D2 XOR EDX,EDX
00403FA9|.8955 F8 MOV DWORD PTR SS:,EDX
00403FAC|.8945 FC MOV DWORD PTR SS:,EAX
00403FAF|.8B45 FC MOV EAX,DWORD PTR SS:
00403FB2|.E8 D9EFFFFF CALL easycrac.00402F90
00403FB7|.33C0 XOR EAX,EAX
00403FB9|.55 PUSH EBP
00403FBA|.68 16404000 PUSH easycrac.00404016
00403FBF|.64:FF30 PUSH DWORD PTR FS:
00403FC2|.64:8920 MOV DWORD PTR FS:,ESP
00403FC5|.8D45 F8 LEA EAX,DWORD PTR SS:
00403FC8|.8B55 FC MOV EDX,DWORD PTR SS:
00403FCB|.E8 B0EEFFFF CALL easycrac.00402E80
00403FD0|.8B45 F8 MOV EAX,DWORD PTR SS:
00403FD3|.E8 F8EEFFFF CALL easycrac.00402ED0 ;
00403FD8|.8BC8 MOV ECX,EAX ;0用户名的位数放入ECX,即用户名位数+1
00403FDA|.41 INC ECX ;0用户名的位数+1,即用户名位数+2
00403FDB|.33D2 XOR EDX,EDX
00403FDD|.B8 01000000 MOV EAX,1
00403FE2|>03D2 /ADD EDX,EDX
00403FE4|.8D1492 |LEA EDX,DWORD PTR DS:
00403FE7|.8B5D F8 |MOV EBX,DWORD PTR SS:
00403FEA|.0FB65C03 FF |MOVZX EBX,BYTE PTR DS:
00403FEF|.03D3 |ADD EDX,EBX
00403FF1|.83EA 30 |SUB EDX,30 ;EDX-30
00403FF4|.40 |INC EAX
00403FF5|.3BC8 |CMP ECX,EAX
00403FF7|.^ 75 E9 \JNZ SHORT easycrac.00403FE2 ;关键循环,得到值C,在EDX中,在下面有详细解说,
00403FF9|.8BDA MOV EBX,EDX ;C放入EBX中
00403FFB|.33C0 XOR EAX,EAX
00403FFD|.5A POP EDX
00403FFE|.59 POP ECX
00403FFF|.59 POP ECX
00404000|.64:8910 MOV DWORD PTR FS:,EDX
00404003|.68 1D404000 PUSH easycrac.0040401D
00404008|>8D45 F8 LEA EAX,DWORD PTR SS:
0040400B|.BA 02000000 MOV EDX,2
00404010|.E8 F7EDFFFF CALL easycrac.00402E0C
00404015\.C3 RETN
00404016 .^ E9 BDE8FFFF JMP easycrac.004028D8
0040401B .^ EB EB JMP SHORT easycrac.00404008
0040401D .8BC3 MOV EAX,EBX ;把C的值放入EAX中
0040401F .5B POP EBX
00404020 .59 POP ECX
00404021 .59 POP ECX
00404022 .5D POP EBP
00404023 .C3 RETN
关于关键循环C:
因为程序在我们注册码第一位填加的是0,可以忽略不记,至于为什么,你看完就知道了~~
那个循环等价于:
取用户名的第一位的ASCII码-30的值*2记为a1,a1+a1*4的值记为c1.
c1+用户名第二位的ASCII码-30的值*2记为a2,a2+a2*4的值记为c2.
c2+用户名第三位的ASCII码-30的值*2记为a3,a3+a3*4的值记为c3.
.........................
这样一直循环到用户名最后一位。最后的值记为c0
取c0的后8位就是C。
因为0的ASCII码是30上面-30后就位0了,就不记入总值了,所以说忽略不记。
而用户名第一位*0,第二位*1。依次类推~~结果相加的值为A
用户名位数*2加上63的值左移10位后加上A记为B.
最后B和C比较,相等则注册成功,不等则注册失败~
总结下,经过asdmusic 兄弟提醒,求出C的那个循环原来是把注册码的16进制保存在计算机中,C即为注册码的16进制~~~:)
即B的十进制即为真码~~:)
------------------------------------------------------------------------
此crackme算法比较简单,就是把算法表达出来比较麻烦:)
如果没有看懂的朋友建议跟一遍就知道了~~~
------------------------------------------------------------------------
【版权声明】本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[ 本帖最后由 网游难民 于 2006-8-4 13:05 编辑 ] 分析的不错!!学习了!! 非常详尽的分析~~可惜偶是菜鸟一个,看不懂~ 阿民进步好快呀~罚你两天内做出这个软件的算法注册机! 原帖由 野猫III 于 2006-8-6 14:48 发表
阿民进步好快呀~罚你两天内做出这个软件的算法注册机!
:L 算法注册机~~
偶只能来个黑底白字的了~`~:L /fad 注册机前晚以写好了,今天不知跑到哪去了,晕
经典的查表 原帖由 lgjxj 于 2006-8-6 14:57 发表
注册机前晚以写好了,今天不知跑到哪去了,晕
经典的查表
偶连老师布置的C作业都没有好好写过~~
兄弟把你的拿出来给偶当猫的作业交啊~~~~/:D
用C写要用到数组,指针~~case选择结构~字符串函数还有位运算:L :L
[ 本帖最后由 网游难民 于 2006-8-6 15:33 编辑 ] 偶的C水平只能够计算机2级的~~~~
一个长的字符串偶拿它没有办法拉~~
如果在注册码前面出现“-”
那就请你输入一个短点的用户名吧/:D 看不懂:time:
页:
[1]