绝恋de烦神 发表于 2008-11-4 14:22:09

CD Audio MP3 Converter 3.0算法分析

【文章标题】: CD Audio MP3 Converter 3.0算法分析
【文章作者】: iouken/絕戀de煩神
【作者邮箱】: [email protected]
【作者主页】: http://hi.baidu.com/天蝎型男
【作者QQ号】: 250771765
【软件名称】: CD Audio MP3 Converter 3.0 Build 20081103
【软件大小】: 1.56M
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12
【保护方式】: 注册码
【编写语言】: Delphi 6.0 - 7.0
【使用工具】: PEID,OD
【操作平台】: 100%的盗版Windows XP2
【软件介绍】: 一款CD音频提取软件。
【作者声明】: 仅仅只是一场游戏而已,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一、用PEID对程序进行查壳 → ASPack 2.12 -> Alexey Solodovnikov

      ASPack的壳很简单的,脱壳我就不多说了,ESP定律很快就到OEP了。我多数都是带壳调试的,懒得去脱了。嘻嘻。

二、用OD载入程序进行分析。

载入OD后运行程序,试注册一下,有错误提示。用F12暂停法来到下面的地方。

004E19F1    55            PUSH EBP                                 ; F2在这下断
004E19F2    68 0F1B4E00   PUSH cdextrac.004E1B0F
004E19F7    64:FF30         PUSH DWORD PTR FS:
004E19FA    64:8920         MOV DWORD PTR FS:,ESP
004E19FD    8D55 FC         LEA EDX,DWORD PTR SS:
004E1A00    8B83 44030000   MOV EAX,DWORD PTR DS:
004E1A06    E8 4D1CF8FF   CALL cdextrac.00463658                   ; 取试练码长度
004E1A0B    8B45 FC         MOV EAX,DWORD PTR SS:             ; 把试练码送给EAX
004E1A0E    E8 FD8DFCFF   CALL cdextrac.004AA810                   ; 关键CALL,F7
004E1A13    84C0            TEST AL,AL                               ; 标志位比较,这里AL的值如果等于1就注册成功,否则就GAME OVER
004E1A15    75 3E         JNZ SHORT cdextrac.004E1A55            ; 关键跳
004E1A17    6A 10         PUSH 10

跟进关键CALL后来到以下地方。
..........省略一些代码......
004AA82C    8BD6            MOV EDX,ESI
004AA82E    E8 21A1F5FF   CALL cdextrac.00404954
004AA833    8B45 FC         MOV EAX,DWORD PTR SS:             ; 把试练码送给EAX
004AA836    E8 41A3F5FF   CALL cdextrac.00404B7C                   ; 取试练码长度给EAX
004AA83B    83F8 06         CMP EAX,6                              ; 试练码长度和6h比较
004AA83E    7C 4B         JL SHORT cdextrac.004AA88B               ; 试练码位数小于6位就GAME OVER
004AA840    8B45 FC         MOV EAX,DWORD PTR SS:             ; 把试练码送给EAX
004AA843    33C9            XOR ECX,ECX                              ; ECX清零
004AA845    8A08            MOV CL,BYTE PTR DS:               ; 取试练码第1位ASCII值给CL
004AA847    8B45 FC         MOV EAX,DWORD PTR SS:             ; 把试练码送给EAX
004AA84A    0FB640 04       MOVZX EAX,BYTE PTR DS:            ; 取试练码第5位ASCII值给EAX
004AA84E    03C8            ADD ECX,EAX                              ; ECX=ECX+EAX
004AA850    8BC1            MOV EAX,ECX                              ; 把相加后的结果送给EAX
004AA852    83E8 60         SUB EAX,60                               ; EAX=EAX-60
004AA855    83F8 08         CMP EAX,8                              ; 相减后的结果和8h比较
004AA858    7E 31         JLE SHORT cdextrac.004AA88B            ; 小于等于8就GAME OVER
004AA85A    8BC1            MOV EAX,ECX                              ; 把上面相加后的结果送给EAX
004AA85C    8B55 FC         MOV EDX,DWORD PTR SS:             ; 把试练码送给EDX
004AA85F    0FB652 01       MOVZX EDX,BYTE PTR DS:            ; 取试练码第2位ASCII值给EDX
004AA863    03C2            ADD EAX,EDX                              ; EAX=EAX+EDX
004AA865    2D 90000000   SUB EAX,90                               ; EAX=EAX-90
004AA86A    B9 0A000000   MOV ECX,0A                               ; ECX=0A
004AA86F    99            CDQ                                    ; EDX清零
004AA870    F7F9            IDIV ECX                                 ; EAX除以ECX,商送给EAX,余数送给EDX
004AA872    8B45 FC         MOV EAX,DWORD PTR SS:             ; 把试练码送给EAX
004AA875    0FB640 03       MOVZX EAX,BYTE PTR DS:            ; 取试练码第4位ASCII值给EAX
004AA879    83E8 30         SUB EAX,30                               ; EAX=EAX-30
004AA87C    3BD0            CMP EDX,EAX                              ; 上面相除后的余数和EAX的值比较
004AA87E    75 0B         JNZ SHORT cdextrac.004AA88B            ; 不相等就GAME OVER
004AA880    8B45 FC         MOV EAX,DWORD PTR SS:             ; 把试练码送给EAX
004AA883    8078 02 35      CMP BYTE PTR DS:,35               ; 试练码第3位ASCII值和35h比较
004AA887    76 02         JBE SHORT cdextrac.004AA88B            ; 第3位ASCII值低于等于35h就GAME OVER
004AA889    B3 01         MOV BL,1                                 ; 注册码错误BL=0,注册码正解则BL=1
004AA88B    33C0            XOR EAX,EAX                              ; EAX清零
004AA88D    5A            POP EDX

--------------------------------------------------------------------------------
【经验总结】
易语言注册机源码:
.版本 2

.局部变量 容器
.局部变量 容器2
.局部变量 容器3
.局部变量 容器4
.局部变量 容器5
.局部变量 临时容器
.局部变量 i

.判断开始 (编辑框2.内容 = “”)
      编辑框2.内容 = “请输入用户名!”
.默认
      置随机数种子 (取启动时间 ())
      .变量循环首 (1, 1000, 1, i)
          容器 = 取随机数 (49, 57)
          容器5 = 取随机数 (49, 57)
          临时容器 = 容器 + 容器5 - 96
          .判断开始 (临时容器 > 8)
            容器2 = 取随机数 (49, 57)
            临时容器 = 容器 + 容器5 + 容器2 - 144
            临时容器 = 临时容器 % 10
            容器4 = 临时容器 + 48
            容器3 = 取随机数 (54, 57)
            跳出循环 ()
          .默认

          .判断结束

      .变量循环尾 ()
      编辑框3.内容 = 字符 (容器) + 字符 (容器2) + 字符 (容器3) + 字符 (容器4) + 字符 (容器5) + 到文本 (
取随机数 (1, 9999999))

--------------------------------------------------------------------------------
【版权声明】: 本文原创于絕戀de煩神, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年11月04日 14:19:37

qifeon 发表于 2008-11-6 21:28:42

好贴是要顶的。/:good
页: [1]
查看完整版本: CD Audio MP3 Converter 3.0算法分析