⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 worm.txt

📁 关于黑客的论坛的下载资料
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                MOV AL,ES:[BX]       │ 比对是否相同
                CMP AL,ES:[BX+200]   │ 若相同则 LOOP
                JZ  LOOP             ┘
                CMP BX,3FF           ┐ 是否比对完毕
                JZ  'ERROR'          ┘
                JMP 'TEST OK'        ; TEST OK

     以上的保护都是从软体上抄下的,将之简化後登出,不过上述例子都是使用
     磁碟 I/O (INT 13h) 方式读取保护,因此很容易被拦截而破解,所以最好的
     方法就是将 ROM (BIOS) SAVE 到程式内,如果须要使用到 INT 13h 时,就
     呼叫自己程式内的 BIOS ,这样就没有问题了,但是由於 ROM 有 32K ,请自
     行抓出可用的程式,摆在自己程式内,这样就算有XX防写程式也不能防止被
     写入资料,但由於此方法必需考虑程式是否过大、版权问题,所以少有人用
     之,例如目前市面常见的 SoftGard 2.00~3.01 都是自己写磁碟 I/O ,所以
     程式庞大,因此将其功能分成三个小档,分别工作之。

     SoftGard 3.00 保护简介 :
       被 SoftGard 保护住的磁片有两个隐藏档,分别为 CML0300.HCL 以及
     VDF0300.VDF。首先由一个主档启动磁片,经过自我侦测程式,然後再把
     把 DEBUG 要 TRACE 用的 INT 0~INT 3 全部换成 SoftGard 所用的程式
     使得 DEBUG 等程式完全当掉,然後再读取 CML0300.HCL 将自己程式完全
     解码,使得SoftGard有正确程式可继续执行(防单步执行),然後将保护轨
     资料与解码後的 VDF0300.VDF 资料比对,若正确的话就将原主档解码,并
     还原各中断向量,然後执行该档。
       对於该种保护的强度可能只有那些真正解过的人才知道了,但是不管保
     护如何强劲,都有其致命伤,就是不管何时都禁止按 Ctrl-Break ,因此如
     果你在 DEBUG 下执行原版的软体,那就在键入"G"後,连打 Ctrl-Break,
     因为就在它解开密码的那一点,就会将程式中断向量还原,然後执行其真正
     的程式,而因为它是最後一个步骤才还原中断向量,因此您可以中断其程式
     也就代表它正执行到保护与正确程式的交接点,就被你的快手中断掉了,此
     时记忆体只留下来真正的程式,再写回磁片就破解了,说穿就是这麽诈。

     由於笔者手上有一个类似被 SoftGard 保护的软体,相当强撼,将在下一集
     为您大略说明,想写一些防止被 TRACE 的保护,不能错过。
                好啦,本篇讲古到此为止,请稍待继续观赏....



                   拷贝心得第四集
             ┌—┐  ┌—┐  ┌—┐  ┌—┐  ┌∞
         └—┘  └—┘  └—┘  └—┘  └—┘
        ┌————————————————————┐
        │ 软体蛀虫站资料填写 ,请勿修改其内容     │
        │  90 网之 2 ----> 597-1306   24Hr       │
        └————————————————————┘
               ====  第六章  某种超级锁  ====

    ┌—————————┐
    │  6-1  四川省某档 │
    └—————————┘
-R
AX=0000  BX=0000  CX=786E  DX=0000  SP=01FE  BP=0000  SI=0000  DI=0000
DS=4B37  ES=4B37  SS=5267  CS=5267  IP=05B1   NV UP EI PL NZ NA PO NC

-U CS:05B1 CS:05EB

5267:05B1 5D             POP    BP           ┐
5267:05B2 8C46CF         MOV    [BP-31],ES   │  将程式码从头加至尾
5267:05B5 8746CD         XCHG   AX,[BP-33]   │
5267:05B8 59             POP    CX           │  因为任何的单步执行
5267:05B9 03467F         ADD    AX,[BP+7F]   │  都会更改程式码[CC]
5267:05BC 45             INC    BP           │  加完正确值是 F6E2h
5267:05BD E2FA           LOOP   05B9         ┘  将之放到 AX 暂存器
5267:05BF FA             CLI                 ┐
5267:05C0 5C             POP    SP           │  从 SS:216-20A 抓资料替换
5267:05C1 1F             POP    DS           │  INT0-3的资料 ,如途中有单
5267:05C2 59             POP    CX           │  步执行 ,就更改其SS:20A值
5267:05C3 5B             POP    BX           │  这是因为当 INT0 被改後 ,
5267:05C4 8CCA           MOV    DX,CS        │  任何单步执行一旦用到INT3
5267:05C6 870F           XCHG   CX,[BX]      │  同时也会动到 INT0  ,跟著
5267:05C8 875702         XCHG   DX,[BX+02]   │  利用此将SS:20C的0C改掉 ,
5267:05CB 52             PUSH   DX           │  造成无限回圈 ,正常绕三圈
5267:05CC 51             PUSH   CX           │  後会跳到 INT3 那行
5267:05CD 83EC04         SUB    SP,+04       │
5267:05D0 83FB0C         CMP    BX,+0C       │
5267:05D3 75ED           JNZ    05C2         ┘
5267:05D5 CC             INT    3            —  直接用将AX与自己资料解码
5267:05D6 FC             CLD                         ┐
5267:05D7 8FF7           POP    DI                   │
5267:05D9 71B4           JNO    058F                 │ 保护检查程式
5267:05DB 8103142A       ADD    Word Ptr [BP+DI],2A14│
5267:05DF E6EC           OUT    EC,AL                │ (不用 INT13h 而
5267:05E1 52             PUSH   DX                   │  直接使用自己的
5267:05E2 0830           OR     [BX+SI],DH           │  磁碟 I/O )
5267:05E4 031A           ADD    BX,[BP+SI]           │
5267:05E6 BAB467         MOV    DX,67B4              │
5267:05E9 9F             LAHF                        │
5267:05EA 5A             POP    DX                   ↓
5267:05EB F4             HLT
-D SS:220

5267:0200  40 04 10 02 00 02 00 00-00 01 98 05 0C 00 16 02  @...............
5267:0210  00 00 03 04 04 00 A0 11-48 11 21 C1 1C 30 9A 6B  ...... .H.!A.0.k
5267:0220  5C E4 6D 8C D7 F0 EF FF-A3 6D AA B3 24 58 53 45  \dm.Wpo.#m*3$XSE
5267:0230  3F E2 C4 DD 56 ED C1 74-4A 7A D8 8B 77 50 6D 18  ?bD]VmAtJzX.wPm.
5267:0240  1F 1F 54 08 3D B3 48 CC-56 31 F9 85 20 2B AF 9A  ..T.=3HLV1y. +/.
5267:0250  DC C2 5A CB F4 95 E1 E4-07 AC 66 8F 8C 4B 98 8F  \BZKt.ad.,f..K..
5267:0260  30 64 19 1A 0C 82 18 C0-33 9F 25 43 42 9F 8D DC  0d.....@3.%CB..\
5267:0270  00 CC 93 8B DA C7 24 42-C1 88 3F 7C F3 B4 41 9E  .L..ZG$BA.?|s4A.

  说明 : 该程式一开始就计算程式码 ,如果您使用了单步执行的话 ,程式就会被
         夹上[CC]码 ,造成计算总值不对 ,然後再杀掉 INT0-INT3 防止 DEBUG
         之类的程式追踪 ,如您有单步执行一定会动到 INT0-INT3 ,而造成某个
         特殊旗标(SS:20C)被改掉。
               5267:05CD 83EC04         SUB    SP,+04  ┐
               5267:05D0 83FB0C         CMP    BX,+0C  │
               5267:05D3 75ED           JNZ    05C2    ┘
         一次抓四个位元 ,比对是否有个 +0C 码,如果没有就继续 ,一但单步执
         行 ,这个 +0C 就会被改掉,造成无限回圈(当机) ,最後就跳到下一行去
         执行INT3(CS:598) ,不做任何比对AX暂存器 ,直接就当做是程式解码用
          ,若暂存器资料正确则解码後的程式才是正确的 ,不然就无法预知後果
         解码後 ,开始使用解码後的程式(磁碟 I/O)资料比对 ,如程式正确就把
         真正的主程式解码和将自己的保护程式清除掉 ,防止被人看见程式解码
         後的重要资料 ,最後还原 INT0-INT3 执行该程式。
         换句话说 ,您可以在 DEBUG 下执行该程式 ,但不能单步执行 ,因此您
         可以在执行当中连打 Ctrl-Break ,当它还原主程式後 ,正好您也取到
         控制权 ,将它中断掉了 ,这时您可以去找 PSP 去看主程式在那里 ,将
         破解档存回磁片(假如功力够 ,但笔者功力不足 ,无法办到 )。


    ┌————————————┐
    │  6-2  Sega 公司的游戏  │
    └————————————┘

4B37:0100 B80000         MOV    AX,0000    ┐
4B37:0103 CD13           INT    13         │ 这是笔者写的一个读取
4B37:0105 B80102         MOV    AX,0201    │ 该保护轨资料的程式
4B37:0108 BB0002         MOV    BX,0200    │
4B37:010B B90000         MOV    CX,0000    │ 读取第零轨零面第零个
4B37:010E BA0000         MOV    DX,0000    │ 额外磁区。
4B37:0111 CD13           INT    13         │
4B37:0113 80FC10         CMP    AH,10      │ 其资料放到 ES:0200
4B37:0116 75E8           JNZ    0100       │
4B37:0118 CD20           INT    20         ┘

第一次读该轨的资料如下 :
4B37:0200  44 45 44 30 31 32 33 34-35 36 37 38 44 8A C8 E8  DED012345678D.Hh
4B37:0210  08 C0 00 06 CE 44 23 40-00 38 D0 3C 38 1B 21 DE  .@..ND#@.8P<8.!^
4B37:0220  88 C0 00 00 00 00 00 00-00 00 00 00 00 00 00 00  .@..............
4B37:0230  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
4B37:0240  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
4B37:0250  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
4B37:0260  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
4B37:0270  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
第二次读该轨的资料如下 :
4B37:0200  44 45 44 30 31 32 33 34-35 36 37 38 44 EA 0A 0C  DED012345678Dj..
4B37:0210  26 38 84 4D 9C 8C 46 C9-3D 1C 0D 02 AE D4 03 BD  &8.M..FI=....T.=
4B37:0220  36 45 BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  6E==============
4B37:0230  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================
4B37:0240  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================
4B37:0250  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================
4B37:0260  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================
4B37:0270  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================

  除了标头的 "DED0123456789D" 以外资料都不一样 ,原来这就是著名的
  保护 Weak-Bit ,这种保护无法用磁碟介面卡制造出(运气好可以做出)
  但是由於该公司出版的游戏都用此法保护 ,并且使用到 INT13h 很容易
  被长驻程式骗过去。
  笔者附上 CRCEDIT.ASM 供大家参"拷"使用,可骗过该公司的游戏保护。
  (该软体不得贩卖图利 ,使用後有任何後遗症 ,恕不负责)。

PS : 软体的保护是为了使软体作者的权益受到保护 ,手上有合法软体者 ,
     不要到处散播 ,因为国内软体刚起步 ,也希望大家合力去保护它 ,如
     您是一位写软体的作者 ,就可以感觉出希望大家购买合法软体的心情
     (笔者不出版软体) ,当您没有能力购买原版软体时 ,使用拷贝版有点
     愧对於良心 ,如您有能力购买正版软体 ,希望您早日购买 ,不但用的
     安心 ,也有助於软体更新版本 ,让大家有更好的软体与更多的软体作
     者头入国内软体市场。

     附上的档案分别是 RDATA.COM : 将资料读到 CS:200 ,请用 DEBUG 来
                                  执行这个软体。
                    CRCEDIT.ASM : 常驻後 ,可以骗过该保护 ,制造出类似
                                  Weak-Bit 的效果,该程式没有侦测自己
                                  是否载入过,故可能被载入两次以上。
                                  (可以自己加减用 ,骗骗看好不好玩??)


  Soft Bugger (90/2) 597-1306 24Hr
    ┌——————————┐
    │   拷贝心得第五集   │
    └——————————┘

弟以勇者斗恶龙之游戏为说明 ,以前第一代保护与解法 :

保护 :                      解法 :

    设定磁碟参数 N=6            设定磁碟参数 N=6
       ↓                            ↓
   读取坏磁轨资料               读取 DQ.DAT (坏轨资料档)
       ↓                            ↓
    比对资料                      比对资料

由於两者都能读到坏轨资料 ,只不过第二者要事先将坏轨资料存为一个档案
(DQ.DAT) 较麻烦 ,不过以後可免 KEY DISK ,省事多了 !
弟以市面上的破解版举例说明 ,兹列出其 EGA 版程式一部份。
-D CS:385
4B70:0385  44 51 2E-44 41 54 00 88 44 03 B9       DQ.DAT..D.9

4B70:0361 1E             PUSH   DS
4B70:0362 0E             PUSH   CS
4B70:0363 1F             POP    DS
4B70:0364 90             NOP
4B70:0365 90             NOP
4B70:0366 90             NOP
4B70:0367 B8003D         MOV    AX,3D00    ┐
4B70:036A BA8503         MOV    DX,0385    │ 开启 DQ.DAT
4B70:036D CD21           INT    21         ┘      (坏轨资料档)
4B70:036F 06             PUSH   ES
4B70:0370 1F             POP    DS
4B70:0371 31D2           XOR    DX,DX
4B70:0373 B90020         MOV    CX,2000    ┐
4B70:0376 89C3           MOV    BX,AX      │ 读取档案
4B70:0378 B43F           MOV    AH,3F      │
4B70:037A CD21           INT    21         ┘
4B70:037C 72F3           JB     0371
4B70:037E B43E           MOV    AH,3E     ┐
4B70:0380 CD21           INT    21        ┘ 关档
4B70:0382 1F             POP    DS
4B70:0383 EB0A           JMP    038F
4B70:0385 44             INC    SP
以上程式取代了原来的 INT 7Fh(13h) 的读取保护轨资料过程。

弟再举例例说明 ,该游戏是勇者斗恶龙 ][ 的一部份程式 :

4B70:6E01 33C0           XOR    AX,AX         ┐
4B70:6E03 8ED8           MOV    DS,AX         │
4B70:6E05 A14C00         MOV    AX,[004C]     │ 将磁碟读取之 N 值
4B70:6E08 A3FC01         MOV    [01FC],AX     │ 改为 6 (正常为 2)
4B70:6E0B A14E00         MOV    AX,[004E]     │
4B70:6E0E A3FE01         MOV    [01FE],AX     │
4B70:6E11 C5367800       LDS    SI,[0078]     │
4B70:6E15 B006           MOV    AL,06         │
4B70:6E17 884403         MOV    [SI+03],AL    ┘
4B70:6E1A B80000         MOV    AX,0000       ┐ Reset Driver
4B70:6E1D CD7F           INT    7F            ┘
4B70:6E1F BF0800         MOV    DI,0008
4B70:6E22 1E             PUSH   DS
4B70:6E23 50             PUSH   AX
4B70:6E24 B83658         MOV    AX,5836
4B70:6E27 8ED8           MOV    DS,AX
4B70:6E29 C606E22800     MOV    Byte Ptr [28E2],00
4B70:6E2E 90             NOP
4B70:6E2F 881E7E28       MOV    [287E],BL
4B70:6E33 58             POP    AX
4B70:6E34 1F             POP    DS
4B70:6E35 57             PUSH   DI
4B70:6E36 B80001         MOV    AX,0100  ┐
4B70:6E39 050101         ADD    AX,0101  │ 读取第 27h 轨第 72h 号磁区
4B70:6E3C B97227         MOV    CX,2772  │ 第零面 ,将资料放到 ES:BX

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -