• 标 题:无限游戏存档II v2.3.38 **过程 (3千字)
  • 作 者:小楼
  • 时 间:2002-1-12 14:04:00
  • 链 接:http://bbs.pediy.com

1.得到**码
A:
用smartcheck走一遍,就能得到你所需要的。

B:
因为知道输入的**码保存在软件安装目录下的boob.ini中:
[Reg]
Number=gWiT449x%
Test=0
exdec打开主程序无限游戏存档II.exe,以关键词“number”搜索,共3处,其中一处是软件启动时应用的,如下
4618C5: 1b LitStr:                Number
4618C8: 43 FStStrCopy              local_0094
4618CB: 04 FLdRfVar                local_0094
4618CE: 1b LitStr:                Reg
4618D1: 43 FStStrCopy              local_0090
......
461975: Lead0/33 EqVarBool                    <--比较,msvbvm50!__vbastrcomp 
461977: 36 FFreeVar
461984: 1c BranchF:                4619F9      <--jump if false
......
4619F9: 15 ExitProcI2              <--离开
 
所以用trw设断
bpm 461975
中断后F8走,直到你看到**码。


2.“注册版”180次使用限制
  这样注册后依旧有180次使用限制。软件使用次数记录在软件安装目录下的list.com中:
    [sos]
    sos=1

A:
研究后我认为在这个公共版本中必定存在180次限制。

看:软件运行后首先执行代码如下:

Proc: 466c34
4666F4: 00 LargeBos             
4666F6: 00 LargeBos       
......
4668C3: f5 LitI4:                  0xb4  180  (....)  <--180次
4668C8: 71 FStR4                  local_0110
4668CB: 00 LargeBos             
4668CD: f5 LitI4:                  0x0  0  (....)      <--0次
4668D2: 94 FMemLdR4             
4668D7: 1b LitStr:                List.com
4668DA: 2a ConcatStr             
4668DB: 46 CVarStr                local_00B8
4668DE: 0b ImpAdCallI2            _rtcDir
4668E3: 23 FStStrNoPop            local_008C
4668E6: 1b LitStr:                
4668E9: Lead0/30 EqStr                                  <--比较
4668EB: 2f FFree1Str              local_008C
4668EE: 35 FFree1Var              local_00B8
4668F1: 1c 52 02 00 BranchF:      466946              <--jump then expired
4668F4: 00 LargeBos             
4668F4: 00 LargeBos             
4668F6: 04 FLdRfVar                local_0120
4668F9: 94 FMemLdR4             
4668FE: 1b LitStr:                List.com
466901: 2a ConcatStr             
466902: Lead2/59 PopTmpLdAdStr    local_011C
466906: 1b LitStr:                1                  <--
466909: 43 FStStrCopy              local_0118          |
46690C: 04 FLdRfVar                local_0118          |
46690F: 1b LitStr:                sos                  |令sos==1
466912: 43 FStStrCopy              local_0114          |
466915: 04 FLdRfVar                local_0114          |
466918: 1b LitStr:                sos                <--
46691B: 43 FStStrCopy              local_008C
46691E: 04 FLdRfVar                local_008C
466921: 07 FMemLdRf             
466926: 24 NewIfNullPr            407ea8
466929: 0d VCallHresult            7b3fbd80
46692E: 3e FLdZeroAd              local_0120
466931: 46 CVarStr                local_00B8
466934: Lead1/f6 FStVar         
466938: 32 FFreeStr
466943: 1e Branch:                466c0f
......
......
466C0F: 00 LargeBos             
......
466C32: 14 ExitProc     

注意到
4668F1: 1c 52 02 00 BranchF:  466946  是关键跳转,如果这里永远继续执行
4668F4: 00 LargeBos                    以后的代码,就会使得使用次数永远是1次
所以更改    4668F1: 1c 52 02 00 BranchF:  466946
      为    4668F1: 1c 00 02 00 BranchF:  4668F4
用ultraedit打开主程序,定位到00065CF1h处,修改 1C 52 02 00
                                          为 1C 00 02 00

B:
将list.com设置为“只读”属性,程序就不能记录使用次数了。