首页
社区
课程
招聘
easycrackme算法分析
发表于: 2006-8-4 02:09 6700

easycrackme算法分析

2006-8-4 02:09
6700

【破文标题】easycrackme破解手记
【破文作者】网游难民
【作者邮箱】
【作者主页】http://bbs.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:[EBP-4]             ;  用户名放如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:[EBP-8]
004040CF  |.  BA E0414000   MOV EDX,easycrac.004041E0                ;  your name?
004040D4  |.  E8 A7EDFFFF   CALL easycrac.00402E80
004040D9  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
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:[EBP-4]            ;  用户名放入ECX
004040FB  |.  0FB64C01 FF   |MOVZX ECX,BYTE PTR DS:[ECX+EAX-1]
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:[EDX+EDX]           ;  用户名位数*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*4+4050B8]      ;  把ESI与0F与后的数*2+4050B8对应的地址里的数放入EBX,值记为B---在后面给出这个表格
00404131  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
00404134  |.  8B4D F8       MOV ECX,DWORD PTR SS:[EBP-8]             ;  注册码放入ECX
00404137  |.  BA 04424000   MOV EDX,easycrac.00404204                ;  0
0040413C  |.  E8 DBEDFFFF   CALL easycrac.00402F1C
00404141  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  0+注册码
00404144  |.  E8 57FEFFFF   CALL easycrac.00403FA0                   ;  关键CALL哦,跟进
00404149  |.  8BF0          MOV ESI,EAX                              ;  得到的值C放入ESI
0040414B  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
0040414E  |.  BA F4414000   MOV EDX,easycrac.004041F4                ;  error
00404153  |.  E8 28EDFFFF   CALL easycrac.00402E80
00404158  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
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:[EBP-4]
0040416C  |.  BA 20424000   MOV EDX,easycrac.00404220                ;  ok
00404171  |.  E8 0AEDFFFF   CALL easycrac.00402E80
00404176  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
00404179  |.  BA 2C424000   MOV EDX,easycrac.0040422C                ;  thanks a lot
0040417E  |.  E8 FDECFFFF   CALL easycrac.00402E80
00404183  |>  6A 00         PUSH 0
++++++++++++++++++++++++++++++++++++++++++++++++++++
在0040412A处在信息窗口右击--数据窗口中跟随地址:
004050B8  19791126
004050BC  19791007
004050C0  11261979
004050C4  10071979
004050C8  12345678
004050CC  9ABCDEF0
004050D0  12123434
004050D4  78787878
004050D8  CCC6CCC6
004050DC  CC00CC00
004050E0  FFEFEFFF
004050E4  DDCC5555
004050E8  67678789
004050EC  CECECBCC
004050F0  778899AB
004050F4  44337766
004050F8  00000000
004050FC  00000000
00405100  00000000
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:[EBP-8],EDX
00403FAC  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
00403FAF  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
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:[EAX]
00403FC2  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
00403FC5  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
00403FC8  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
00403FCB  |.  E8 B0EEFFFF   CALL easycrac.00402E80
00403FD0  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]            
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:[EDX+EDX*4]
00403FE7  |.  8B5D F8       |MOV EBX,DWORD PTR SS:[EBP-8]
00403FEA  |.  0FB65C03 FF   |MOVZX EBX,BYTE PTR DS:[EBX+EAX-1]
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:[EAX],EDX
00404003  |.  68 1D404000   PUSH easycrac.0040401D
00404008  |>  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
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算法比较简单,就是把算法表达出来比较麻烦:)
如果没有看懂的朋友建议跟一遍就知道了~~~
------------------------------------------------------------------------
【版权声明】本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
支持一下!
2006-8-4 16:18
0
雪    币: 110
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
呵呵,越来越多精华了,强
2006-8-4 17:26
0
雪    币: 309
活跃值: (15)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
最初由 小剑 发布
呵呵,越来越多精华了,强


精华多不多无所谓,关键是我们都学到了东西~~
2006-8-4 18:58
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
5
最初由 网游难民 发布
精华多不多无所谓,关键是我们都学到了东西~~


既要学东西,也要精华多
2006-8-4 19:07
0
雪    币: 110
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 happytown 发布
既要学东西,也要精华多


对我这种没精华的人,菜啊,楼主还是 PYG 的版主呢,哈哈,我那里的 ID

lgjxj ,呵呵多关照啊,有空教教我,我现在学鸡蛋壳大侠,到 3000 贴就

想办法骗个精华来玩玩,努力灌水。。。。。。。。。。。。。。。。。。
2006-8-4 23:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵,越来越多精华了,强
2006-8-5 13:44
0
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
8
强的不行。。。。
2006-8-5 14:22
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
9
不错呀・!现在喜欢玩CRACKME的兄弟越来越多了,版块也热闹了,大家技术也上去了。。。呵呵
2006-8-5 15:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
非常好贴
我看好你哦
2006-8-5 15:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
难民兄的,不错,支持一下!
2006-8-5 16:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
越来越多精华,不错,支持!!!
2006-8-6 09:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学到像他这样就好了,佩服!
2006-11-8 16:03
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
严重支持!!!!!
2006-11-8 16:33
0
游客
登录 | 注册 方可回帖
返回
//