发信人: 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 )
 
 
  | 
 
 
 |