精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● 计算机安全>>◆破解技巧◆>>游戏破解示例 [转载]

主题:游戏破解示例 [转载]
发信人: williamlong(蓝色月光)
整理人: williamlong(2001-09-14 08:44:26), 站内信件
发信站: 广州蓝天站 (Thu Nov  6 22:30:51 1997), 转信

作        者 :  GI MING
破解教学软体 :  泡妞终结者
破解使用工具 :  S-ICE 2.64 里的 LDR.EXE 
破解使用方法 :  三步法
适 用 对  象 :  初学者
使用符号说明 :  [*] 为 CALL 的所在  [.] 为执行 HERE 命令位置的所在

教 学 主  旨 :  1. 为 90 - COPYBOARD 抛砖引玉, 希望各位高手, 除能
                   将破解方法列出外, 更能热心的将破解的过程列出,
                   真正做到知识交流的目的, 也达到 90 - COPYBOARD
                   最初立此信区的中旨. 
                2. 为各位想交流破解知识, 介绍一个『清静』之地!!
                3. 为各位想踏入破解殿堂, 一个新天地 !!
                   在文件的最後有『疯网』最新的站名表.
                   各位同好们可以就近去参与我们的讨论

後        序 :  因我没有可以抓文字画面的程式, 所以用 DEBUG 来表列程式.
                如您手中有不错的抓文字画面的程式, 望您能上传至本站.
                使我往後能比较清松的发表破解过程!!

-------------------------------------------------------------------
第一步  找出密码画面的进入点
-------------------------------------------------------------------
-u

109E:0000 BA6B23        MOV     DX,236B
109E:0003 2E            CS:
109E:0004 89169102      MOV     [0291],DX
109E:0008 B430          MOV     AH,30
109E:000A CD21          INT     21
109E:000C 8B2E0200      MOV     BP,[0002]
109E:0010 8B1E2C00      MOV     BX,[002C]
109E:0014 8EDA          MOV     DS,DX
109E:0016 A37D00        MOV     [007D],AX
109E:0019 8C067B00      MOV     [007B],ES
109E:001D 891E7700      MOV     [0077],BX
-u

109E:0021 892E9100      MOV     [0091],BP
109E:0025 E85501        CALL    017D      *  终於看到第一个了
109E:0028 A17700        MOV     AX,[0077] .  在这儿下 here
109E:002B 8EC0          MOV     ES,AX        没事继续往下找!!
109E:002D 33C0          XOR     AX,AX
109E:002F 8BD8          MOV     BX,AX
109E:0031 8BF8          MOV     DI,AX
109E:0033 B9FF7F        MOV     CX,7FFF
109E:0036 FC            CLD
109E:0037 F2            REPNZ
109E:0038 AE            SCASB
109E:0039 E343          JCXZ    007E
109E:003B 43            INC     BX
109E:003C 26            ES:
109E:003D 3805          CMP     [DI],AL
109E:003F 75F6          JNZ     0037
-u

         ---=== 中间都跟这篇破解无关, 为节省网路资源, 略过 ===---

109E:0128 33ED          XOR     BP,BP
109E:012A 2E            CS:
109E:012B 8E069102      MOV     ES,[0291]
109E:012F BE1623        MOV     SI,2316
109E:0132 BF3423        MOV     DI,2334
109E:0135 E8B500        CALL    01ED       * 这是第二个 CALL
109E:0138 FF367300      PUSH    [0073]     . 在这儿下 here
109E:013C FF367100      PUSH    [0071]       没事继续往下找!!
109E:0140 FF366F00      PUSH    [006F]
109E:0144 FF366D00      PUSH    [006D]
-u

109E:0148 FF366B00      PUSH    [006B]
109E:014C 9AA2006F14    CALL    146F:00A2  * 这是第三个 CALL
109E:0151 50            PUSH    AX         . 终於出现密码画面了.
109E:0152 90            NOP

---------------------------------------------------------------------
第二步  进入密码画面点里搜查
--------------------------------------------------------------------

109E:0148 FF366B00      PUSH    [006B]
109E:014C 9AA2006F14    CALL    146F:00A2  * [ 要进入搜查了 !!]
109E:0151 50            PUSH    AX
109E:0152 90            NOP

-g 109e:014C

-t


AX=0100  BX=2334  CX=0000  DX=2334  SP=2806  BP=0000  SI=2316  DI=2334
DS=236B  ES=236B  SS=25D6  CS=109E  IP=014C   NV UP EI PL ZR NA PE NC
109E:014C 9AA2006F14    CALL    146F:00A2

-u

146F:00A2 C8            DB      C8
146F:00A3 06            PUSH    ES
146F:00A4 0000          ADD     [BX+SI],AL
146F:00A6 56            PUSH    SI
146F:00A7 57            PUSH    DI
146F:00A8 C706A81C0300  MOV     WORD PTR [1CA8],0003
146F:00AE C706B8250100  MOV     WORD PTR [25B8],0001
146F:00B4 C706BA250100  MOV     WORD PTR [25BA],0001
146F:00BA 1E            PUSH    DS
146F:00BB 68            DB      68
146F:00BC 7405          JZ      00C3
146F:00BE 1E            PUSH    DS
146F:00BF 68            DB      68
146F:00C0 6B            DB      6B
146F:00C1 059A25        ADD     AX,259A
-u

146F:00E4 A81C          TEST    AL,1C
146F:00E6 9A4E269E10    CALL    109E:264E      * 又一个 CALL
146F:00EB 83C40C        ADD     SP,+0C         . 在这儿下 here
146F:00EE FF76FC        PUSH    [BP-04]          没事继续往下找!!
146F:00F1 FF76FA        PUSH    [BP-06]
146F:00F4 9A87219E10    CALL    109E:2187
146F:00F9 83C404        ADD     SP,+04
146F:00FC 1E            PUSH    DS
146F:00FD 68            DB      68
146F:00FE 7805          JS      0105
146F:0100 9A0D00CD20    CALL    20CD:000D     * 又一个 CALL
146F:0105 83C404        ADD     SP,+04        . 在这儿下 here
146F:0108 8946FE        MOV     [BP-02],AX      没事继续往下找!!

-u

146F:010B 837EFE00      CMP     WORD PTR [BP-02],+00
146F:010F 7438          JZ      0149  .....................
146F:0111 6A            DB      6A             ┌━━━━━━━━━━━━┐
146F:0112 07            POP     ES             ┃[BP-02] 至始至终值都为 0┃
146F:0113 1E            PUSH    DS             ┃  所以 JZ 0149 终会执行 ┃
146F:0114 68            DB      68             └━━━━━━━━━━━━┘
146F:0115 81059AD3      ADD     WORD PTR [DI],D39A        .
146F:0119 2D9E10        SUB     AX,109E                   .
146F:011C 83C406        ADD     SP,+06                    .
146F:011F 1E            PUSH    DS                        .
146F:0120 68            DB      68                        .
146F:0121 8405          TEST    AL,[DI]                   .
146F:0123 9AD32D9E10    CALL    109E:2DD3     * [这个 CALL 是个大陷阱]
                                              . 在这里下 here 出现了密码
- u                                             画面. 但这并不是切入点. 
                                                程式会先执行这个 CALL . .
146F:0140 83C404        ADD     SP,+04                                  .
146F:0143 C706B8250000  MOV     WORD PTR [25B8],0000                    .
146F:0149 9A0200A821    CALL    21A8:0002    ............................
146F:014E 90            NOP                            .
146F:014F 0E            PUSH    CS                     .
146F:0150 E85504        CALL    05A8           * 又一个 CALL
146F:0153 1E            PUSH    DS             . 在这儿下 here
146F:0154 68            DB      68               没事继续往下找!!
146F:0155 B523          MOV     CH,23

          ---=== 中间都跟这篇破解无关, 为节省网路资源, 略过 ===---
-u

-U

146F:01B0 83C404        ADD     SP,+04
146F:01B3 90            NOP
146F:01B4 0E            PUSH    CS              [--   泡妞终结者画面   --]
146F:01B5 E85305        CALL    070B          * [不喜欢的话也可以把这弄掉]
146F:01B8 6A            DB      6A            . 在这里执行 HERE
146F:01B9 006A00        ADD     [BP+SI+00],CH
146F:01BC 9A22099E10    CALL    109E:0922     . 一样在这里执行 HERE
146F:01C1 83C404        ADD     SP,+04        * 没事, 继续!!
146F:01C4 50            PUSH    AX
146F:01C5 9A78079E10    CALL    109E:0778
146F:01CA 59            POP     CX
146F:01CB 68            DB      68
146F:01CC DB01                  FILD    DWORD PTR [BX+DI]

-U

146F:01E9 06            PUSH    ES
146F:01EA 9B            WAIT
146F:01EB 2403          AND     AL,03
146F:01ED 00900EE8      ADD     [BX+SI+E80E],DL
146F:01F1 187C90        SBB     [SI-70],BH
146F:01F4 0E            PUSH    CS
146F:01F5 E8117E        CALL    8009         * [呼叫破解画面的所在]
146F:01F8 8BF0          MOV     SI,AX   ..   . 下 HERE 终於现出原形了. 
146F:01FA 83FEFF        CMP     SI,-01   .
146F:01FD 7505          JNZ     0204     .
146F:01FF BF0100        MOV     DI,0001  .
146F:0202 EB02          JMP     0206     ... 密码按回来後的判断
146F:0204 33FF          XOR     DI,DI    .
146F:0206 EB18          JMP     0220     .
146F:0208 90            NOP              .
                                         .
---------------------------------------------------------------------
第三步  修改原始程式
--------------------------------------------------------------------

* 以 PCTOOLS 修改原始程式.将刚刚我们找出来的码弄掉. 

              找出 : 0E E8 11 7F 8B F0
              改成 : -- 90 90 90 -- --

       这样就不会有询问密码的画面, 即告破解完毕 !!

       上面原意是 将 CALL 8009 改成 NOP NOP NOP
                    (E8 11 7F) 改成 ( 90 90 90 )

* 刚刚我们来找出来泡妞终结者的广告画面, 如您嫌它暂停太久的话, 也弄掉它. 

              找出 : 90 0E E8 53 05 6A
              改成 : -- -- 90 90 90 --


        上面原意是 将 CALL 070B 改成 NOP NOP NOP
                     (E8 53 05) 改成 ( 90 90 90 )


* 这部份是让我们乱按 PASSWORD 之後仍能进行游戏 !!

  因为这是份简单的教学, 也不想让各位同好, 一堆逻辑在脑袋里转.
  介绍另一个方法 --- 平行带入法.
  在输入正确的密码时, AX 返回值为 0000, 错误时返回值是 FFFF
  又 DX 值的不论真假都为 0000. 为保持原程式的长度, 所以只要

                    找出 : 8B F0 83 FE FF 75
                    改成 : -- C2 -- -- -- --

                原意是将 MOV SI,AX 改成 MOV AX,DX
                         ( 8B F0 ) 改成 ( 8B C2 )



[关闭][返回]