找回密码
 加入华同
搜索
黄金广告位联系EMAIL:[email protected] 黄金广告[email protected]
查看: 1989|回复: 2

【转帖】偷天换日——光盘版游戏完美转换硬盘版

[复制链接]
发表于 2006-8-27 12:52:20 | 显示全部楼层 |阅读模式
【转帖】偷天换日——光盘版游戏完美转换硬盘版
& A' p% e3 ?" C0 F
偷天换日——光盘版游戏完美转换硬盘版 8 e% M, l  R# ~/ m( C' X
电脑游戏玩家都遇到过这样的问题,很多游戏在运行时仍需要插入光盘(“完全安装”情况下竟然也是如此!?)。如果光盘不慎遗失或光驱故障,面对安装好的游戏你是否就无计可施了呢?你可能会选择从网上下载高手制作的免CD补丁,可是并非每个光盘版游戏都能找到或能用这样的补丁。本文就要让你扮演一回高手的角色,自己来打造完美的硬盘版游戏。
  f" [# l7 i+ g/ n2 h: ^4 n8 L2 C特别声明:本文目的只是为了让购买正版游戏的用户能够在不磨损光驱的情况下方便地进行游戏,以下修改例子中皆隐去了部分游戏名称。! O1 s6 D/ C/ W3 i/ W  I+ T+ h' S
并不是每个光盘版游戏都能够转换为硬盘版,以下列举了一些可修改的游戏类型和特征,并给出实际修改过程。$ y. v3 [/ M5 k, y% ]
实战1:去除光盘检测; ^$ C  l2 S7 Q; v* m6 c+ N1 q
游戏特征:游戏所有文件均已安装至硬盘中,仅在游戏开始时出于版权保护目的检测一次光盘。( C' _" t7 t* B$ S9 L! L
修改原理:在游戏程序开始位置有一段检测光盘的代码,最简单的检测方式就是从光盘中读取特定文件,没有读到则弹出提示框并强制退出游戏,如果读到并确认为该游戏光盘,则程序跳转到游戏开始处。! w" Z6 ~3 M4 V& _9 N$ x
修改难度:★★★5 H; H+ X1 u1 p% M! R7 b$ _+ W
所需工具:W32DASM(下载地址:http://www.pediy.com/tools/Disassemblers/W32Dasm/W32dsm8.93.rar),RTA(下载地址:http://www.pediy.com/tools/Editors/RTA/rta.zip)。" R! S; o0 \# }  ^* }1 a" @: T
第一步:下载W32DASM并解压,运行解压目录中的W32dsm8.93+.exe。选择W32DASM主界面菜单“Disassembler→Open File to Disassemble”(反汇编→打开需要反汇编的文件),在文件选择框中选择打开《××物语》安装目录下的zweipet.exe。
9 T4 \3 b! o) ^4 \  @( g( v2 S9 i第二步:选择菜单“Functions→Imports”(函数→输入表),在弹出窗口中有一个列表框详细列出了程序中用到的API函数。在窗口上方文本框中输入“GetDriveType”(不含引号)并点击右侧“Search”(搜索)按钮,下方列表框中就选中了该函数所在行,接着双击它(见图1)。$ v) E/ |- u8 S, C
" f4 ^4 b# x4 ?* w' L6 y3 _8 B- x
小提示
/ A3 S8 K; R: _; d  n9 fAPI是程序调用系统功能的函数接口,比如程序要检测光盘,就必须使用GetDriveType函数来获得盘符的设备类型。因此找到GetDriveType函数在程序中的调用位置,就一定能在附近找到光盘检测代码。& s1 \8 d2 L8 b' \: T, A
第三步:在W32DASM主界面的代码显示框中就以高亮方式选中了GetDriveType函数的调用位置,将代码框稍微往下拉一点就能看到光盘检测代码了(见图2)。代码框最左侧的蓝色数字是代码的位置,如本文中在zweipet.exe中找到GetDriveType的位置为0048843,而光盘检测代码的位置在004088BD处。以下是代码简要注释:; l% t, H' M: ?: r
3 x. g% W$ j" d5 l
2:提示“插入光盘”的光盘检测代码2 G  K/ A, w. O3 x6 C
:004088BD mov eax,dword ptr[esp+14]7 ^# g) }- |0 w
:004088C1 test eax, eax //检查是否有光盘& t* G( P0 D) }; x
:004088C3 jnz 004088DB //有光盘则跳转到004088DB位置(即游戏开始位置),没有光盘则不跳转7 `7 \' B% J+ p/ T4 L
:004088C5 push 000000002 P" d+ N( o8 f7 M
:004088C7 push 004289347 Z1 K- U; T( ?" k2 L7 H9 k
:004088CC push 00428919
2 o7 x" b& E5 \! v; Y3 x:004088D1 push 000000002 I1 L+ n$ J  O' r
:004088D3 call dword ptr[004233EC] //弹出一个提示窗口“请插入××物语的游戏光盘”0 \: E1 D5 p8 m1 y, @+ p( m
:004088D9 jmp 00408933 //程序转向代码结束部分,也就是强制退出游戏
  M7 _( U- d+ B1 |: r(见图3): l8 f8 j1 J& o  P, g4 |
图3:004088D3位置处的代码执行时会弹出此提示框  f- g- j/ U( L
第三步:可以看到在004088C3处决定了程序走向(是继续下一行代码还是跳转到004088DB处开始游戏),如果能让程序不加判断直接跳转到004088DB,就等于跳过了光盘检测。关闭W32DASM,打开刚才下载的RTA,选择菜单命令“File→Open File”(文件→打开文件),同样也是打开zweipet.exe。RTA界面立即显示出zweipet.exe的汇编程序代码。最左侧的红色数字为代码位置,边上蓝色十六进制数为该行代码的机器码,右侧黄色文字则为汇编代码。找到要修改的位置004088C3,可这句汇编代码为“JNZ SHORT 4088DB”,将其修改为“JMP SHORT 4088DB”(不含引号,机器码为EB16)。
! @0 }! p: H8 t(图4 修改前)
  S' \$ ?% ?# H1 |/ G
& L# y: h- }- i- ?7 q: _: u! x: A5 \; m5 `
你知道吗——JNZ和JMP是什么意思?
1 L3 _0 O/ {/ G" X# tJNZ为有条件转移指令,先检测一个条件,如果满足则跳转,否则继续执行下一行代码。而JMP则为无条件转移指令,不检测任何条件而直接跳转至需要转移的位置。
6 q% V, A3 ~+ [3 v- G. l第四步:选择菜单命令“File→Save File”(文件→保存文件),将修改成果保存。重新运行“××物语”,不再有讨厌的“请插入××物语的游戏光盘”提示框出现,没有光盘也能玩!' e" c5 ]/ z5 i! P' R  r  G* `
实战2:把光盘文件转移到硬盘1 o, J3 |, e3 H0 ?! M! y
游戏特征:硬盘上仅有部分游戏文件,没有复制的光盘文件的路径记录在文件或注册表中。' [8 N- Q% {% y4 `" D# V3 P5 u
修改原理:将需要从光盘中提取的内容复制到本地硬盘中,并修改路径记录使游戏程序从本地硬盘进行读取。
3 U" C2 Y! _  y1 C! o( Y典型游戏:《××医院》 修改难度:★★
4 @( f, ]8 E! u( K6 D6 B所需工具:记事本7 B7 B- Y8 B# R7 X5 D
第一步:《××医院》在安装过程中即使选择“完全安装”,在运行时也需要插入光盘,并且插入光盘后确实在游戏过程中有较大数据量的读取,故判断其有一部分游戏文件没有安装到本地硬盘中。插入该游戏光盘,浏览其下文件并与硬盘中的游戏安装目录中的文件作比较,发现有几个目录中的文件数都不同,但光盘与硬盘的目录结构一致。% I. i9 Y% t7 ]: e
第二步:从光盘中将缺少的游戏文件复制到硬盘中的游戏安装目录中(可用“覆盖”),再次运行游戏却发现仍提示插入游戏光盘。因为游戏程序并不知道你把缺少的游戏文件复制到硬盘中了,仍然去寻找光盘中的文件。那么怎么能让游戏程序知道呢?我们需要修改游戏程序的“记忆”,寻找游戏设置文件(一般为文件名中包含“Config”、“cfg”、“settings”等关键字的文件),如本例中的游戏的设置文件为游戏安装目录下的Hospital.Cfg,用“记事本”打开此文件,将“INSTALL_PATH=”后的路径修改为你游戏的安装路径(即硬盘中存放刚才复制过来的缺少文件的路径,本例修改后的行如“INSTALL_PATH=C:\Program Files\Bullfrog\Hospital\”),保存并关闭文件。! k  D( N. B: Y; }7 N5 E+ H  s
第三步:再次运行游戏,发现不再需要插入光盘了。# X' l) B/ W! w; i4 u% ]
修改过程总结
6 b- i5 j* B4 O; l/ ~2 {+ ^在给出以上实例后,我们比较概括地总结一下修改步骤。7 t* K* x. ~2 \! [
首先通过文件比较及光驱读盘时间等来判断游戏的类型是A还是B。; T6 r- x3 [+ |2 z  N1 }
A.仅检测光盘,硬盘中已安装所有游戏文件。/ R8 T9 Y; h: v9 A& t$ g. O: n
第一步:用W32DASM查看游戏程序文件的汇编程序代码,找出光盘检测部分的代码位置。
5 V$ M8 }, F5 ?) A第二步:分析这段代码,找出条件转移指令JNZ的位置。) a  ^7 D. p3 t; }4 f
第三步:用RTA编辑游戏程序文件,查看刚才记录下的JNZ的位置,并将其修改为JMP(无条件转移指令)。! @0 k% @  D4 i7 b( u3 E% W
小提示) I( r( D1 \$ s, H7 P
以上情况仅用于未做进一步加密的游戏,有些游戏在光盘检测代码处使用了“花指令”或“动态加密”技术,则无法用此法修改。
% I7 d: m  z- W9 ?6 ]% Q$ wB.硬盘中的游戏文件不全,需要从光盘中读取。
! O: z; a( q' F8 V. ?第一步:比较硬盘中的游戏文件数与光盘中的文件数,将硬盘中缺少的文件复制到游戏安装目录相应位置中(也可复制到其他目录并在第三步的路径处做相应的修改,但出于兼容性考虑,强烈建议复制到游戏安装目录)。
% |4 Q  F2 k3 A: Q  c( U小提示
- B1 P4 K) b4 E. w5 g: _有一些游戏对文件做了加密隐藏,用此法修改路径后会出现类似“缺少文件”的提示。
- y: \& O  ^" Z' m3 V- e第二步:根据文中给出的特征识别法寻找游戏用以存放光盘文件路径的设置文件(或注册表位置)。+ e) \+ X. q4 P# |/ F7 Z" g1 @3 ^
第三步:编辑该设置文件,并将其中的文件存放路径修改为游戏安装目录。
发表于 2006-8-27 19:59:20 | 显示全部楼层
现在的starforce是光盘加密的基本方法,而且这个软件也在升级,特别是如果你的电脑中有虚拟光驱的话,就会阻止你运行游戏,这个就需要热心的高手提供免cd补丁。谢谢分享文章。
回复

使用道具 举报

发表于 2006-9-3 19:00:26 | 显示全部楼层
Starforce 应该说是个不错的加密技术,因为它确实难以破解和复制,但是由于它的负面影响也使得它也成为了相当垃圾的技术:! K7 W* v% n, B# z" ?3 M

9 A& y' `  J& U3 n/ w难破解难复制应该算是它的优点,必竟做加密的目的就是为了防止盗版,但这样会给正版用户带来很多麻烦:2 M+ y* V# \. d  ~3 e( v
1. 可能和目前光驱不兼容(表现在不能正确识别正版光盘,虽然官方说正在努力改进,但已售出的软件怎么办?难道出现兼容问题就扔掉?); X  s; P3 l  g+ V0 a# S* F/ v
2. 可能和未来的新接口光驱不兼容(比如网上有人反应说其现有的版本就和SATA光驱不兼容,很多经典游戏可是百玩不厌的,很多年后还会有重新品味的可能,难道以后硬件升级了这些游戏就不能玩了吗?或者必须找一台古董机来玩?恐怕光驱的寿命难有这么长吧!到时老光驱不能使了,新光驱又不兼容......)% [8 `% I( v4 w
3. 正版用户不能备份自己的正版光盘,导致自己的投资不能得到有效保障(虽然光盘相对软盘具有不易磨损等众多优势,但不易磨损不等于不磨损,而现在随着光盘制作成本降低,质量也越来越差,再加上用户使用中不可能把它当成钻戒一样爱惜,所以事实中光盘的磨损现象还是相当严重的!因此合法备份光盘就成为了保护用户投资的唯一方法,但是有了这种防复制技术,用户这唯一的方法也就被剥夺了。反到再看下盗版光盘制造商方面,这种光盘确实不容易被复制,但是正版软件又是如何生产的呢?也就是还是有复制的方法的!对于一般用户,想复制比登天还难,但对于盗版商可就不一样了,盗版商在利益的驱动下,会完善自身的技术能力,完善自己的光盘生产线,从理论讲他们是可以做到真正1:1复制这种光盘的,或者他们会想尽方法去破解这种技术,必竟一种技术再难破解也不是不可能被破解,那么盗版将仍然可能存在)/ d  W  j5 X' m7 @1 ?1 X
- `2 @, ~! @& [' j1 a1 b
因此,这种技术不是保护正版用户利益的技术,而仅仅只是保护正版销量的方式!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入华同

本版积分规则

Archiver|手机版|小黑屋|华人同志

GMT+8, 2026-11-1 18:51 , Processed in 0.026669 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表