- UID
 - 30436
 
 注册时间2007-4-1
阅读权限30
最后登录1970-1-1
龙战于野 
  
 
 
 
TA的每日心情  | 开心 2020-8-30 18:31 | 
|---|
 
  签到天数: 52 天 [LV.5]常住居民I  
 | 
 
【文章标题】: 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:[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 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |