您的位置:首页精文荟萃破解文章 → 光盘卫士 V1.8算法分析

光盘卫士 V1.8算法分析

时间:2004/10/15 0:57:00来源:本站整理作者:蓝点我要评论(0)

 

破解对象:光盘卫士 V1.8
软件简介
———————————————————————————————
你有没有不想让别人在你电脑中使用光盘,或只希望运行某些光
盘,或禁止某些光盘在您的光驱中运行,光盘卫士完全满足您的需要,
而且它还支持多光驱.更重要的它是一款绿色软件,无需安装,拷贝即
可。


授权方式: 共享


下载地址: http://jshttp.skycn.net/down/cdsafe.exe
http://www.skycn.com/soft/4913.html


———————————————————————————————


破解目的:获得注册码,做出注册机。


破解工具:fi2.5 unaspack 1.0.9.1 W32DASM10中文版 ollydbg1.07 tc2.0



破解过程:


1。用FI2.5检查程序的壳,是ASPack v2.001,用unaspack 1.0.9.1脱壳。


2.先熟悉一下程序,调出注册界面,用户名输入shifeng,注册号输入87654321,点注册,弹出注册码错误。


3.用W32DASM10打开脱壳后的文件,"参考"--"串式数据参考",查处"注册码不正确",双击,只有一处。
来到下面:


:0046F0FB E80097FBFF call 00428800
:0046F100 8B4DF8 mov ecx, dword ptr [ebp-08] 用户名
:0046F103 BAF5250000 mov edx, 000025F5 注意此常数
:0046F108 8B83F4020000 mov eax, dword ptr [ebx+000002F4]
:0046F10E E825ECFDFF call 0044DD38 很明显,关键call
:0046F113 84C0 test al, al
:0046F115 0F84BE000000 je 0046F1D9


* Possible StringData Ref from Code Obj ->"user"
|
:0046F11B 6868F24600 push 0046F268
:0046F120 8D55F0 lea edx, dword ptr [ebp-10]
4.为方便调试,启动ollydbg,CTRL+G输入472131,往上走一点,在004720EA行,F2在此下断点。F9运行程序
进入注册界面,用户名输入shifeng,注册号输入87654321,点注册,中断。F8几次,进入关键调用:


:0044DD38 55 push ebp
:0044DD39 8BEC mov ebp, esp
:0044DD3B 83C4F8 add esp, FFFFFFF8
:0044DD3E 53 push ebx
:0044DD3F 56 push esi
:0044DD40 33DB xor ebx, ebx
:0044DD42 895DF8 mov dword ptr [ebp-08], ebx
:0044DD45 894DFC mov dword ptr [ebp-04], ecx
:0044DD48 8BF2 mov esi, edx 把上面的常数25F5送到ESI
:0044DD4A 8BD8 mov ebx, eax
:0044DD4C 8B45FC mov eax, dword ptr [ebp-04]
:0044DD4F E89061FBFF call 00403EE4
:0044DD54 8B4508 mov eax, dword ptr [ebp+08]
:0044DD57 E88861FBFF call 00403EE4
:0044DD5C 33C0 xor eax, eax
:0044DD5E 55 push ebp
:0044DD5F 68BFDD4400 push 0044DDBF
:0044DD64 64FF30 push dword ptr fs:[eax]
:0044DD67 648920 mov dword ptr fs:[eax], esp
:0044DD6A 837DFC00 cmp dword ptr [ebp-04], 00000000
:0044DD6E 7504 jne 0044DD74 用户名没写,不跳,则死
:0044DD70 33DB xor ebx, ebx
:0044DD72 EB28 jmp 0044DD9C


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044DD6E(C)
|
:0044DD74 85F6 test esi, esi
:0044DD76 7504 jne 0044DD7C
:0044DD78 33DB xor ebx, ebx
:0044DD7A EB20 jmp 0044DD9C


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044DD76(C)
|
:0044DD7C 8D45F8 lea eax, dword ptr [ebp-08]
:0044DD7F 50 push eax
:0044DD80 8B4DFC mov ecx, dword ptr [ebp-04]
:0044DD83 8BD6 mov edx, esi
:0044DD85 8BC3 mov eax, ebx
:0044DD87 E880FEFFFF call 0044DC0C 计算注册码,关键调用
:0044DD8C 8B55F8 mov edx, dword ptr [ebp-08] 可看到正确注册码
:0044DD8F 8B4508 mov eax, dword ptr [ebp+08]
:0044DD92 E8A960FBFF call 00403E40
:0044DD97 0F94C0 sete al
:0044DD9A 8BD8 mov ebx, eax


* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0044DD72(U), :0044DD7A(U)
|
:0044DD9C 33C0 xor eax, eax
:0044DD9E 5A pop edx


5.F7跟进上面所提的调用,来到下面:


:0044DC0C 55 push ebp
:0044DC0D 8BEC mov ebp, esp
:0044DC0F 6A00 push 00000000
:0044DC11 6A00 push 00000000
:0044DC13 6A00 push 00000000
:0044DC15 6A00 push 00000000
:0044DC17 6A00 push 00000000
:0044DC19 53 push ebx
:0044DC1A 56 push esi
:0044DC1B 894DFC mov dword ptr [ebp-04], ecx
:0044DC1E 8BF2 mov esi, edx
:0044DC20 8B45FC mov eax, dword ptr [ebp-04]
:0044DC23 E8BC62FBFF call 00403EE4
:0044DC28 33C0 xor eax, eax
:0044DC2A 55 push ebp
:0044DC2B 680ADD4400 push 0044DD0A
:0044DC30 64FF30 push dword ptr fs:[eax]
:0044DC33 648920 mov dword ptr fs:[eax], esp
:0044DC36 8D45F8 lea eax, dword ptr [ebp-08]


* Possible StringData Ref from Code Obj ->"Error"
|
:0044DC39 BA24DD4400 mov edx, 0044DD24
:0044DC3E E8055FFBFF call 00403B48
:0044DC43 85F6 test esi, esi
:0044DC45 0F8499000000 je 0044DCE4
:0044DC4B 837DFC00 cmp dword ptr [ebp-04], 00000000
:0044DC4F 0F848F000000 je 0044DCE4
:0044DC55 8B45FC mov eax, dword ptr [ebp-04]
:0044DC58 E8D360FBFF call 00403D30 得到用户名长度
:0044DC5D 8BD8 mov ebx, eax 注册码第一部分开始计算
:0044DC5F 0FAFDE imul ebx, esi 用户名长度*25F5+用户名第一字符*29A
:0044DC62 8B45FC mov eax, dword ptr [ebp-04]
:0044DC65 0FB600 movzx eax, byte ptr [eax]
:0044DC68 69C09A020000 imul eax, 0000029A
:0044DC6E 03D8 add ebx, eax
:0044DC70 8D55F4 lea edx, dword ptr [ebp-0C]
:0044DC73 8BC3 mov eax, ebx
:0044DC75 E88AA3FBFF call 00408004 转10进制形式,得到注册码三部分的第一部分
:0044DC7A 8B55F4 mov edx, dword ptr [ebp-0C]
:0044DC7D 8D45F8 lea eax, dword ptr [ebp-08]
:0044DC80 B934DD4400 mov ecx, 0044DD34
:0044DC85 E8F260FBFF call 00403D7C 生成-
:0044DC8A 8B45FC mov eax, dword ptr [ebp-04] 注册码第二部分开始计算
:0044DC8D 0FB600 movzx eax, byte ptr [eax]
:0044DC90 F7EE imul esi 用户名第一字符*25F5*7B
:0044DC92 6BD87B imul ebx, eax, 0000007B
:0044DC95 FF75F8 push [ebp-08]
:0044DC98 8D55F0 lea edx, dword ptr [ebp-10]
:0044DC9B 8BC3 mov eax, ebx
:0044DC9D E862A3FBFF call 00408004 转10进制形式,得到第二部分
:0044DCA2 FF75F0 push [ebp-10]
:0044DCA5 6834DD4400 push 0044DD34
:0044DCAA 8D45F8 lea eax, dword ptr [ebp-08]
:0044DCAD BA03000000 mov edx, 00000003
:0044DCB2 E83961FBFF call 00403DF0 生成-
:0044DCB7 8B45FC mov eax, dword ptr [ebp-04]
:0044DCBA E87160FBFF call 00403D30 第三部分开始计算
:0044DCBF 8B55FC mov edx, dword ptr [ebp-04]
:0044DCC2 0FB612 movzx edx, byte ptr [edx]
:0044DCC5 F7EA imul edx 用户名第一字符*用户名长度*19D5
:0044DCC7 69D8D5190000 imul ebx, eax, 000019D5
:0044DCCD 03DE add ebx, esi 再加上25F5
:0044DCCF 8D55EC lea edx, dword ptr [ebp-14]
:0044DCD2 8BC3 mov eax, ebx
:0044DCD4 E82BA3FBFF call 00408004 转10进制形式,得到第三部分
:0044DCD9 8B55EC mov edx, dword ptr [ebp-14]
:0044DCDC 8D45F8 lea eax, dword ptr [ebp-08]
:0044DCDF E85460FBFF call 00403D38 与前部分合成到一起


* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0044DC45(C), :0044DC4F(C)
|
:0044DCE4 8B4508 mov eax, dword ptr [ebp+08]
:0044DCE7 8B55F8 mov edx, dword ptr [ebp-08]
:0044DCEA E8155EFBFF call 00403B04
:0044DCEF 33C0 xor eax, eax
:0044DCF1 5A pop edx
:0044DCF2 59 pop ecx
:0044DCF3 59 pop ecx
:0044DCF4 648910 mov dword ptr fs:[eax], edx
:0044DCF7 6811DD4400 push 0044DD11


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044DD0F(U)
|
:0044DCFC 8D45EC lea eax, dword ptr [ebp-14]
:0044DCFF BA05000000 mov edx, 00000005
:0044DD04 E8CB5DFBFF call 00403AD4
:0044DD09 C3 ret


 


6.相应TC注册机源码:


#include "string.h"
main()
{
unsigned long lens,x,sn1,sn2,sn3;
char str[60];
clrscr();
printf("\n\n\n**********************************************************\n");
printf(" 光盘卫士 V1.8 注册机\n");
printf(" 作者: 北极熊[DFCG] ( 2002/11/6 )\n");
printf("**********************************************************\n\n");
printf("请输入你的姓名 : ");
gets(str);
lens=strlen(str);
if (str[0]>0) x=str[0];
else x=255-(0xffffffff-str[0]);
sn1=lens*0x25f5+x*0x29a;
sn2=x*0x25f5*0x7b;
sn3=x*lens*0x19d5+0x25f5;
printf("\n你的序列号为:");
printf("%ld-%ld-%ld\n",sn1,sn2,sn3);
}


 


vb源代码:
Private Sub Command1_Click()
a = Text1.Text
b = Len(a)
c = Val(Asc(Mid(a, 1, 1)))
code1 = b * &H25F5 + c * &H29A
code2 = c * &H25F5 * &H7B
code3 = b * c * &H19D5 + &H25F5
code = code1 & "-" & code2 & "-" & code3
Text2.Text = code
End Sub


Private Sub Command2_Click()
End
End Sub


    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程