飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2894|回复: 1

[原创] CD Audio MP3 Converter 3.0算法分析

[复制链接]
  • TA的每日心情
    开心
    2020-8-30 18:31
  • 签到天数: 52 天

    [LV.5]常住居民I

    发表于 2008-11-4 14:22:09 | 显示全部楼层 |阅读模式
    【文章标题】: CD Audio MP3 Converter 3.0算法分析
    【文章作者】: iouken/絕戀de煩神
    【作者邮箱】: sos_ftp@yahoo.com.cn
    【作者主页】: 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:[EAX]
      004E19FA    64:8920         MOV DWORD PTR FS:[EAX],ESP
      004E19FD    8D55 FC         LEA EDX,DWORD PTR SS:[EBP-4]
      004E1A00    8B83 44030000   MOV EAX,DWORD PTR DS:[EBX+344]
      004E1A06    E8 4D1CF8FF     CALL cdextrac.00463658                   ; 取试练码长度
      004E1A0B    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]             ; 把试练码送给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:[EBP-4]             ; 把试练码送给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:[EBP-4]             ; 把试练码送给EAX
      004AA843    33C9            XOR ECX,ECX                              ; ECX清零
      004AA845    8A08            MOV CL,BYTE PTR DS:[EAX]                 ; 取试练码第1位ASCII值给CL
      004AA847    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]             ; 把试练码送给EAX
      004AA84A    0FB640 04       MOVZX EAX,BYTE PTR DS:[EAX+4]            ; 取试练码第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:[EBP-4]             ; 把试练码送给EDX
      004AA85F    0FB652 01       MOVZX EDX,BYTE PTR DS:[EDX+1]            ; 取试练码第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:[EBP-4]             ; 把试练码送给EAX
      004AA875    0FB640 03       MOVZX EAX,BYTE PTR DS:[EAX+3]            ; 取试练码第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:[EBP-4]             ; 把试练码送给EAX
      004AA883    8078 02 35      CMP BYTE PTR DS:[EAX+2],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

    评分

    参与人数 1飘云币 +40 收起 理由
    tianxj + 40 您发布的主题属于精品!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-12-18 12:34
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2008-11-6 21:28:42 | 显示全部楼层
    好贴是要顶的。/:good
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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