| 
注册时间2004-12-1
阅读权限255
最后登录1970-1-1UID2 总坛主   
 
 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
 
 【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!
 | 
 |