- UID
- 2
注册时间2004-12-1
阅读权限255
最后登录1970-1-1
总坛主
TA的每日心情 | 开心 2024-12-1 11:04 |
---|
签到天数: 12 天 [LV.3]偶尔看看II
|
【破文标题】跑的快 V1.2 算法分析
【破文作者】飘云[P.Y.G]
【作者主页】https://www.chinapyg.com
【破解平台】WinXp
【破解工具】PEiD0.94、OllyDbg
【作者邮箱】[email protected]
【软件名称】跑的快 V1.2
【软件大小】1722 K
【原版下载】http://download.enet.com.cn/html/080592004040601.html
【软件简介】易于上手的类似于争上游的一款扑克游戏,有非常强的娱乐性,强烈推荐下载试用。
【破解过程】
PEID0.94探测-->无壳-->Microsoft Visual Basic 5.0 / 6.0
运行程序,输入注册信息,没有反映,,界面上说明要重新运行程序才能有效~~~
典型的重启验证,,我们用断点 __vbaStrCopy 看看程序把注册信息保存在哪?~
OD 载入,bp __vbaStrCopy
堆栈:
0012EC7C 00616A49 返回到 跑的快1_.00616A49 来自 MSVBVM60.__vbaStrCopy
现在ALT + F9 返回~
我们看到寄存器窗口如下:
EAX 00161EEC UNICODE "C:\WINDOWS\system32\mibs.bin"
ECX 00000000
EDX 00161EEC UNICODE "C:\WINDOWS\system32\mibs.bin"
有上面信息足够了,,利用插件搜索 UNICODE码 找到如下关键:
004CDB00 push ebp
004CDB01 mov ebp, esp
004CDB03 sub esp, 18
004CDB06 push <jmp.&MSVBVM60.__vbaExceptHandler> ; SE 处理程序安装
004CDB0B mov eax, dword ptr fs:[0]
004CDB11 push eax
004CDB12 mov dword ptr fs:[0], esp
004CDB19 mov eax, 294
004CDB1E call <jmp.&MSVBVM60.__vbaChkstk>
004CDB23 push ebx
004CDB24 push esi
004CDB25 push edi
004CDB26 mov dword ptr [ebp-18], esp
004CDB29 mov dword ptr [ebp-14], 00401210
004CDB30 mov eax, dword ptr [ebp+8]
004CDB33 and eax, 1
004CDB36 mov dword ptr [ebp-10], eax
004CDB39 mov ecx, dword ptr [ebp+8]
004CDB3C and ecx, FFFFFFFE
004CDB3F mov dword ptr [ebp+8], ecx
004CDB42 mov dword ptr [ebp-C], 0
004CDB49 mov edx, dword ptr [ebp+8]
004CDB4C mov eax, dword ptr [edx]
004CDB4E mov ecx, dword ptr [ebp+8]
004CDB51 push ecx
004CDB52 call dword ptr [eax+4]
.
.
.省略一大堆~~~
004CDE97 call dword ptr [<&MSVBVM60.__vbaSetSystemErr>; MSVBVM60.__vbaSetSystemError
004CDE9D mov dword ptr [ebp-4], 0B
004CDEA4 mov edx, dword ptr [ebp+8]
004CDEA7 mov word ptr [edx+1E0], 0
004CDEB0 mov dword ptr [ebp-4], 0C
004CDEB7 mov edx, 0046D0D4 ; c:\windows\system32\mibs.bin //★定位到这里开始分析~~~
004CDEBC lea ecx, dword ptr [ebp-58]
004CDEBF call dword ptr [<&MSVBVM60.__vbaStrCopy>] ; MSVBVM60.__vbaStrCopy
004CDEC5 mov dword ptr [ebp-4], 0D
004CDECC mov edx, 0046D114 ; set.bin
004CDED1 lea ecx, dword ptr [ebp-60]
004CDED4 call dword ptr [<&MSVBVM60.__vbaStrCopy>] ; MSVBVM60.__vbaStrCopy
004CDEDA mov dword ptr [ebp-4], 0E
004CDEE1 mov eax, dword ptr [ebp-60]
004CDEE4 push eax
004CDEE5 push 2
004CDEE7 push 0E
004CDEE9 push 4
004CDEEB call dword ptr [<&MSVBVM60.__vbaFileOpen>] ; MSVBVM60.__vbaFileOpen
004CDEF1 mov dword ptr [ebp-4], 0F
004CDEF8 push 2
004CDEFA push 1
004CDEFC push 0061C020
004CDF01 push 0046D128
004CDF06 call dword ptr [<&MSVBVM60.__vbaGetOwner4>] ; MSVBVM60.__vbaGetOwner4
004CDF0C mov dword ptr [ebp-4], 10
004CDF13 mov ecx, dword ptr [ebp+8]
004CDF16 mov dx, word ptr [61C020]
004CDF1D mov word ptr [ecx+54], dx
004CDF21 mov dword ptr [ebp-4], 11
004CDF28 mov eax, dword ptr [ebp+8]
004CDF2B mov cx, word ptr [61C022]
004CDF32 mov word ptr [eax+56], cx
004CDF36 mov dword ptr [ebp-4], 12
004CDF3D mov edx, dword ptr [ebp+8]
004CDF40 mov eax, dword ptr [61C024]
004CDF45 mov dword ptr [edx+58], eax
004CDF48 mov dword ptr [ebp-4], 13
004CDF4F mov ecx, dword ptr [ebp+8]
004CDF52 mov dx, word ptr [61C028]
004CDF59 mov word ptr [ecx+5C], dx
004CDF5D mov dword ptr [ebp-4], 14
004CDF64 mov eax, dword ptr [ebp+8]
004CDF67 mov cx, word ptr [61C02A]
004CDF6E mov word ptr [eax+5E], cx
004CDF72 mov dword ptr [ebp-4], 15
004CDF79 mov edx, dword ptr [ebp+8]
004CDF7C mov ax, word ptr [61C02C]
004CDF82 mov word ptr [edx+60], ax
004CDF86 mov dword ptr [ebp-4], 16
004CDF8D mov ecx, dword ptr [ebp+8]
004CDF90 cmp dword ptr [ecx+58], 0 ; ★★★★★[ecx+58]指向机器码~~比较机器码是否为 0 是0则没有取到,采用下面的随机数生成方案
004CDF94 jnz 004CE10B
004CDF9A mov dword ptr [ebp-4], 17
004CDFA1 mov dword ptr [ebp-A8], 80020004
004CDFAB mov dword ptr [ebp-B0], 0A
004CDFB5 lea edx, dword ptr [ebp-B0]
004CDFBB push edx ; /RNDNumber08
004CDFBC call dword ptr [<&MSVBVM60.#594>] ; \rtcRandomize
004CDFC2 lea ecx, dword ptr [ebp-B0]
004CDFC8 call dword ptr [<&MSVBVM60.__vbaFreeVar>] ; MSVBVM60.__vbaFreeVar
004CDFCE mov dword ptr [ebp-4], 18
004CDFD5 mov dword ptr [ebp-A8], 80020004
004CDFDF mov dword ptr [ebp-B0], 0A
004CDFE9 lea eax, dword ptr [ebp-B0]
004CDFEF push eax ; /arg
004CDFF0 call dword ptr [<&MSVBVM60.#593>] ; \rtcRandomNext
004CDFF6 fmul qword ptr [401440]
004CDFFC fstsw ax
004CDFFE test al, 0D
004CE000 jnz 004D0C8C
004CE006 call dword ptr [<&MSVBVM60.__vbaFPInt>] ; MSVBVM60.__vbaFPInt
004CE00C fadd qword ptr [401438]
004CE012 fstsw ax
004CE014 test al, 0D
004CE016 jnz 004D0C8C
004CE01C call dword ptr [<&MSVBVM60.__vbaFpI4>] ; MSVBVM60.__vbaFpI4
004CE022 mov ecx, dword ptr [ebp+8]
004CE025 mov dword ptr [ecx+58], eax
004CE028 lea ecx, dword ptr [ebp-B0]
004CE02E call dword ptr [<&MSVBVM60.__vbaFreeVar>] ; MSVBVM60.__vbaFreeVar
004CE034 mov dword ptr [ebp-4], 19
004CE03B mov edx, dword ptr [ebp+8]
004CE03E mov ax, word ptr [edx+54]
004CE042 mov word ptr [61C020], ax
004CE048 mov dword ptr [ebp-4], 1A
004CE04F mov ecx, dword ptr [ebp+8]
004CE052 mov dx, word ptr [ecx+56]
004CE056 mov word ptr [61C022], dx
004CE05D mov dword ptr [ebp-4], 1B
004CE064 mov eax, dword ptr [ebp+8]
004CE067 mov ecx, dword ptr [eax+58]
004CE06A mov dword ptr [61C024], ecx
004CE070 mov dword ptr [ebp-4], 1C
004CE077 mov edx, dword ptr [ebp+8]
004CE07A mov ax, word ptr [edx+5C]
004CE07E mov word ptr [61C028], ax
004CE084 mov dword ptr [ebp-4], 1D
004CE08B mov ecx, dword ptr [ebp+8]
004CE08E mov dx, word ptr [ecx+5E]
004CE092 mov word ptr [61C02A], dx
004CE099 mov dword ptr [ebp-4], 1E
004CE0A0 mov eax, dword ptr [ebp+8]
004CE0A3 mov cx, word ptr [eax+60]
004CE0A7 mov word ptr [61C02C], cx
004CE0AE mov dword ptr [ebp-4], 1F
004CE0B5 push 2
004CE0B7 push 1
004CE0B9 push 0061C020
004CE0BE push 0046D128
004CE0C3 call dword ptr [<&MSVBVM60.__vbaPutOwner4>] ; MSVBVM60.__vbaPutOwner4
004CE0C9 mov dword ptr [ebp-4], 20
004CE0D0 mov edx, dword ptr [ebp-58]
004CE0D3 push edx
004CE0D4 push 3
004CE0D6 push -1
004CE0D8 push 2
004CE0DA call dword ptr [<&MSVBVM60.__vbaFileOpen>] ; MSVBVM60.__vbaFileOpen
004CE0E0 mov dword ptr [ebp-4], 21
004CE0E7 push 0046D144 ; 0
004CE0EC push 3
004CE0EE push 0046D14C
004CE0F3 call dword ptr [<&MSVBVM60.__vbaWriteFile>] ; MSVBVM60.__vbaWriteFile
004CE0F9 add esp, 0C
004CE0FC mov dword ptr [ebp-4], 22
004CE103 push 3
004CE105 call dword ptr [<&MSVBVM60.__vbaFileClose>] ; MSVBVM60.__vbaFileClose
004CE10B mov dword ptr [ebp-4], 24
004CE112 mov eax, dword ptr [ebp-58]
004CE115 push eax
004CE116 push 3
004CE118 push -1
004CE11A push 1
004CE11C call dword ptr [<&MSVBVM60.__vbaFileOpen>] ; MSVBVM60.__vbaFileOpen
004CE122 mov dword ptr [ebp-4], 25
004CE129 lea ecx, dword ptr [ebp-44]
004CE12C push ecx
004CE12D push 3
004CE12F push 0046D154
004CE134 call dword ptr [<&MSVBVM60.__vbaInputFile>] ; MSVBVM60.__vbaInputFile
004CE13A add esp, 0C
004CE13D mov dword ptr [ebp-4], 26
004CE144 push 3
004CE146 call dword ptr [<&MSVBVM60.__vbaFileClose>] ; MSVBVM60.__vbaFileClose
004CE14C mov dword ptr [ebp-4], 27
004CE153 lea edx, dword ptr [ebp-44]
004CE156 push edx
004CE157 call dword ptr [<&MSVBVM60.__vbaI4ErrVar>] ; MSVBVM60.__vbaI4ErrVar
004CE15D mov ecx, dword ptr [ebp+8]
004CE160 mov edx, dword ptr [ecx+58] ; 机器码送edx
004CE163 imul edx, edx, 2 ; edx * 2
004CE166 jo 004D0C91
004CE16C add edx, 4BFD3 ; edx + 0x4BFD3
004CE172 jo 004D0C91
004CE178 cmp eax, edx ; 和假码对比(16进制)
004CE17A je 004CE5EB
004CE180 mov dword ptr [ebp-4], 28
004CE187 mov edx, 0046CC0C ; jl.bin
004CE18C lea ecx, dword ptr [ebp-24]
004CE18F call dword ptr [<&MSVBVM60.__vbaStrCopy>] ; MSVBVM60.__vbaStrCopy
004CE195 mov dword ptr [ebp-4], 29
004CE19C mov eax, dword ptr [ebp-24]
004CE19F push eax
004CE1A0 push 4
004CE1A2 push -1
004CE1A4 push 1
004CE1A6 call dword ptr [<&MSVBVM60.__vbaFileOpen>] ; 打开 jl.bin 准备读取使用次数
004CE1AC mov dword ptr [ebp-4], 2A
004CE1B3 lea ecx, dword ptr [ebp-54]
004CE1B6 push ecx
004CE1B7 push 4
004CE1B9 push 0046D154
004CE1BE call dword ptr [<&MSVBVM60.__vbaInputFile>] ; MSVBVM60.__vbaInputFile
004CE1C4 add esp, 0C
004CE1C7 mov dword ptr [ebp-4], 2B
004CE1CE push 4
004CE1D0 call dword ptr [<&MSVBVM60.__vbaFileClose>] ; MSVBVM60.__vbaFileClose
004CE1D6 mov dword ptr [ebp-4], 2C
004CE1DD lea edx, dword ptr [ebp-54]
004CE1E0 push edx
004CE1E1 call dword ptr [<&MSVBVM60.__vbaI2Var>] ; MSVBVM60.__vbaI2Var
004CE1E7 mov word ptr [ebp-74], ax
004CE1EB mov dword ptr [ebp-4], 2D
004CE1F2 mov ax, word ptr [ebp-74]
004CE1F6 add ax, 1 ; 记录数(使用次数)+1
.
.
.省略部分
004CE332 add esp, 0C
004CE335 mov dword ptr [ebp-4], 2F
004CE33C cmp word ptr [ebp-74], 1E ; 是否超过 0x1E(30)次
004CE341 jnz 004CE58B
004CE347 mov dword ptr [ebp-4], 30
004CE34E cmp dword ptr [61C054], 0
004CE355 jnz short 004CE373
004CE357 push 0061C054
004CE35C push 00469F80
004CE361 call dword ptr [<&MSVBVM60.__vbaNew2>] ; MSVBVM60.__vbaNew2
.
.
.
下面乱七八糟的代码就不看了~~
【算法总结】
0.看着VB的代码很晕吧?乱七八糟的东西很多~~~呵呵,搞了这么个简单确有代表的东西分析(重启验证)~~~~
1.Sn = 机器码 * 2 + 0x4BFD3
【算法注册机】
{-------------------------------------------------------------------------------
过程名: Key
作用: 注册码算法
作者: piaoyun
日期: 2008.10.20
参数: code:Integer
返回值: string
-------------------------------------------------------------------------------}
function Key(code:Integer):string;
var
sum:integer;
begin
sum := code * 2 + $4BFD3;
Result := IntToStr(sum);
end;
{-------------------------------------------------------------------------------
过程名: TForm1.btnOkClick
作用: 算号 按钮事件~~
作者: piaoyun
日期: 2008.10.20
参数: Sender: TObject
返回值: 无
-------------------------------------------------------------------------------}
procedure TForm1.btnOkClick(Sender: TObject);
begin
if edtCode.Text <> '' then
begin
edtSn.Text := Key(StrToInt(edtCode.Text));
end
else
ShowMessage('请输入申请码!');
end;
【版权声明】 本文原创于P.Y.G官方,纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! |
|