飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2935|回复: 8

【破文标题】easycrackme算法分析

[复制链接]

该用户从未签到

发表于 2006-8-4 02:05:30 | 显示全部楼层 |阅读模式
【破文标题】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:[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算法比较简单,就是把算法表达出来比较麻烦:)
如果没有看懂的朋友建议跟一遍就知道了~~~
------------------------------------------------------------------------
【版权声明】本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[ 本帖最后由 网游难民 于 2006-8-4 13:05 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2016-1-14 00:02
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2006-8-5 10:35:41 | 显示全部楼层
    分析的不错!!学习了!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-8-6 00:26:56 | 显示全部楼层
    非常详尽的分析~~可惜偶是菜鸟一个,看不懂~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2006-8-6 14:48:13 | 显示全部楼层
    阿民进步好快呀~罚你两天内做出这个软件的算法注册机!
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2006-8-6 14:54:07 | 显示全部楼层
    原帖由 野猫III 于 2006-8-6 14:48 发表
    阿民进步好快呀~罚你两天内做出这个软件的算法注册机!

    :L 算法注册机~~
    偶只能来个黑底白字的了~`~:L /fad
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-8-6 14:57:35 | 显示全部楼层
    注册机前晚以写好了,今天不知跑到哪去了,晕
    经典的查表
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2006-8-6 15:05:11 | 显示全部楼层
    原帖由 lgjxj 于 2006-8-6 14:57 发表
    注册机前晚以写好了,今天不知跑到哪去了,晕
    经典的查表



    偶连老师布置的C作业都没有好好写过~~
    兄弟把你的拿出来给偶当猫的作业交啊~~~~/:D
    用C写要用到数组,指针~~case选择结构~字符串函数还有位运算:L :L

    [ 本帖最后由 网游难民 于 2006-8-6 15:33 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2006-8-6 19:14:33 | 显示全部楼层
    偶的C水平只能够计算机2级的~~~~
    一个长的字符串偶拿它没有办法拉~~
    如果在注册码前面出现“-”
    那就请你输入一个短点的用户名吧/:D

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-8-8 15:42:50 | 显示全部楼层
    看不懂:time:
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表