题 目:菜鸟获取Talisman Desktop 2.3 注册码 (build 2304)
软件功能:
Windows 95/98/NT/2000/XP的桌面管理软件和外壳程序。它可以把标准桌面隐藏起来,它有自己的启动按钮
,系统托盘,任务栏和启动菜单等。你可以在这个Talisman桌面环境内建立任意多的对象类型,绑定任意内部
Talisman命令或者运行任何程序,可以添加背景图片,事件声音,所有设置都保存在一个方案内,当然可以建
立多个方案咯。总之功能还是不错的,去试试就知道了。
破解目的:算出注册码,解除30天试用限制。
算法强度:弱
适合水平:菜鸟练手
使用工具:TRW,FI
引 子:
今天受到6767的1.76版的启发,刚好我的《电脑爱好者2002》合订本光盘内有这个软件的2.3版本的。我
正好可以拿来练手,不到20分钟就搞定,然后用了30分钟写了这篇破文,耽误您宝贵时间阅读此文,希望对菜
鸟有丁点的帮助和裨益!!菜鸟就是通过不断积累经验,勤学苦练,然后变成“老鸟”就是大侠了。下面就开
始啦:)
先用FI查看一下这个程序有没有“甲克”,把这个程序复制进FI的目录,双击FI打开一个DOS窗口,然后
按ENTER键即可显示结果了,还好,这个软件比较友善,没有带壳,用DELPHI开发的。现在双击运行这个
Talisman,当然原来的桌面被这个新桌面替换了,单击它的左下角的[开始]按钮,单击注册命令弹出一个窗口
,输入用户名bigpig,注册码78787878,我跟看雪论坛的大侠学的这个注册码。;) Ctrl+N 唤出TRW,下万
能断点 bpx hmemcpy,pmodule返回主程序领空,bd* 屏蔽所有断点,因为离真正的代码处还有些距离,要
按一阵子F10,你就发现来到如下代码处:
0167:0047B58F 837DF400 CMP DWORD [EBP-0C],BYTE +00 //比较注册码是否为0,如
果是则OVER
0167:0047B593 0F8460010000 JZ NEAR 0047B6F9
0167:0047B599 8D55F0 LEA EDX,[EBP-10]
0167:0047B59C 8B83E4020000 MOV EAX,[EBX+02E4]
0167:0047B5A2 E8F1FAFAFF CALL 0042B098
0167:0047B5A7 837DF000 CMP DWORD [EBP-10],BYTE +00
0167:0047B5AB 0F8448010000 JZ NEAR 0047B6F9
0167:0047B5B1 8D55F4 LEA EDX,[EBP-0C]
0167:0047B5B4 8B83E0020000 MOV EAX,[EBX+02E0]
0167:0047B5BA E8D9FAFAFF CALL 0042B098
0167:0047B5BF 8B45F4 MOV EAX,[EBP-0C]
0167:0047B5C2 E8F1CBF8FF CALL 004081B8 //F8跟进去,发现把输入的注册码变
换为16进制数78787878->4b23526
0167:0047B5C7 8945EC MOV [EBP-14],EAX //这个16进制数就在EAX内
0167:0047B5CA DB45EC FILD DWORD [EBP-14] //浮点指令, [EBP-14] 内容进栈
。
0167:0047B5CD E8EE73F8FF CALL 004029C0
0167:0047B5D2 8945FC MOV [EBP-04],EAX
0167:0047B5D5 8D55F8 LEA EDX,[EBP-08]
0167:0047B5D8 8B83E4020000 MOV EAX,[EBX+02E4]
0167:0047B5DE E8B5FAFAFF CALL 0042B098 //取用户名长度,如bigpig就是6
0167:0047B5E3 33F6 XOR ESI,ESI
0167:0047B5E5 8B45F8 MOV EAX,[EBP-08]
0167:0047B5E8 E82787F8FF CALL 00403D14
0167:0047B5ED 85C0 TEST EAX,EAX
0167:0047B5EF 7E13 JNG 0047B604
0167:0047B5F1 BA01000000 MOV EDX,01 //从这里到47B602就是计算把用户名
的ASIICI码依次求和,送ESI,bigpig的和值为272H
0167:0047B5F6 8B4DF8 MOV ECX,[EBP-08]
0167:0047B5F9 0FB64C11FF MOVZX ECX,BYTE [ECX+EDX-01]
0167:0047B5FE 03F1 ADD ESI,ECX
0167:0047B600 42 INC EDX
0167:0047B601 48 DEC EAX
0167:0047B602 75F2 JNZ 0047B5F6
0167:0047B604 8975EC MOV [EBP-14],ESI //保存和值
0167:0047B607 DB45EC FILD DWORD [EBP-14] //浮点指令, [EBP-14] 内容进栈。
0167:0047B60A E8B173F8FF CALL 004029C0 //把结果送EAX
0167:0047B60F 69C009030000 IMUL EAX,EAX,0309 //该命令格式不要被迷惑,实际很简单,就
是EAX=EAX*309H,现在EAX=76C02,十进制为486402
0167:0047B615 8BF0 MOV ESI,EAX //送回ESI
0167:0047B617 3B75FC CMP ESI,[EBP-04] //比较从用户名计算的值和假注册码运
算结果,当然一致就PASS,否则就OVER。
0167:0047B61A 0F85BF000000 JNZ NEAR 0047B6DF //如果跳就完
//下面代码都是把你的用户名等信息写入注册表内。HU\.Default\Software\Lighttek\Talisman
0167:0047B620 B201 MOV DL,01
0167:0047B622 A198F04400 MOV EAX,[0044F098]
0167:0047B627 E8AC3BFDFF CALL 0044F1D8
0167:0047B62C 8BF0 MOV ESI,EAX
0167:0047B62E B101 MOV CL,01
0167:0047B630 BA3CB74700 MOV EDX,0047B73C
0167:0047B635 8BC6 MOV EAX,ESI
0167:0047B637 E8983CFDFF CALL 0044F2D4
*
*节省空间和时间,这里略去10几行指令
*
0167:0047B66F 8945EC MOV [EBP-14],EAX
0167:0047B672 DB45EC FILD DWORD [EBP-14]
0167:0047B675 83C4F8 ADD ESP,BYTE -08
0167:0047B678 DD1C24 FSTP QWORD [ESP] //浮点保存指令,把栈顶临时浮点数弹出到
ST(0),然后变为整数保存到目标地址[ESP]。
0167:0047B67B 9B WAIT
0167:0047B67C BA74B74700 MOV EDX,0047B774
*
*节省空间和时间,这里略去10几行指令
*
0167:0047B6C2 BA2C010000 MOV EDX,012C
0167:0047B6C7 A138A94900 MOV EAX,[0049A938]
0167:0047B6CC E8F7F1FAFF CALL 0042A8C8
0167:0047B6D1 A1B49C4900 MOV EAX,[00499CB4]
0167:0047B6D6 8B00 MOV EAX,[EAX]
0167:0047B6D8 33D2 XOR EDX,EDX
0167:0047B6DA 89500C MOV [EAX+0C],EDX
0167:0047B6DD EB1A JMP SHORT 0047B6F9
//前面0047B61A处如果不为0,则跳到这里,出现错误提示窗口!!
0167:0047B6DF B201 MOV DL,01
0167:0047B6E1 8B83FC020000 MOV EAX,[EBX+02FC]
0167:0047B6E7 E8C4F8FAFF CALL 0042AFB0
0167:0047B6EC B201 MOV DL,01
0167:0047B6EE 8B8300030000 MOV EAX,[EBX+0300]
0167:0047B6F4 E87FF8FCFF CALL 0044AF78
//:0047B6DD处的JMP跳到这里,Congratulation!!
0167:0047B6F9 33C0 XOR EAX,EAX
0167:0047B6FB 5A POP EDX
0167:0047B6FC 59 POP ECX
0167:0047B6FD 59 POP ECX
0167:0047B6FE 648910 MOV [FS:EAX],EDX
0167:0047B701 682BB74700 PUSH DWORD 0047B72B
0167:0047B706 8D45E8 LEA EAX,[EBP-18]
0167:0047B709 E88A83F8FF CALL 00403A98
0167:0047B70E 8D45F0 LEA EAX,[EBP-10]
0167:0047B711 BA02000000 MOV EDX,02
0167:0047B716 E8A183F8FF CALL 00403ABC
0167:0047B71B 8D45F8 LEA EAX,[EBP-08]
0167:0047B71E E87583F8FF CALL 00403A98
=========================================
后记:
这个小程序用了20分钟就搞定,我认为高手大概3分钟就搞定,谁让我是菜鸟呢?然后用30分钟写了这个教程
。这个软件的保护力度竟然连许多Crackeme程序都不如。不知这个作者怎么想的???正好给菜鸟练手了!
总结:这个算法实在简单:
(用户名的ASCII码之和)*309H->变成16进制数即可。
如:bigpig的ASCII码和=62h+69h+67h+70h+69h+67h=272h->十进制486402
所以结果为:
bigpig
486402
另外:0047B60F处的IMUL EAX,EAX,0309 格式的功能是EAX*309->EAX
(1) (2) (2)
(1)
任何建议Emailto: qduwg@163.com
感谢:看雪大侠的鼓励!
[课程]Android-CTF解题方法汇总!