- UID
- 2
注册时间2004-12-1
阅读权限255
最后登录1970-1-1
总坛主
TA的每日心情 | 开心 2024-12-1 11:04 |
---|
签到天数: 12 天 [LV.3]偶尔看看II
|
客户王 8.1.6.103 企业版 破解(3)[算法分析]
【破文标题】客户王 8.1.6.103 企业版 算法 分析
【破文作者】飘云[PYG]
【破解工具】PEID0.94,[PYG]OD,AspackDie
【破解平台】WinXp
【作者主页】https://www.chinapyg.com
【作者邮箱】[email protected]
【软件名称】客户王 8.1.6.103 企业版
【原版下载】http://hn.onlinedown.net/soft/38499.htm
【软件简介】一个现代化的企业,对于客户资源的关注,已经成为决定企业长久发展的基础。《客户王》客
户资源管理系统将整个企业的客户关系统一管理,并且通过不同的权限设定,来区别每个角色对资
源的操作范围。有了良好的客户数据基础,即使销售人员的变动,客户资料也能够一目了然
.
.
.
【破解分析】
1.脱壳+去自效验:https://www.chinapyg.com/viewthread.php?tid=2967&extra=page%3D1
2.主程序破解:https://www.chinapyg.com/viewthread.php?tid=2971&extra=page%3D1
这里直接入题:
0090E3F4 55 push ebp
0090E3F5 8BEC mov ebp,esp
0090E3F7 83C4 F0 add esp,-10
0090E3FA 53 push ebx
0090E3FB 33C0 xor eax,eax
0090E3FD 8945 FC mov dword ptr ss:[ebp-4],eax
0090E400 33C0 xor eax,eax
0090E402 55 push ebp
0090E403 68 7FE49000 push unpacked.0090E47F
0090E408 64:FF30 push dword ptr fs:[eax]
0090E40B 64:8920 mov dword ptr fs:[eax],esp
0090E40E A1 88F89300 mov eax,dword ptr ds:[93F888>
0090E413 8378 20 00 cmp dword ptr ds:[eax+20],0
0090E417 75 04 jnz short unpacked.0090E41D
0090E419 33DB xor ebx,ebx
0090E41B EB 4C jmp short unpacked.0090E469
0090E41D A1 88F89300 mov eax,dword ptr ds:[93F888>
0090E422 8B40 48 mov eax,dword ptr ds:[eax+48>; 用户代码
0090E425 E8 CA7BFFFF call unpacked.00905FF4 ; 算法call F7 进入
0090E42A D80D 90E49000 fmul dword ptr ds:[90E490] ; ×7224
0090E430 DB7D F0 fstp tbyte ptr ss:[ebp-10]
0090E433 9B wait
0090E434 A1 88F89300 mov eax,dword ptr ds:[93F888>
0090E439 8B40 4C mov eax,dword ptr ds:[eax+4C>; 经过连接之后的软件序列号
0090E43C E8 B37BFFFF call unpacked.00905FF4 ; 算法call 和前面的是同一call 不必分析了
0090E441 DB6D F0 fld tbyte ptr ss:[ebp-10]
0090E444 DEC1 faddp st(1),st ; 将前面计算的两个结果相加
0090E446 83C4 F4 add esp,-0C
0090E449 DB3C24 fstp tbyte ptr ss:[esp]
0090E44C 9B wait
0090E44D 8D45 FC lea eax,dword ptr ss:[ebp-4]
0090E450 E8 DBE7AFFF call unpacked.0040CC30 ; 取上面两个相加的和的前12位,并四舍五入运算。
0090E455 8B45 FC mov eax,dword ptr ss:[ebp-4] ; 上面CALL不要跟踪了,直接看返回值就知道
0090E458 8B15 88F89300 mov edx,dword ptr ds:[93F888>; unpacked.00944820
0090E45E 8B52 50 mov edx,dword ptr ds:[edx+50>
0090E461 E8 9672AFFF call unpacked.004056FC ; 在这里已经是明码比较了
0090E466 0F94C3 sete bl
0090E469 33C0 xor eax,eax
0090E46B 5A pop edx
0090E46C 59 pop ecx
0090E46D 59 pop ecx
0090E46E 64:8910 mov dword ptr fs:[eax],edx
0090E471 68 86E49000 push unpacked.0090E486
0090E476 8D45 FC lea eax,dword ptr ss:[ebp-4]
0090E479 E8 626EAFFF call unpacked.004052E0
0090E47E C3 retn
****************************************call unpacked.00905FF4*****************************************
00905FF4 55 push ebp
00905FF5 8BEC mov ebp,esp
00905FF7 83C4 EC add esp,-14
00905FFA 8945 FC mov dword ptr ss:[ebp-4],eax
00905FFD 8B45 FC mov eax,dword ptr ss:[ebp-4]
00906000 E8 9BF7AFFF call unpacked.004057A0
00906005 33C0 xor eax,eax
00906007 55 push ebp
00906008 68 7A609000 push unpacked.0090607A
0090600D 64:FF30 push dword ptr fs:[eax]
00906010 64:8920 mov dword ptr fs:[eax],esp
00906013 C745 F0 00000080 mov dword ptr ss:[ebp-10],80000000>
0090601A C745 F4 DCDA7241 mov dword ptr ss:[ebp-C],4172DADC>
00906021 837D FC 00 cmp dword ptr ss:[ebp-4],0 ; 比较是否有输入?
00906025 74 35 je short unpacked.0090605C
00906027 8B45 FC mov eax,dword ptr ss:[ebp-4]
0090602A E8 81F5AFFF call unpacked.004055B0 ; 取长度
0090602F 85C0 test eax,eax
00906031 7E 31 jle short unpacked.00906064
00906033 BA 01000000 mov edx,1
00906038 8B4D FC mov ecx,dword ptr ss:[ebp-4]
0090603B 0FB64C11 FF movzx ecx,byte ptr ds:[ecx+e>; 逐位取ascii送ecx
00906040 0FB7C9 movzx ecx,cx ; ECX低位移到CX
00906043 894D EC mov dword ptr ss:[ebp-14],ec>; 存放到[EBP-14]
00906046 DB45 EC fild dword ptr ss:[ebp-14] ; 将上面取的的ascii转换成十进制数放到st(0)
00906049 DC45 F0 fadd qword ptr ss:[ebp-10] ; 第一次循环时 这里和常数 19770824 相加 保存到st(0),第二次的
[EBP-10]值由后面代码赋值
0090604C D805 88609000 fadd dword ptr ds:[906088] ; 又和常数 722402 相加 保存到st(0)
00906052 DD5D F0 fstp qword ptr ss:[ebp-10] ; 什么的和保存到[EBP-10]
00906055 9B wait
00906056 42 inc edx
00906057 48 dec eax
00906058 ^ 75 DE jnz short unpacked.00906038 ; 循环
0090605A EB 08 jmp short unpacked.00906064
0090605C 33C0 xor eax,eax
0090605E 8945 F0 mov dword ptr ss:[ebp-10],ea>
00906061 8945 F4 mov dword ptr ss:[ebp-C],eax
00906064 33C0 xor eax,eax
00906066 5A pop edx
00906067 59 pop ecx
00906068 59 pop ecx
00906069 64:8910 mov dword ptr fs:[eax],edx
0090606C 68 81609000 push unpacked.00906081
00906071 8D45 FC lea eax,dword ptr ss:[ebp-4]
00906074 E8 67F2AFFF call unpacked.004052E0
00906079 C3 retn
【算法总结】
不是很复杂,懒得总结了,自己看吧 嘿嘿~~
【算法注册机】
Dim code1, code2 As String
Dim reg, sum1, sum2 As Double
Const str1 = 19770824
Const str2 = 722402
Const str3 = 7224
code1 = Text1.Text
code2 = Text2.Text
sum1 = str1
sum2 = str1
If code1 <> "" And code2 <> "" Then
If Len(code2) < 32 Then
MsgBox "序列号需32位!建议用默认字符串!", 64, "提示"
Exit Sub
End If
'计算开始
For I = 1 To Len(code1)
sum1 = sum1 + Asc(Mid(code1, I, 1))
sum1 = sum1 + str2
Next
'Text3.Text = sum1
sum1 = sum1 * str3
For I = 1 To Len(code2)
sum2 = sum2 + Asc(Mid(code2, I, 1))
sum2 = sum2 + str2
Next
reg = sum1 + sum2
Text3.Text = reg
Else:
Text3.Text = "请输入完整信息!"
End If
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢! |
|