- 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 |
评分
-
查看全部评分
|