飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 19632|回复: 70

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

  [复制链接]
  • TA的每日心情
    难过
    2024-4-22 14:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2008-10-20 17:58:16 | 显示全部楼层 |阅读模式
    【破文标题】跑的快 V1.2 算法分析
    【破文作者】飘云[P.Y.G]
    【作者主页】https://www.chinapyg.com
    破解平台】WinXp
    【破解工具】PEiD0.94、OllyDbg
    【作者邮箱】piaoyun04@163.com
    【软件名称】跑的快 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官方,纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2008-10-20 18:43:39 | 显示全部楼层
    下载来学习下。/:good
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-20 19:51:56 | 显示全部楼层
    跟着老大学习,真是荣幸啊!/:014
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-20 19:59:26 | 显示全部楼层
    收藏了,有时间再看
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-20 20:45:11 | 显示全部楼层
    好东西.明天早上实际操作一次!!!
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2018-2-11 09:23
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2008-10-20 20:48:52 | 显示全部楼层
    老飘发飙了,今天大爆发了
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2022-3-21 08:52
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2008-10-21 23:42:04 | 显示全部楼层
    学习了,谢谢分享/:018
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-22 21:01:21 | 显示全部楼层
    学习了/:018 /:018 /:018 /:018
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-23 00:09:00 | 显示全部楼层
    /:good /:good /:good
    这么短的时间内连续出两篇算法分析!!!!!!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-8-30 18:31
  • 签到天数: 52 天

    [LV.5]常住居民I

    发表于 2008-10-24 20:33:51 | 显示全部楼层
    唉。。没学过汇编。。算法注册机那里的代码看不明白。。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表