飘云 发表于 2008-10-20 17:58:16

[PYG官方教程]开悟之门-跟飘云学算法-3

【破文标题】跑的快 V1.2 算法分析
【破文作者】飘云
【作者主页】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码 找到如下关键:


004CDB00push    ebp
004CDB01mov   ebp, esp
004CDB03sub   esp, 18
004CDB06push    <jmp.&MSVBVM60.__vbaExceptHandler>      ;SE 处理程序安装
004CDB0Bmov   eax, dword ptr fs:
004CDB11push    eax
004CDB12mov   dword ptr fs:, esp
004CDB19mov   eax, 294
004CDB1Ecall    <jmp.&MSVBVM60.__vbaChkstk>
004CDB23push    ebx
004CDB24push    esi
004CDB25push    edi
004CDB26mov   dword ptr , esp
004CDB29mov   dword ptr , 00401210
004CDB30mov   eax, dword ptr
004CDB33and   eax, 1
004CDB36mov   dword ptr , eax
004CDB39mov   ecx, dword ptr
004CDB3Cand   ecx, FFFFFFFE
004CDB3Fmov   dword ptr , ecx
004CDB42mov   dword ptr , 0
004CDB49mov   edx, dword ptr
004CDB4Cmov   eax, dword ptr
004CDB4Emov   ecx, dword ptr
004CDB51push    ecx
004CDB52call    dword ptr
.
.
.省略一大堆~~~
004CDE97call    dword ptr [<&MSVBVM60.__vbaSetSystemErr>;MSVBVM60.__vbaSetSystemError
004CDE9Dmov   dword ptr , 0B
004CDEA4mov   edx, dword ptr
004CDEA7mov   word ptr , 0
004CDEB0mov   dword ptr , 0C
004CDEB7mov   edx, 0046D0D4                           ;c:\windows\system32\mibs.bin//★定位到这里开始分析~~~
004CDEBClea   ecx, dword ptr
004CDEBFcall    dword ptr [<&MSVBVM60.__vbaStrCopy>]    ;MSVBVM60.__vbaStrCopy
004CDEC5mov   dword ptr , 0D
004CDECCmov   edx, 0046D114                           ;set.bin
004CDED1lea   ecx, dword ptr
004CDED4call    dword ptr [<&MSVBVM60.__vbaStrCopy>]    ;MSVBVM60.__vbaStrCopy
004CDEDAmov   dword ptr , 0E
004CDEE1mov   eax, dword ptr
004CDEE4push    eax
004CDEE5push    2
004CDEE7push    0E
004CDEE9push    4
004CDEEBcall    dword ptr [<&MSVBVM60.__vbaFileOpen>]   ;MSVBVM60.__vbaFileOpen
004CDEF1mov   dword ptr , 0F
004CDEF8push    2
004CDEFApush    1
004CDEFCpush    0061C020
004CDF01push    0046D128
004CDF06call    dword ptr [<&MSVBVM60.__vbaGetOwner4>];MSVBVM60.__vbaGetOwner4
004CDF0Cmov   dword ptr , 10
004CDF13mov   ecx, dword ptr
004CDF16mov   dx, word ptr
004CDF1Dmov   word ptr , dx
004CDF21mov   dword ptr , 11
004CDF28mov   eax, dword ptr
004CDF2Bmov   cx, word ptr
004CDF32mov   word ptr , cx
004CDF36mov   dword ptr , 12
004CDF3Dmov   edx, dword ptr
004CDF40mov   eax, dword ptr
004CDF45mov   dword ptr , eax
004CDF48mov   dword ptr , 13
004CDF4Fmov   ecx, dword ptr
004CDF52mov   dx, word ptr
004CDF59mov   word ptr , dx
004CDF5Dmov   dword ptr , 14
004CDF64mov   eax, dword ptr
004CDF67mov   cx, word ptr
004CDF6Emov   word ptr , cx
004CDF72mov   dword ptr , 15
004CDF79mov   edx, dword ptr
004CDF7Cmov   ax, word ptr
004CDF82mov   word ptr , ax
004CDF86mov   dword ptr , 16
004CDF8Dmov   ecx, dword ptr
004CDF90cmp   dword ptr , 0                   ;★★★★★指向机器码~~比较机器码是否为 0是0则没有取到,采用下面的随机数生成方案
004CDF94jnz   004CE10B
004CDF9Amov   dword ptr , 17
004CDFA1mov   dword ptr , 80020004
004CDFABmov   dword ptr , 0A
004CDFB5lea   edx, dword ptr
004CDFBBpush    edx                                     ; /RNDNumber08
004CDFBCcall    dword ptr [<&MSVBVM60.#594>]            ; \rtcRandomize
004CDFC2lea   ecx, dword ptr
004CDFC8call    dword ptr [<&MSVBVM60.__vbaFreeVar>]    ;MSVBVM60.__vbaFreeVar
004CDFCEmov   dword ptr , 18
004CDFD5mov   dword ptr , 80020004
004CDFDFmov   dword ptr , 0A
004CDFE9lea   eax, dword ptr
004CDFEFpush    eax                                     ; /arg
004CDFF0call    dword ptr [<&MSVBVM60.#593>]            ; \rtcRandomNext
004CDFF6fmul    qword ptr
004CDFFCfstsw   ax
004CDFFEtest    al, 0D
004CE000jnz   004D0C8C
004CE006call    dword ptr [<&MSVBVM60.__vbaFPInt>]      ;MSVBVM60.__vbaFPInt
004CE00Cfadd    qword ptr
004CE012fstsw   ax
004CE014test    al, 0D
004CE016jnz   004D0C8C
004CE01Ccall    dword ptr [<&MSVBVM60.__vbaFpI4>]       ;MSVBVM60.__vbaFpI4
004CE022mov   ecx, dword ptr
004CE025mov   dword ptr , eax
004CE028lea   ecx, dword ptr
004CE02Ecall    dword ptr [<&MSVBVM60.__vbaFreeVar>]    ;MSVBVM60.__vbaFreeVar
004CE034mov   dword ptr , 19
004CE03Bmov   edx, dword ptr
004CE03Emov   ax, word ptr
004CE042mov   word ptr , ax
004CE048mov   dword ptr , 1A
004CE04Fmov   ecx, dword ptr
004CE052mov   dx, word ptr
004CE056mov   word ptr , dx
004CE05Dmov   dword ptr , 1B
004CE064mov   eax, dword ptr
004CE067mov   ecx, dword ptr
004CE06Amov   dword ptr , ecx
004CE070mov   dword ptr , 1C
004CE077mov   edx, dword ptr
004CE07Amov   ax, word ptr
004CE07Emov   word ptr , ax
004CE084mov   dword ptr , 1D
004CE08Bmov   ecx, dword ptr
004CE08Emov   dx, word ptr
004CE092mov   word ptr , dx
004CE099mov   dword ptr , 1E
004CE0A0mov   eax, dword ptr
004CE0A3mov   cx, word ptr
004CE0A7mov   word ptr , cx
004CE0AEmov   dword ptr , 1F
004CE0B5push    2
004CE0B7push    1
004CE0B9push    0061C020
004CE0BEpush    0046D128
004CE0C3call    dword ptr [<&MSVBVM60.__vbaPutOwner4>];MSVBVM60.__vbaPutOwner4
004CE0C9mov   dword ptr , 20
004CE0D0mov   edx, dword ptr
004CE0D3push    edx
004CE0D4push    3
004CE0D6push    -1
004CE0D8push    2
004CE0DAcall    dword ptr [<&MSVBVM60.__vbaFileOpen>]   ;MSVBVM60.__vbaFileOpen
004CE0E0mov   dword ptr , 21
004CE0E7push    0046D144                              ;0
004CE0ECpush    3
004CE0EEpush    0046D14C
004CE0F3call    dword ptr [<&MSVBVM60.__vbaWriteFile>];MSVBVM60.__vbaWriteFile
004CE0F9add   esp, 0C
004CE0FCmov   dword ptr , 22
004CE103push    3
004CE105call    dword ptr [<&MSVBVM60.__vbaFileClose>];MSVBVM60.__vbaFileClose
004CE10Bmov   dword ptr , 24
004CE112mov   eax, dword ptr
004CE115push    eax
004CE116push    3
004CE118push    -1
004CE11Apush    1
004CE11Ccall    dword ptr [<&MSVBVM60.__vbaFileOpen>]   ;MSVBVM60.__vbaFileOpen
004CE122mov   dword ptr , 25
004CE129lea   ecx, dword ptr
004CE12Cpush    ecx
004CE12Dpush    3
004CE12Fpush    0046D154
004CE134call    dword ptr [<&MSVBVM60.__vbaInputFile>];MSVBVM60.__vbaInputFile
004CE13Aadd   esp, 0C
004CE13Dmov   dword ptr , 26
004CE144push    3
004CE146call    dword ptr [<&MSVBVM60.__vbaFileClose>];MSVBVM60.__vbaFileClose
004CE14Cmov   dword ptr , 27
004CE153lea   edx, dword ptr
004CE156push    edx
004CE157call    dword ptr [<&MSVBVM60.__vbaI4ErrVar>]   ;MSVBVM60.__vbaI4ErrVar
004CE15Dmov   ecx, dword ptr
004CE160mov   edx, dword ptr                ;机器码送edx
004CE163imul    edx, edx, 2                           ;edx * 2
004CE166jo      004D0C91
004CE16Cadd   edx, 4BFD3                              ;edx + 0x4BFD3
004CE172jo      004D0C91
004CE178cmp   eax, edx                              ;和假码对比(16进制)
004CE17Aje      004CE5EB
004CE180mov   dword ptr , 28
004CE187mov   edx, 0046CC0C                           ;jl.bin
004CE18Clea   ecx, dword ptr
004CE18Fcall    dword ptr [<&MSVBVM60.__vbaStrCopy>]    ;MSVBVM60.__vbaStrCopy
004CE195mov   dword ptr , 29
004CE19Cmov   eax, dword ptr
004CE19Fpush    eax
004CE1A0push    4
004CE1A2push    -1
004CE1A4push    1
004CE1A6call    dword ptr [<&MSVBVM60.__vbaFileOpen>]   ;打开 jl.bin    准备读取使用次数
004CE1ACmov   dword ptr , 2A
004CE1B3lea   ecx, dword ptr
004CE1B6push    ecx
004CE1B7push    4
004CE1B9push    0046D154
004CE1BEcall    dword ptr [<&MSVBVM60.__vbaInputFile>];MSVBVM60.__vbaInputFile
004CE1C4add   esp, 0C
004CE1C7mov   dword ptr , 2B
004CE1CEpush    4
004CE1D0call    dword ptr [<&MSVBVM60.__vbaFileClose>];MSVBVM60.__vbaFileClose
004CE1D6mov   dword ptr , 2C
004CE1DDlea   edx, dword ptr
004CE1E0push    edx
004CE1E1call    dword ptr [<&MSVBVM60.__vbaI2Var>]      ;MSVBVM60.__vbaI2Var
004CE1E7mov   word ptr , ax
004CE1EBmov   dword ptr , 2D
004CE1F2mov   ax, word ptr
004CE1F6add   ax, 1                                 ;记录数(使用次数)+1
.
.
.省略部分
004CE332add   esp, 0C
004CE335mov   dword ptr , 2F
004CE33Ccmp   word ptr , 1E                   ;是否超过 0x1E(30)次
004CE341jnz   004CE58B
004CE347mov   dword ptr , 30
004CE34Ecmp   dword ptr , 0
004CE355jnz   short 004CE373
004CE357push    0061C054
004CE35Cpush    00469F80
004CE361call    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官方,纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

月之精灵 发表于 2008-10-20 18:43:39

下载来学习下。/:good

tony_liu518 发表于 2008-10-20 19:51:56

跟着老大学习,真是荣幸啊!/:014

孤漂江湖狼 发表于 2008-10-20 19:59:26

收藏了,有时间再看

夜冷风 发表于 2008-10-20 20:45:11

好东西.明天早上实际操作一次!!!

冰糖 发表于 2008-10-20 20:48:52

老飘发飙了,今天大爆发了

crystalsnail 发表于 2008-10-21 23:42:04

学习了,谢谢分享/:018

beginl08 发表于 2008-10-22 21:01:21

学习了/:018 /:018 /:018 /:018

hflywolf 发表于 2008-10-23 00:09:00

/:good /:good /:good
这么短的时间内连续出两篇算法分析!!!!!!

绝恋de烦神 发表于 2008-10-24 20:33:51

唉。。没学过汇编。。算法注册机那里的代码看不明白。。
页: [1] 2 3 4 5 6 7 8
查看完整版本: [PYG官方教程]开悟之门-跟飘云学算法-3