发信人: Reinhard.bbs@bbs.sjtu.edu.cn (摘星的人), 信区: cnhacker
标  题: Yu Hwang 所著之破解教学集 [10/13] -- Alex 整理(转
发信站: 饮水思源站 (Fri Apr 25 19:54:23 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!sjtubbs
出  处: bbs.sjtu.edu.cn


哇...我又来啦! 请多多捧场喔...不收费啦!免惊<台语>:

    唉..我现在想了一下...嗯!记既然有『破解入门』 就应该谈谈『破解进阶』吧! 於是
我又开始走向遥遥无期的破解文件写作罗!

   目的: 是为了让已经 每期都看的User 从破解入门1-9集中已经学习到一些破解的理念
         接下去再写一些『破解进阶』 的技术方面来讨论 好让已有基础的朋友们 更进
         一步的走向更高技术 将不再局限於简单的密码破解说明 更举例出密码的保护方
         式及针对此密码破解时 应该注意的事项 并告知针对此密码快速破解的经验谈。

   说明: 本文开始将不引出 软体名称 只会将程式某段较具有讨论性质的地方引出来 并
         稍做解说保护手段及破解方式 不懂请自个翻书或查资料 在此不再多加序述。
         并会深入探讨其方式及解决方法。

  正题:  <1> 讨论一些密码防破手段 方式有下列几种:
           1.现在一些软体较俱有防破手段的无非是 重设 8259 IC 来造成连 『S-Ice
               GameTools,Debug,GameBuster,Fpe .....等多项除错软体及游戏辅助软体
               均无法动作 而会造成当机,或是游戏中断...等问题。

               为何重设 8259 IC 会造成这样的问题呢?
               第一点 请去找有关电脑硬体的书籍参考其动作方式
               第二点 重设8259 IC 若电脑环境发生错误时 会产生一些硬体中断 就会
                      与现在的环境所不同 而造成除错软体的失效。<大概是这麽样子
                      我不太会讲就是啦!>

               如何预防这类的防破手段呢??
               一般采用重设 8259IC来达到让除错软体失效 不只用在防密码破解 也都
               被广范的用到像:KEYDISK,KEYPROT...等 无非是不想让别人破解之软体。
               破解的方法当然是有罗..凡事有保护的软体 一定可以被破解出来的 只是
               时间的多寡罢了!
               您可以用『中断搬移方式』 来针对此项保护方式来破解 当然不是只有单
               单搬移就可以啦! 还要左闪右闪的躲地雷 蛮麻烦就是了! 你搬移中断向
               量表需重新将DEBUG 所指的中断向量表的位置重新指向你新搬移的绝对位
               址中方可 以後在除错的时候 也要留意一些呼叫 旧的中断向量表的一些
               功能也要稍加修改并指向你新般移的绝对位址中方可正常执行。

               附上一小程式  是将 0:0 搬移到 5000:0000 位址中
               请自个编辑成COM...利用EXE2BIN.EXE 转换成 COM 档
;------------------------------------------------------------------------------
CSEGBL          SEGMENT
                ASSUME  CS:CSEGBL,DS:CSEGBL
                ORG 100H

START:
                JMP     INT        ;跳到中断向量表的搬移动作

                .DATA
DESC_TABLE      LABEL   WORD
DUMMY           DW      4 DUP(0)
GDT_LOC         DW      4 DUP(0)
SOURCE_GDT      DW      0FFFFH
                DW      0000H
                DB      00H
                DB      93H
                DW      0000H
TGET_GDT        DW      0FFFFH
                DW      0000H
                DB      05H
                DB      93H
                DW      0000H
BIOS_CS         DW      4 DUP(0)
BIOS_SS         DW      4 DUP(0)
;=============================================================================

INT:
                ASSUME  CS:CSEGBL,DS:CSEGBL
                MOV     AX,CS
                MOV     ES,AX
                MOV     SI,OFFSET DESC_TABLE
                MOV     CX,200H
                MOV     AH,87H
                INT     15H
                INT     20H    ;结束并常驻
CSEGBL          ENDS
                END     START
;=============================================================================

   列出本人 中断向量表 在DEBUG 的状况...
C:\TOOLS>DEBUG
-D0:0
0000:0000  DB 0F 8F 33 F4 06 70 00-16 00 0D 18 F4 06 70 00   ...3..p.......p.
0000:0010  F4 06 70 00 03 01 D2 1F-43 EB 00 F0 EB EA 00 F0   ..p.....C.......
0000:0020  3F 01 44 33 10 00 73 33-57 00 0D 18 6F 00 0D 18   ?.D3..s3W...o...
0000:0030  87 00 0D 18 9F 00 0D 18-B7 00 0D 18 F4 06 70 00   ..............p.
0000:0040  0C 01 D2 1F 4D F8 00 F0-41 F8 00 F0 FC 17 5D 19   ....M...A.....].
0000:0050  6B 0B 3B 15 1B 01 D2 1F-0F 01 D2 1F 12 01 D2 1F   k.;.............
0000:0060  00 E0 00 F0 C7 18 5D 19-6E FE 00 F0 9F 01 34 14   ......].n.....4.
0000:0070  D7 01 A6 1F 22 1E 00 C0-22 05 00 00 3C 5F 00 C0   ...."..."...<_..
-D 5000:0000
5000:0000  DB 0F 8F 33 F4 06 70 00-16 00 0D 18 F4 06 70 00   ...3..p.......p.
5000:0010  F4 06 70 00 03 01 D2 1F-43 EB 00 F0 EB EA 00 F0   ..p.....C.......
5000:0020  3F 01 44 33 10 00 73 33-57 00 0D 18 6F 00 0D 18   ?.D3..s3W...o...
5000:0030  87 00 0D 18 9F 00 0D 18-B7 00 0D 18 F4 06 70 00   ..............p.
5000:0040  0C 01 D2 1F 4D F8 00 F0-41 F8 00 F0 FC 17 5D 19   ....M...A.....].
5000:0050  6B 0B 3B 15 1B 01 D2 1F-0F 01 D2 1F 12 01 D2 1F   k.;.............
5000:0060  00 E0 00 F0 C7 18 5D 19-6E FE 00 F0 9F 01 34 14   ......].n.....4.
5000:0070  D7 01 A6 1F 22 1E 00 C0-22 05 00 00 3C 5F 00 C0   ...."..."...<_..

           2.第二种方法是 当掉『INT1 OR INT3....等』中断服务常式 来防破解
               目的是为了当掉DEBUG

               解决方式 用 搬移向量表 就可以通行无阻的顺利破解完成罗!

           3.第三种方法是 程式被外部程式压缩过 像PKLITE,LZEXE,EXEPACK....等
               目的是为了让你无法用PCTOOLS修改原程式码 不过若直接在记忆体中修改
               也是可以的。

               解决方式 可用UNP 反压缩回来就可以罗! 格式:UNP 档名.附属档名 即可

           4.第四种方式 程式在编写过程中 已经有经过编码处理过
               目的是为了让你无法用PCTOOLS修改原程式码 不过若直接在记忆体中修改
               也是可以的。

               解决方法 可用EXESHAPE 来反写回去就可以罗!  我引出EXESHAPE 的用法
                        可让大家学习。

     EXESHAPE Non-Registered Version 1.20
              ( C )Copr. Min Jei Chen
                 All Rgihts Reserved

        本版修改部份简介:
                (A) 可处理超过 64K 的执行档重新定位表
                (B) 可处理刚好夹於 64K 与 64K 之间的定位部份
                (C) 增加内建字型
                (D) 画面重新规划
                (E) 档案输入长度增长
                (F) 增强防止被 Trace 出原档

 EXEWRITE, EXEBACK, EXEMAKER, S-WRITE...等, 这些都是因为商业版压缩所产生
 的反压缩工□, 但这些软体不是效率太差, 就是使用者界面不□亲和力等.
 如:输入过的暂存器值不能够再修改或是档案覆盖等问题. 现在您将不用担心这
 些问题, 因问 EXESHAPE 1.20 全部包办啦 !!

 EXESHAPE, 一个用 Assembly 写成的反压缩工□, 无论是速度, 正确率, I/O 效
 率, 强化使用者界面... 都比上述的反压缩工□更胜一畴, 而且加上自动判断档
 案长度是否相同; 自动判断 EXE 档的长度, 因为 (SS*10H+SP) - (DS*10H+100H)
 所算出来的档案长度不是很准, 此项功能可帮您算出最精确的 EXE 档长度.

__________________________________________________________
_____________________ _
测试档案: XPREAD.EXE (3.0)

STEP 1:
        用 DEBUG 或 SYMDEB 载入 XPREAD.EXE

C:\XPRESS>DEBUG XPREAD.EXE
-U
241C:0012 06            PUSH    ES   <-- LZEXE 的开头
241C:0013 0E            PUSH    CS
241C:0014 1F            POP     DS
241C:0015 8B0E0C00      MOV     CX,[000C]
241C:0019 8BF1          MOV     SI,CX
241C:001B 4E            DEC     SI
241C:001C 89F7          MOV     DI,SI
241C:001E 8CDB          MOV     BX,DS
241C:0020 031E0A00      ADD     BX,[000A]
241C:0024 8EC3          MOV     ES,BX
241C:0026 B400          MOV     AH,00
241C:0028 31ED          XOR     BP,BP
241C:002A FD            STD
241C:002B AC            LODSB
241C:002C 01C5          ADD     BP,AX
241C:002E AA            STOSB
241C:002F E2FA          LOOP    002B
241C:0031 8B160E00      MOV     DX,[000E]
-U
241C:0035 8AC2          MOV     AL,DL
241C:0037 29C5          SUB     BP,AX
241C:0039 8AC6          MOV     AL,DH
241C:003B 29C5          SUB     BP,AX
241C:003D 39D5          CMP     BP,DX   <--- 检查 CRC, 用意在防止追踪
241C:003F 740C          JZ      004D
241C:0041 BA9101        MOV     DX,0191
241C:0044 B409          MOV     AH,09
241C:0046 CD21          INT     21
241C:0048 B8FF4C        MOV     AX,4CFF
241C:004B CD21          INT     21
241C:004D 53            PUSH    BX
241C:004E B85300        MOV     AX,0053
241C:0051 50            PUSH    AX
241C:0052 CB            RETF            <--- 解压缩程式进入点
241C:0053 2E            CS:
241C:0054 8B2E0800      MOV     BP,[0008]
-G3F

AX=00FE  BX=3C50  CX=0000  DX=FE0D  SP=007E  BP=FE65  SI=FFFF  DI=FFFF
DS=241C  ES=3C50  SS=3E62  CS=241C  IP=003F   NV DN EI PL NZ AC PO NC
241C:003F 740C          JZ      004D
-RF
NV DN EI PL NZ AC PO NC  -ZR
-G52

AX=0053  BX=3C50  CX=0000  DX=FE0D  SP=007A  BP=FE65  SI=FFFF  DI=FFFF
DS=241C  ES=3C50  SS=3E62  CS=241C  IP=0052   NV DN EI PL ZR AC PO NC
241C:0052 CB            RETF
-T

AX=0053  BX=3C50  CX=0000  DX=FE0D  SP=007E  BP=FE65  SI=FFFF  DI=FFFF
DS=241C  ES=3C50  SS=3E62  CS=3C50  IP=0053   NV DN EI PL ZR AC PO NC
3C50:0053 2E            CS:
3C50:0054 8B2E0800      MOV     BP,[0008]
CS:0008=17C7
-U16F
3C50:016F 8BC3          MOV     AX,BX
3C50:0171 8B3E0400      MOV     DI,[0004]
3C50:0175 8B360600      MOV     SI,[0006]
3C50:0179 01C6          ADD     SI,AX
3C50:017B 01060200      ADD     [0002],AX
3C50:017F 2D1000        SUB     AX,0010
3C50:0182 8ED8          MOV     DS,AX
3C50:0184 8EC0          MOV     ES,AX
3C50:0186 31DB          XOR     BX,BX
3C50:0188 FA            CLI
3C50:0189 8ED6          MOV     SS,SI
3C50:018B 8BE7          MOV     SP,DI
3C50:018D FB            STI
3C50:018E 2E            CS:                 <--- 解压缩完毕, 准备跳到原始程式
3C50:018F FF2F          JMP     FAR [BX]         开头.
-G18E

AX=0C45  BX=0000  CX=0000  DX=F000  SP=4E20  BP=0000  SI=3FCD  DI=4E20
DS=0C45  ES=0C45  SS=3FCD  CS=3C50  IP=018E   NV UP EI PL ZR NA PE NC
3C50:018E 2E            CS:
3C50:018F FF2F          JMP     FAR [BX]
CS:0000=0034
-T

AX=0C45  BX=0000  CX=0000  DX=F000  SP=4E20  BP=0000  SI=3FCD  DI=4E20
DS=0C45  ES=0C45  SS=3FCD  CS=0C55  IP=0034   NV UP EI PL ZR NA PE NC
0C55:0034 9A00006B36    CALL    366B:0000   <--- 原始程式开头
-U
0C55:0034 9A00006B36    CALL    366B:0000
0C55:0039 9A1A0BF033    CALL    33F0:0B1A
0C55:003E 9ABA066B31    CALL    316B:06BA
0C55:0043 9AC2010531    CALL    3105:01C2
0C55:0048 9A0D28332E    CALL    2E33:280D
8C55:004D 9A940A892D    CALL    2D89:0A94
0C55:0052 9AEE248824    CALL    2488:24EE
-R
AX=0C45  BX=0000  CX=0000  DX=F000  SP=4E20  BP=0000  SI=3FCD  DI=4E20
DS=0C45  ES=0C45  SS=3FCD  CS=0C55  IP=0034   NV UP EI PL ZR NA PE NC
0C55:0034 9A00006B36    CALL    366B:0000

追踪到程式解压缩之後, 以 (SS*10H+SP) - (DS*10H+100H) 算出档案长度或自己猜一个
较大的长度并存档, 并且记下 CS,IP,SS,SP,DS 等暂存器的值 !!
例如此程式:
             (3FCD*10H+4E20) - (0C45*10H+100H) = 385A0 (HEX)
                                                 ^^^^^ 此长度记下来, 等一下还
                                                       要用一次.
-RBX      <--- 将 HIGH WORD 填入 BX
BX 0000
:3

-RCX      <--- 将 LOW WORD  填入 CX
CX 0000
:85A0

-N PASS1  <--- EXE 档不能直接写入, 所以另更名为 PASS1

-W DS:100   <--- PSP 底部紧接著程式码, 此时 DS 指向 PSP 开头, PSP 占 100H
                 Bytes, 所以从 DS:100 开始写起

Writing 385A0 bytes  <--- 共写入的 Bytes

-Q   <--- 跳出 DEBUG

__________________________________________________________
_____________________ _
STEP 2:
        随便执行一个常驻程式(或是执行比 DEBUG 大的除错程式, 如 SYMDEB), 用意在
改变记忆体环境, 如此 EXESHAPE 才可找出相异之处, 再重覆 STEP 1, 但此次只须存档.
(Registered Only), 若您手中的 EXESHAPE 为 Non-Registered 则需再记下 CS 的值.

C:\XPRESS>PAGEMAKE   <--- 笔者写的画面辅助功□, 可用於 BBS,
修改程式码等,您刚看
                          到的 DEBUG 画面就是它抓下来的, 它是一个常驻程式

C:\XPRESS>DEBUG XPREAD.EXE
-G3F
-RF
NV DN EI PL NZ AC PO NC  -ZR
-G52
-T
-G18E
-T
AX=0DF4  BX=0000  CX=0000  DX=F000  SP=4E20  BP=0000  SI=417C  DI=4E20
DS=0DF4  ES=0DF4  SS=417C  CS=0E04  IP=0034   NV UP EI PL ZR NA PE NC
0E04:0034 9A00001A38    CALL    381A:0000

此时将刚刚记下来的档案长度再填入 BX:CX, 若您的 EXESHAPE 为注册版就不需要
再记任何暂存器的值, 若为未注册版则需再记下 CS 的值.

-RBX
BX 0000
:3
-RCX
CX 0000
:85A0
-N PASS2
-W DS:100
Writing 385A0 bytes
-Q

__________________________________________________________
_____________________ _
STEP 3:
        1. 记忆体需求量: 200K
        2. 执行 EXESHAPE
        3. 未注册版的 EXESHAPE 前面会有一段 Delay, 笔者跟 4DOS 学的.

                           EXESHAPE 注册版的主画面
+---------------------------------------------------------
--------------------+
|      =========== ===   === =========== ------------ SHARE-WARE
-------------+
|     ===         ===   === ===         ------------------
--------------------+
|    ===          === ===  ===         ======= ==   ==  =====  =======
=======|
|   ===========    ===    =========== ==      ==   == ==   == ==   == ==
|
|  ===          === ===  ===         ======= ======= ======= ======= =======
|
| ===         ===   === ===              == ==   == ==   == ==      ==
|
|=========== ===   === =========== ======= ==   == ==   == ==      ======= +
|
+++++++++++++---------------------------------------------
--------+++++++++++++
||||||||||||| * Shape of Executive Files Interface Version 1.20 *
|||||||||||||
+++++++++++++---------------- Files Process Area ---------
--------+++++++++++++
| The First     Filename : PASS1         <-- 刚刚第一次写入的档案
|
| The Second    Filename : PASS2         <-- 第二次写入的档案
|
| The EXEcutive Filename : XPREAD.EXE    <-- 所要建立的 EXE 档的档名
|
+-------------------------- Segment Registers Area -------
--------------------+
|       CS Register : C55 H   IP Register : 34  H   DS Register : 0C45H
|
|       SS Register : 3FCDH   SP Register : 4E20H 刚刚所记下来的暂存器值
|
|    * New method for segment registers area to registered version only *
|
|  Use Keys : [TAB] Toggle & Enter Key  [ENTER] Enter Key  [ESC] Exit to Dos
|
|       Thanks for your registration. Registered to (   Min Jei Chen   )
|
|   (c)Copyright >> Min Jei Chen << 1992~95 all rights reserved. 11/27/1992
|
+----------------------------- Message Echo Area ---------
--------------------+
| Message echo : Set filename and registers value .....
|
+---------------------------------------------------------
--------------------+

附注:
        1. 在 EXESHAPE 输入的任何时後皆可按 ESC 回到 DOS.

        2. 在输入暂存器值时, 可按 TAB 键切换您所要输入的暂存器值, 若不输入, 而
           直接按 ENTER 键, 程式会以 0 计算, 若已有输入则以输入值计算.
           若您输入满四位数, 则程式会自动帮您切换暂存器.
           如: 上述的 IP 值为 34, 您可以输入 0034 或 034 或 34 等表示法, 唯一
           不同的是第一个 0034 因为满四位数, 程式会自动帮您切换暂存器, 省去您
           按 ENTER 键的步骤, 其馀两个均要按 ENTER 键确定.

        3. 在全部暂存器输入完之後, 请将游标移到 SP Register 的地方, 若是未注册
           版则移到 2st CS Value 的地方, 再按 ENTER 键, 程式会问您是否确定, 按
           N 表不确定, 则继续修改暂存器值, 若按 Y 表确定则执行反压缩工作.

        4. 稍等一下後, Message echo (讯息回应栏) 会出现:
           Expand a compressed file successfully. (此时表示反压缩成功)
-------------------------------------------------------------------------------

               附带一题就是 若程式有利用一些 INT ? 服务常式来进行解编码的动作时
               若您不注意的话 将导致 程式码不正确 或是 造成当机....等状况发生。

               解决方法 可配合 搬移中断向量表的功能 来顺利反编码 找到程式进入点

  其实尚有蛮多保护方式....留到下次再为您补述。这集先到此为止...请期待下集推出。


    朋友俱乐部 站长:Yu Hwang <破解技术交流网 总站> TEL:039-281739 24HR 高速

    欢迎流传 请勿修改本文件           01/17/1994  作者:俞煌男

    诚意邀请各站台加入 『破解技术交流网』 请填好之後 利用就近的HUB 送来即可。

 破解技术交流网  申请表格:

 站台<英文名称>:
 站台<中文名称>:
 系统操作员<ID>:
 建站系统:
 是<私人站>或<公开站>:
 开站时间:
 最高速率:
 站台电话:
 家中电话:
 公司电话:
 系统操作员<中文姓名>:
 系统配备:
 魔电厂牌:
 系统操作员<生日.年龄>:
 职业:
 网路时间:
 预定什麽时候开始接信:
 建议:

 请有心加入新网的站台 填写好之後 送来本站即可。

 ECHO KEY           共 22区            信管人员ID
 ------------------------------------------------------------------------
 破解码公怖区       CRACK-CODE
 破解技术讨论区     CRACK-CRACK          Yu Hwang(朋友俱乐部)
 一般信件讨论区     CRACK-GENERAL
 建站实务讨论区     CRACK-BBS
 中文系统讨论区     CRACK-CHINESE
 软体讨论区         CRACK-SOFT
 新站广告区         CRACK-NEWBBS
 中古买卖区         CRACK-SALE
 硬体讨论区         CRACK-HARD
 音乐/音效讨论区    CRACK-MUSIC
 快信讨论区         CRACK-MESSAGE
 打屁瞎掰讨论区     CRACK-TALK
 热门职棒讨论区     CRACK-BALL
 病毒讨论区         CRACK-VIRUS
 交友专区           CRACK-FRIEND         Steve You(朋友俱乐部)
 心情讨论区         CRACK-MOOD
 站长讨论区         CRACK-SYSOP         ;不开放给User
 网路测试区         CRACK-TEST          ;不开放给User
 HUB xxxx区         CRACK-HUBxxxx       ;由HUB 自定信区 若跟总站接 都自定100
 魔电讨论区         CRACK-MODEM          也就是你要设 CRACK-HUB100 其它HUB自设
 游戏功略心得发表区 CRACK-GAME
 程式语言讨论区     CRACK-LANGUAGE

 欢迎有兴趣的站台来加入本网的行列。

 破解技术交流网      加 入 站 名 列 表     站 台 电 话     开放时间    速   率
------------------------------------------------------------------------------
HOST     39:39/1       朋友俱乐部总站    TEL:039-281739      24HR        19200
HUB100   39:39/100     外星游龙资讯站    TEL:039-353950      24HR        19200
         39:39/101     天蝎星资讯站      TEL:039-357940      24HR        14400
         39:39/102     瑞智资讯交流站    TEL:039-778657      24HR        14400
         39:39/103     雷鸟资讯交流站    TEL:039-322865    23:00-07:00    2400
         39:39/104     伊甸园资讯站      TEL:039-889981      24HR        14400

台北地区
HUB200   39:39/200     友谊资讯交流站    TEL:02-7236293    16:00-08:00    9600

HUB300   39:39/300   遨游鹏资讯交流站    TEL:02-8747279      24HR        14400
         39:39/301     魔法王国交流站    TEL:02-5991763      24HR        19200
         39:39/302   坏小子资讯交流站    TEL:02-2190318      24HR        14400
         39:39/303     熊座资讯交流站    TEL:02-9344309      24HR        14400
HUB500   39:39/500     麦帅资讯交流站    TEL:02-9512743    17:00-21:00   14400
PVT<私>  39:39/501     光台资讯交流站    TEL:02-222xxxx      xxxx        14400
         39:39/502 佩雅达恒星交流广场    TEL:02-9201852      24HR        14400
         39:39/503 疯狂小子资讯交流站    TEL:02-8168353      24HR        19200
         39:39/504   超时空资讯交流站    TEL:02-8752787      24HR        14400

桃园地区
HUB400   39:39/400     东方快车交流站    TEL:03-3352798      24HR        14400

花莲地区
HUB600  39:39/600  终极保镳资讯交流站    TEL:038-348267      24HR        14400

香港地区
HUB700  39:39/700      情信资讯交流站    TEL:852-6183163     24HR        14400

  请利用就近的HUB 送来您的申请表即可。
--


                                                    沉默的人
                                                 Reinhard Young

※ 来源:·饮水思源站 bbs.sjtu.edu.cn·[FROM: 202.96.212.29]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:210.730毫秒