发信人: 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)
页面执行时间:206.606毫秒