论文部分内容阅读
■策划/《电脑爱好者》编辑部 ■监制/狂ρκ■撰稿/CMAG(上海) ■图/极乐鸟(北京)
一直以来,绝大多数人都认为“电脑游戏,只能让人玩物丧志”。今天我们要颠覆这种观点,告诉大家“学电脑,就该从玩电脑游戏开始”!
这次的任务是和我们的游戏主角衰衰,一起进入RPG世界,并最终打败BOSS——“游戏”。原来“游戏”是个那么可怕的怪物,它的弱点非常隐蔽,只有了解了内存寻址、程序破解、系统消息等一堆知识才有可能打败它。
MISSION1 历史之门
DESCRIPTION:“游戏”这个像八爪鱼一样的怪物为我们的主人公设置了第一道障碍,它的一根触须化作了“历史之门”,上面密密麻麻地列出了很多历史谜题。
TARGET:持有“入场券”道具(没有的人看上一页-_-),破解所有历史谜题。
我显然没料到拿着入场券竟然还不能进入RPG世界,正在焦急之时却发现一旁的衰衰异常镇静,睿智的眼神已经在迅速地扫描着巨大石板上的文字。
1958年—第一个电脑游戏诞生。它并不是“超级玛莉”,而是物理学家威利·海金博塞姆利用电脑和示波器做的一个简陋的演示游戏(见图1),名为“PONG”(乒乓)。
1962年—第一个真正的电脑游戏诞生。当麻省理工学院的格拉茨、拉塞尔等7名大学生,在DEC公司PDP-1小型机上设计出了真正能由玩家操控的《空间大战》(Space War)后(见图2),电脑游戏时代真的到来了。
1965年—第一个鼠标诞生。发明鼠标的并不是微软也不是罗技,而是一位叫做恩格尔巴特的电气工程师,你能根据早期手机(大哥大)的形状想象出第一个鼠标的样子吗(见图3)?感谢他!他让我们玩上了CS。
1995年—3D游戏时代到来。感谢3Dfx,它带来廉价又强大的Voodoo,让大家真正玩上了3D游戏。
1999年—第一款采用GPU的显卡问世。NVIDIA发布了采用了GPU概念的Geforce 256,将显卡的运算能力推到了一个新的高度,同时降低了CPU在游戏中的地位。
2005年—PCIE接口的显卡全面反攻。AGP接口在把PCI接口的显卡拉下马多年之后,终于遭遇了逆袭,PCI-Express(简称“PCIE”)在2005年全面攻陷了AGP显卡的市场。
打开了历史之门,眼前的景象让2人惊呆了。这是什么!?
游戏疑难问题TOP5
1.我玩游戏的时候画面四周有黑边,应该怎么办?
答:这是由于游戏程序输出的画面分辨率与屏幕当前的分辨率不统一造成的,不少老游戏只能以800*600的方式运行,而屏幕的分辨率却是1024*768。一般情况下游戏会自动调整屏幕,但不少网上下载的破解版由于修改不佳或者打包的问题,不能自动调整而出现黑边,解决方法是进入游戏前手动将屏幕分辨率改为800*600。
2.弹出游戏后再切换回来没有声音
答:游戏过程中由于QQ消息或其他原因弹回了桌面,再次切换回游戏后发现没有声音的情况非常多见,解决方法是右击任务栏空白处选择打开“任务管理器”,然后在“应用程序”选项卡的列表中双击游戏,返回后就有声了。
3.玩游戏时感觉画面非常卡
答:见后几页中“MISSION2 速度的较量”最后的“傻博士支招”。
4.在玩游戏时始终要求插入光盘,可是明明已经放了
答:这又是一个由于破解游戏造成的故障,解决方法只有先卸载游戏,然后再次安装时装到默认路径(C盘,不要更改为其他盘符),完成后就能正常游戏了。你也可以用后几页“MISSION4 机关·光盘·时间”中的方法破解光盘检测。
5.为什么词霸这类软件不能即时翻译游戏里的文字
答:这是因为游戏里的大多数文字并不是字符格式,而是已经转成图形了,而词霸这类软件的取词技术仅限于字符。
MISSION2 速度的较量
DESCRIPTION:“游戏”派来了一个小喽喽——《是男人就下100层》,游戏本身非常依赖硬件性能,因此“游戏”利用了它自己的内部机理分配给我们一台配置相对较低的电脑,而它则操纵着一台高配置电脑。这样比速度?太吃亏了。
TARGET:比“游戏”操控的《是男人就下100层》得分高。
看到这一关的描述,衰衰忙松了口气,随即大笑了起来。我忙问他什么事这么高兴?衰衰说:“游戏实在是个笨家伙,它以为配置高游戏速度速度快也就算了,竟然还会以为这种游戏是越快越好,哈哈!”
机器配置越高游戏速度越高?
太空步和超音速
在配置低的电脑上玩比较大的游戏(比如“魔兽世界”就非常耗资源),会因为CPU、显卡、内存的关系拖慢游戏速度,原本正常的走路速度很可能成了“太空步”。不过,按照这个现象我们是否可以推论,配置高的电脑在游戏时的速度就一定比配置低的快呢?那么一直不断提高机器配置,我们是不是能在游戏中以“超音速”行走呢?显然不行,如果真的这样,那玩游戏就成了纯粹的拼电脑配置了。
电影是死的,游戏是活的
这得从游戏的编写说起,游戏其实和电影一样,都是由一帧一帧的连续画面组成的。和电影一样,每秒更换的帧数必须大于24帧,否则就没法骗过人的眼睛,看起来就不连续了。而电影和游戏有什么区别呢?电影是死的,每个人看的时候都是同一个画面,而游戏是活的,通过你的控制,游戏画面可能时而是行走,时而是战斗,这些画面哪来的?运算,没错,是游戏程序实时运算出来的。
运算完了先存起来
你是不是以为游戏是算一帧就显示一帧了?当然不是这样。一个游戏有很多画面,比如在一个空旷的房间里的画面,和一个布满花花草草、天上还有小鸟在飞行的画面,当然是后者包含了更多的元素,游戏程序运算并生成这个复杂的帧需要比简单帧距离更长的时间。这样就无法保证每秒切换的画面帧数保持在一个恒定的帧数了,所以游戏程序一般都采用缓冲或者双缓冲技术(见图4),也就是说先多生成几帧画面保存在缓冲中,而另一边则每隔一个时间段(1秒显示24帧的话,时间段就是1/24秒)就从缓冲中取一幅画面并呈现到显示器上。“太空步”现象是由于电脑实在太慢,连生成缓冲画面都来不及,所以出现了跳帧和卡机现象,而在电脑的速度足以生成缓冲画面后,再怎么提高配置也不会加快游戏速度了,因为从缓冲中取帧的时间段是恒定的。
小知识:DirectX和OpenGL是什么?
DirectX和OpenGL是2种包含了丰富接口的图形库,前者仅在Windows下,后者则广泛应用于各个系统平台。由于在Windows 2000/XP/2003中,程序不能直接访问显卡等资源,必须先把请求提交给系统,再由系统通过显卡驱动程序来操控显卡进行绘制,这样就有效率低、速度慢的问题,因此微软允许开发者通过DirectX更快地绘制图形。同等配置情况下,OpenGL一般比DirectX的运行速度更快一些。
傻博士支招
DirectX引发游戏运行错误
玩游戏时,如果遇到“找不到d3dx9.dll”或类似的错误提示,就应该确定是没有安装DirectX所致,解决方法当然是安装最新版本的DirectX。如果你的游戏需要OpenGL库,那就必须单独安装新版的显卡驱动。
可怕的2年定律!积灰导致不散热
在我们的论坛上经常有朋友问,为什么我一玩网游或大型游戏就会蓝屏或死机呢?这个问题最大的可能就是该死的散热,因为网游或大型游戏需要显卡和CPU高速工作,这样必然产生很多热量,如果CPU或显卡的散热器过弱,就会造成CPU或显卡过热而罢工,也就导致了蓝屏或死机。还有就是国内许多地方(特别是北方)灰尘大,CPU或显卡散热器上积累了许多灰尘(90%的可能是这个原因),它们是散热的大敌。因此,遇到一玩网游或大型游戏就会蓝屏或死机,建议先打开机箱看看CPU和显卡散热器上的灰尘是不是太多了,如果是,就赶快折下来清理一下(清理教程请看这里:http://www.ocer.net/article/a_show.php?id=5355)。如果不是,就该考虑换上更好的散热器来解决问题了。
衰衰的秘宝——变速齿轮
衰衰终于解释了刚才他大笑的原因:“这种游戏,完全是看反应的,只要速度够慢,别说100层,就是1000层也照样能玩。对这种运算量不大的游戏来说,高配置电脑根本没意义。”说完,拿出了“变速齿轮”,瞄准“游戏”准备发射。
瞄准游戏,不伤及无辜
变速齿轮是有瞄准镜的,可以设定要变速的进程(程序运行之后的实例称为进程)。这又是通过系统挂钩技术(Hook)完成的,大家知道Windows里的程序都大量调用了Windows系统提供的API函数接口,Win32 API提供了各项功能,其中就包括“GetTickCount”和“timeGetTime”,两者都能获得系统启动至今的毫秒数。挂钩技术就是将这个进程调用这2个API的请求转移到了自己身上,相当于它做了个中介,然后再调用这2个函数并将返回结果传递回进程,在这个过程中,当然可以对返回结果做些手脚咯!
中介”真黑!时间翻倍
就像房产中介一样,变速齿轮的中介(挂钩)也赚了“差价”。比如原来程序不断检测时间,与上一帧的时间差达到20毫秒后就显示下一帧,比如取A帧时通过API获得的时间值是1000,而正常情况下再次检测时间时可能是1003,差值为3毫秒,不显示下一帧。变速齿轮挂钩了获取时间的API后,比如你设定了提速为10倍,那变速齿轮在担任中介后就会把获取到的时间值×10再传递给程序,这样取A帧时程序得到的时间值就是10000,而下次检测时得到的就是10030,这样差值就成了30,大于20毫秒的间隔,便直接显示下一帧了,这就是变速齿轮的奥秘!
“中介”太黑,消费者不认账
别以为把变速齿轮调到100倍,你的游戏就真的能以100倍的速度运行,别忘了刚才说的游戏缓冲技术,如果电脑无法在缩短的间隔时间内完成缓冲帧的运算和生成,即使骗过了间隔时间的检测,程序也没有帧可以显示,这时就会出现数秒的画面停滞现象。
衰衰把“游戏”操纵的《是男人就下100层》的速度调到了10倍(见图6),没过几秒,它就直接挂了,而我和衰衰则轻轻松松地赢了这一局。
小知识:显卡上标识的支持DirectX版本是什么意思?
很多显卡上都有“完全支持DirectX 9.0”或类似的标识,这是什么意思呢?其实每个版本的DirectX都提供了大量的新特性,比如“自动在此坐标范围内画上雾气效果”等,这样通过新版DirectX编写的游戏就不必自己运算这些雾气效果的具体细节(软件运算远比硬件慢),支持这个版本DirectX的显卡已经在硬件中内置了绘制此效果的过程,DirectX直接调用硬件就行了。如果你的显卡只支持DirectX 7.0的特性却安装了DirectX 9.0,在玩游戏时那些硬件不支持的新版本效果就会由DirectX通过软件方式模拟,速度也很慢。
傻博士支招
如果你的游戏速度不佳
看到衰衰用变速齿轮轻松地解决掉了这一局的小BOSS,傻博士忍不住出现要给正在忍受游戏速度煎熬的朋友支几招!
安装适合自己显卡的WHQL驱动程序
如果你的游戏只能以软件模拟方式运行,画面非常粗糙而且速度极慢,那一般是由于没有安装显卡的驱动程序造成的。很多人错误地认为,安装完Windows XP之后,只要能在显示属性里将桌面的分辨率设置为1024×768这类较高的分辨率,就表示不用再单独安装显卡驱动程序了。其实,系统自带的驱动程序并不一定完整,很有可能使你无法打开显卡的图形加速功能。那么什么驱动是适合自己的呢?在“驱动之家”(http://www.mydrivers.com)中搜索或者按照分类找到所用显卡的驱动程序列表。
每个都能用吗?是的。不过,建议你只装你的显卡还是主流那会儿推出的WHQL驱动程序。因为NVIDIA和ATI在发布新的驱动程序时,一般都会对当前主流的显卡型号进行优化,所以显卡驱动的版本号并不是越新越好,比如你用着一块3年前主流的显卡,却用今年刚为新型号显卡优化过的驱动,这是非常不合适的。至于WHQL,这个认证能保证你不用在各个显卡驱动版本号中徘徊,最稳定的即是最好的!
小提示
如果你不知道自己的硬件型号,不妨用Everest(下载地址:http://www.onlinedown.net/soft/29588.htm)检测一下。
小知识:什么是WHQL
WHQL认证是微软公司为了保证系统的稳定性与兼容性而推出的一种硬件认证。全称是Microsoft Windows Hardware Quality Lab(微软操作系统硬件质量实验室认证)。通过这个认证的硬件驱动程序,就代表着与Windows完全兼容,最为稳定!通过WHQL谁的驱动程序是用户的首选。
暂时关闭杀毒软件的内存和文件监控
杀毒软件的内存监控和文件监控都挺耗资源的,游戏程序在运行过程中需要读写大量的文件,同时也会有频繁的内存交换,因此杀毒软件的监控会在一定程度上降低游戏的运行效率,关闭它意味着优化。注意,玩完游戏后一定要及时重新打开这些监控。
关闭垂直同步
垂直同步为何物?显示器完成从屏幕顶端到最底端的所有像素点的显示,就会有一个垂直同步信号传出,表示已经画完一屏。而显卡中的垂直同步选项,如果开启则表示在没有收到显示器的垂直同步信号前,显卡不绘制下一帧,这样可以保证显卡计算的每一帧都与显示器上显示的帧对应起来,不会出现画面不连贯的情况。但有时,正是因为这个等待时间,造成游戏非常卡,关闭它之后就能发挥显卡的最大性能,可这是以牺牲游戏的平滑流畅作为代价的。
(1)NVIDIA显卡
右击桌面空白处选择“属性”,在“设置”选项卡点“高级”,然后在以显卡型号为名称的选项卡中点击左侧的“性能和质量设置”,在右侧界面下方列表中找到“垂直同步”,设置为“关”后点“确定”保存设置(见图7)。
(2)ATI显卡
和NVIDIA显卡一样打开“高级”选项,然后在“OpenGL”选项卡中找到最下方的“等待垂直同步信号”,将右侧拉杆拉到最左侧(即“始终为关”)即可。
(3)Intel集成显卡
右击桌面空白处选择“图形属性”,然后在弹出界面中点击“3D设置”,在“OpenGL设置”界面的列表中将“异步翻转”设置为“开启”(注意此处是“开启”!开启异步翻转就等于关闭垂直同步)。
MISSION3 玄武
DESCRIPTION:终于碰上个比较厉害的小BOSS了,这回“游戏”派出的是由内存寻址机制化身而成的魔兽——玄武。它的生命值只会因为身上极少的几处弱点来削弱,其他攻击对它来说不值一提,但是恐怖的是,玄武这个庞大得不像话的怪物的弱点却小得可怜,根本不知道从哪儿下手。
TARGET:找出玄武的弱点所在,掌握内存寻址的原理。
这回终于轮到我这个平时不怎么玩游戏的人出手了,由于不怎么玩游戏,所以偶尔玩的时候总想快点搞定,自然而然地……修改器就用得非常转。不过,出手攻击的任务还是得交给暴力达人衰衰。
无数次的试探攻击
虽然并不明白我要干什么,衰衰还是按照我的意思,不断用试探性的攻击来骚扰玄武。由于并没有找到那极少的几处弱点,所以这种攻击对玄武几乎没什么作用。尽管玄武身上不时爆出的掉血数字只是“-1”、“-2”这样无关痛痒的值,但拿着“金山游侠”(目前国内做得最好的游戏修改工具之一,但由于功能已经太完善了,所以停止了开发)的我却露出了一丝笑容。
刚开始修改游戏时,当务之急是要找出代表着游戏中某项数值(比如主人公的生命值)在内存中的变量,不过在这么大的内存范围内寻找一个小小的值真是太不现实了。因此,修改器在查找这些值的时候就需要多次筛选。
小知识:什么是变量
变量是程序向系统申请的一小块内存区域,程序可以在其中保存可变的数据。程序在运行中需要向系统申请大量的、各种类型的变量,包括整数型、字符串型、浮点型(这些变量类型在内存中都是以“01101010……”这种二进制类型存储的,只不过需要的内存区域大小不同)。
第1步:打开“金山游侠”,进入游戏,在游戏过程中记录下要修改的值当前的状态(比如生命值当前为100),然后在游戏过程中按*键调出修改界面(根据金山游侠的设置,也可以是弹出游戏后出现修改界面)。
第2步:输入刚才记录下的值,点“搜索”(见图8)。出来成千上万个结果?没关系,点击“金山游侠”右上角的“游戏”按钮返回游戏中,然后在游戏中设法改变刚才搜索的这个属性值,比如刚才搜了值为100的生命,就可以去找个怪物搏斗几下,耗掉点生命值(使值产生变化)。
第3步:在值产生变化后,再用热键调出金山游侠,在刚才建立的搜索任务中继续搜索新的值,如95,完成后范围就缩小了。重复这个过程,直到最后只剩下一个值为止,双击这个值,选择名称(内置了生命、金钱等名称),填入“数值”(要修改成什么值),“修改方式”根据需要选择,如果希望生命锁定(掉多少血都会自动补回来)就选择“自动锁定”,如果只是修改一次的话就选择“手动修改”。
小提示
在修改时,如果是普通的Windows游戏,“长度”一般选择“双字节”。
你也动动手
金山游侠也能改网游
你一定以为修改器只能修改单机版游戏……其实并非如此,只要要修改的内容是在本地运算完成的,在理论上就能够修改。“龙族”就是如此,骨灰级玩家竟然试验出了用修改器修改网游的方法!
第1步:将金山游侠的安装目录名和主程序文件名修改一下,因为龙族的修改器屏蔽方法是检测进程的路径和文件名,完成后进入游戏用*键呼出金山游侠修改界面。
第2步:在修改界面中搜索你在游戏中的名字,注意名字两侧要加英文引号,如在游戏中叫CFANPK就搜索“"CFANPK"”(不含外侧中文引号)。
第3步:会搜到十几个结果,一般情况下,最后一个结果是有效的修改地址。右击这条搜索结果选择“地址编辑”,然后查找“01 01 01 02 02 02 03 03 03”这个字段,此处的第一个“01”就是晃动值,锁定为“01”即可,此01前的第4位就是“连射”,比如“08 00 00 00 01”处的“08”,将此值锁定为“08”就能完成连射。
在衰衰无数次的试探性攻击后,我已经根据玄武身上爆出的掉血数值找到了它身上的弱点所在。于是,直接用金山游侠的手动修改功能将玄武的生命值修改为0,没有任何悬念的,战斗结束。
小知识:修改器的内存寻址
在Windows NT内核的操作系统中(如Windows 2000/XP/2003),每个应用程序都有自己独立的内存区域,不能跨越区域访问别人的内存地址,这就是为什么有些程序在运行时会报“该内存地址不能Read”错误的原因了。那为什么修改器可以任意操作别的进程的内存呢?又是挂钩技术,修改器利用挂钩将自身插入到游戏的进程中,然后就能自由读写属于“自己”的内存了。
傻博士支招
如果你的系统在运行游戏过程中出现类似“0x????????指令引用的0x00000000内存,该内存不能为read或Written”的错误信息,请按照下列步骤排查。
第1步:检查系统是否感染病毒。如果系统中已经或者曾经感染过文件型病毒,那么系统文件就有可能受到破坏。杀毒软件有可能将病毒杀干净,但被破坏的系统文件却无法还原,你可以试着用SFC命令修复系统文件。
第2步:及时释放内存。如果本身内存就不大,又运行过了比较大的应用程序(如Photoshop),那在玩游戏前就应该先重新启动一下,以免系统因内存不够造成运行错误。
第3步:修复WMI。点击“开始→运行”,键入“services.msc”回车打开系统服务管理,找到并关闭“Windows Management Instrumentation”服务(见图9),删除Windows\System32\Wbem\Repository目录下的所有文件(删除前请备份),完成后重新启动该服务。
第4步::删除不必要的插件程序。曾经多次遇到过因系统中被偷偷安装了Yahoo助手而导致的系统故障,由于很多插件加入了防止删除的系统底层挂钩,所以常会与其他程序发生冲突,当遇到问题时建议使用“360安全卫士”卸载。
MISSION4 机关·光盘·时间
DESCRIPTION:这一关没有怪物,“游戏”安排了一整套的机关,要打开远处的大门并通过,必须先往反方向跑,并在检测机关处放上光盘,但是当我和衰衰往回跑并接近已经被机关打开的大门时,大门却已经缓缓地关上了,机关的时间太短了!
TARGET:用光盘激活机关,打开大门,手持光盘走出大门。
“这不是光盘版游戏吗!?只要越过检测光盘的代码让大门始终开着就行了。”我已经发现了游戏耍的花样,“我在《电脑爱好者》2005年第3期的《偷天换日:光盘版游戏完美转换硬盘版》里就已经学会破解它的方法了!”
我的轻量级破解工具包
虽然现在破解大软件都使用IDA Pro、OllyDbg、Softice,不过对于去除游戏的光盘检测代码这种“小手术”来说,用我们为您准备的轻量级破解工具包就足够了,其中包含查壳工具PEiD、反汇编工具W32DASM、PE修改工具RTA。
下载地址:http://work.newhua.com/cfan/200708/cracker.rar
第1步:解压工具包后运行其中的W32dsm8.93+.exe。选择菜单“Disassembler→Open File to Disassemble”(反汇编→打开需要反汇编的文件),选择打开游戏的主程序。然后选择菜单“Functions→Imports”(函数→输入表),在弹出窗口的函数输入列表框中详细列出了程序中用到的所有API函数。在窗口上方文本框中输入“GetDriveType”(不含引号)并点击右侧“Search”(搜索)按钮,下方列表框中就选中了该函数所在行(见图10),接着双击它。
小提示:找到游戏主程序所在
如果你不知道哪个是游戏的主程序文件,右击桌面上的游戏快捷方式选择“属性”,在“快捷方式”选项卡的“目标”中就能找着它!
小提示:加壳程序怎么处理
如果你在列出输入表的时候,没有什么反应或者只有寥寥的几行,那就很有可能是被加了壳了。运行工具包中的PEiD_ch.exe(另一个没有“_ch”的是英文原版),点击“文件”右侧的“…”按钮,打开需要破解的程序文件,然后在界面下方就能看到使用的壳了(见图11)。PEiD已经自带了一些常见壳的脱壳工具,点击右下角的“=>”按钮选择“插件”就能看到,如果没有包含,在Google中搜索“壳名称 脱壳工具”就能找着。
第2步:在W32DASM主界面的代码显示框中就以高亮方式选中了GetDriveType函数的调用位置,顺着这个位置稍微往下拉一点就能看到光盘检测代码了。代码框最左侧的蓝色数字是代码的位置(即代码的前后顺序编号,数字形如“0048843”)。
小知识:GetDriveType
程序要检测光盘,就必须使用GetDriveType函数来获得盘符的设备类型。因此找到GetDriveType函数在程序中的调用位置,就一定能在附近找到光盘检测代码。
典型代码解读实战
下面是一个真实游戏的光盘检测代码,你能明白它们具体是干什么的吗?看注释。
:004088BD mov eax,dword ptr[esp+14]
:004088C1 test eax, eax
//检查光驱里是否有光盘,将结果存入寄存器
:004088C3 jnz 004088DB
//根据寄存器里的结果(有无光盘),决定是否跳转到004088DB位置(即游戏开始位置)。
:004088C5 push 00000000
:004088C7 push 00428934
:004088CC push 00428919
:004088D1 push 00000000
:004088D3 call dword ptr[004233EC]
//调用函数,此处是弹出提示窗口,告诉用户插入光盘。
:004088D9 jmp 00408933
//程序跳转到结束部分,也就是强制退出游戏。
严重注意:004088C3位置的代码是破解的关键,因为此处的条件跳转指令决定能否进入游戏开始位置,当前的代码是满足条件后跳转到游戏开始处(即JNZ),但是如果把JNZ改成JMP,岂不是有没有光盘都直接跳转到开始处?
小知识:条件跳转指令
JNZ为条件跳转指令,即先检查是否满足预设的条件,如果满足则跳转,否则继续执行下一行代码。与它对应的是无条件跳转指令JMP,到了JMP指令的时候,二话不说(不检测任何条件)直接跳转至需要转移的位置。
第3步:打开RTA(见图12),选择菜单命令“File→Open File”(文件→打开文件),打开刚才破解的文件。最左侧的红色数字为代码位置,边上蓝色十六进制数为该行代码的机器码,右侧黄色文字则为汇编代码。找到要修改的位置004088C3,这句汇编代码为“JNZ SHORT 4088DB”,在黄色位置将其修改为“JMP SHORT 4088DB”(修改后蓝色部分的机器码为“EB16”)。选择菜单“File→Save File”(文件→保存文件)保存文件,再运行游戏时就没有插入光盘的提示了。
破解大补帖
1.如果不需要某条指令,可以把它改成“空指令”,方法是将该条汇编代码改为“NOP”。
2.并非所有光盘版游戏都能这样破解,首先游戏必须已经将所有所需资源都安装到硬盘中了,同时,游戏没有使用复杂的加密技术(如果是加密高人加了壳,你就别指望能用网上现成的脱壳工具搞定了)。
3.如果你在用W32DASM读汇编代码时,出现了错误或假死的情况,有可能是游戏程序中加入了干扰W32DASM的代码,请用压缩包中其他几个版本的W32DASM试试(比如黄金版,这些都是破解达人经过优化修改的程序版本)。
MISSION5 念力控制!鼠标键盘全脱离
DESCRIPTION:终于可以和“游戏”的本体对战了,但在这一关禁止了我和衰衰使用随身携带的鼠标键盘,不能用它们,怎么能控制住“游戏”呢?
TARGET:不用鼠标键盘控制游戏,打赢“游戏”。
衰衰随手从包里拿出了“按键精灵”,看来他带的东西真不少:“用这个就可以施展‘念力’,不用动手就能控制游戏了!”
第1步:从http://www.onlinedown.net/soft/4832.htm下载“按键精灵”(安装时小心捆绑的软件选项),安装完成后运行,在主界面中点击“导入”,然后导入需要的游戏脚本。
第2步:需要的游戏脚本从哪里找?请从http://bbs.vrbrothers.com/forumdisplay.php?fid=32&page=1里找找,置顶帖里有很多完美效果的脚本。
第3步:在主界面确认脚本的热键为勾选状态(见图13),然后进入游戏,在需要时按热键就搞定了(如果是挂机脚本,你就可以安心睡觉去了)。
小提示:游戏屏蔽了热键怎么办?
有时会遇到“按键精灵”热键不起作用的情况,这是由于游戏采用了nProtect键盘保护技术(和QQ登录时的键盘保护一样),屏蔽了这类挂钩操作。可以在“按键精灵”中点击“神盾”来突破这种限制。
你也动动手
不用“按键精灵”,一样不用键盘
有一个测试打字速度的小游戏,链接是http://frenzy.morpheme.co.uk/index.jsp?id=ff,编辑部各小编的纪录在4~10秒之间。你想不想超过它们?不用“按键精灵”,用系统自带的SendKey功能做VBS脚本就行了(见图14)。打开“记事本”,输入以下脚本并保存为input.vbs(脚本需要自己补充完全)。
set WshShell = WScript.CreateObject("WScript.Shell")
msgbox "点击Flash游戏,确定焦点在游戏上,2秒后开始"
WScript.Sleep 2000
WshShell.SendKeys "a"
WshShell.SendKeys "b"
……(省略,请自行添加代码,将最后引号内的键替换为字母顺序即可)
WshShell.SendKeys "z"
小知识:“念力”的真相
Windows是基于消息驱动的操作系统,也就是说接收到消息才会有动作。游戏中能够接收玩家的控制,就是因为游戏收到了鼠标和键盘等输入设备的控制消息。而“按键精灵”这类软件就是模拟发出鼠标、键盘的消息来“欺骗”游戏,达到自动控制游戏的目的。
一直以来,绝大多数人都认为“电脑游戏,只能让人玩物丧志”。今天我们要颠覆这种观点,告诉大家“学电脑,就该从玩电脑游戏开始”!
这次的任务是和我们的游戏主角衰衰,一起进入RPG世界,并最终打败BOSS——“游戏”。原来“游戏”是个那么可怕的怪物,它的弱点非常隐蔽,只有了解了内存寻址、程序破解、系统消息等一堆知识才有可能打败它。
MISSION1 历史之门
DESCRIPTION:“游戏”这个像八爪鱼一样的怪物为我们的主人公设置了第一道障碍,它的一根触须化作了“历史之门”,上面密密麻麻地列出了很多历史谜题。
TARGET:持有“入场券”道具(没有的人看上一页-_-),破解所有历史谜题。
我显然没料到拿着入场券竟然还不能进入RPG世界,正在焦急之时却发现一旁的衰衰异常镇静,睿智的眼神已经在迅速地扫描着巨大石板上的文字。
1958年—第一个电脑游戏诞生。它并不是“超级玛莉”,而是物理学家威利·海金博塞姆利用电脑和示波器做的一个简陋的演示游戏(见图1),名为“PONG”(乒乓)。
1962年—第一个真正的电脑游戏诞生。当麻省理工学院的格拉茨、拉塞尔等7名大学生,在DEC公司PDP-1小型机上设计出了真正能由玩家操控的《空间大战》(Space War)后(见图2),电脑游戏时代真的到来了。
1965年—第一个鼠标诞生。发明鼠标的并不是微软也不是罗技,而是一位叫做恩格尔巴特的电气工程师,你能根据早期手机(大哥大)的形状想象出第一个鼠标的样子吗(见图3)?感谢他!他让我们玩上了CS。
1995年—3D游戏时代到来。感谢3Dfx,它带来廉价又强大的Voodoo,让大家真正玩上了3D游戏。
1999年—第一款采用GPU的显卡问世。NVIDIA发布了采用了GPU概念的Geforce 256,将显卡的运算能力推到了一个新的高度,同时降低了CPU在游戏中的地位。
2005年—PCIE接口的显卡全面反攻。AGP接口在把PCI接口的显卡拉下马多年之后,终于遭遇了逆袭,PCI-Express(简称“PCIE”)在2005年全面攻陷了AGP显卡的市场。
打开了历史之门,眼前的景象让2人惊呆了。这是什么!?
游戏疑难问题TOP5
1.我玩游戏的时候画面四周有黑边,应该怎么办?
答:这是由于游戏程序输出的画面分辨率与屏幕当前的分辨率不统一造成的,不少老游戏只能以800*600的方式运行,而屏幕的分辨率却是1024*768。一般情况下游戏会自动调整屏幕,但不少网上下载的破解版由于修改不佳或者打包的问题,不能自动调整而出现黑边,解决方法是进入游戏前手动将屏幕分辨率改为800*600。
2.弹出游戏后再切换回来没有声音
答:游戏过程中由于QQ消息或其他原因弹回了桌面,再次切换回游戏后发现没有声音的情况非常多见,解决方法是右击任务栏空白处选择打开“任务管理器”,然后在“应用程序”选项卡的列表中双击游戏,返回后就有声了。
3.玩游戏时感觉画面非常卡
答:见后几页中“MISSION2 速度的较量”最后的“傻博士支招”。
4.在玩游戏时始终要求插入光盘,可是明明已经放了
答:这又是一个由于破解游戏造成的故障,解决方法只有先卸载游戏,然后再次安装时装到默认路径(C盘,不要更改为其他盘符),完成后就能正常游戏了。你也可以用后几页“MISSION4 机关·光盘·时间”中的方法破解光盘检测。
5.为什么词霸这类软件不能即时翻译游戏里的文字
答:这是因为游戏里的大多数文字并不是字符格式,而是已经转成图形了,而词霸这类软件的取词技术仅限于字符。
MISSION2 速度的较量
DESCRIPTION:“游戏”派来了一个小喽喽——《是男人就下100层》,游戏本身非常依赖硬件性能,因此“游戏”利用了它自己的内部机理分配给我们一台配置相对较低的电脑,而它则操纵着一台高配置电脑。这样比速度?太吃亏了。
TARGET:比“游戏”操控的《是男人就下100层》得分高。
看到这一关的描述,衰衰忙松了口气,随即大笑了起来。我忙问他什么事这么高兴?衰衰说:“游戏实在是个笨家伙,它以为配置高游戏速度速度快也就算了,竟然还会以为这种游戏是越快越好,哈哈!”
机器配置越高游戏速度越高?
太空步和超音速
在配置低的电脑上玩比较大的游戏(比如“魔兽世界”就非常耗资源),会因为CPU、显卡、内存的关系拖慢游戏速度,原本正常的走路速度很可能成了“太空步”。不过,按照这个现象我们是否可以推论,配置高的电脑在游戏时的速度就一定比配置低的快呢?那么一直不断提高机器配置,我们是不是能在游戏中以“超音速”行走呢?显然不行,如果真的这样,那玩游戏就成了纯粹的拼电脑配置了。
电影是死的,游戏是活的
这得从游戏的编写说起,游戏其实和电影一样,都是由一帧一帧的连续画面组成的。和电影一样,每秒更换的帧数必须大于24帧,否则就没法骗过人的眼睛,看起来就不连续了。而电影和游戏有什么区别呢?电影是死的,每个人看的时候都是同一个画面,而游戏是活的,通过你的控制,游戏画面可能时而是行走,时而是战斗,这些画面哪来的?运算,没错,是游戏程序实时运算出来的。
运算完了先存起来
你是不是以为游戏是算一帧就显示一帧了?当然不是这样。一个游戏有很多画面,比如在一个空旷的房间里的画面,和一个布满花花草草、天上还有小鸟在飞行的画面,当然是后者包含了更多的元素,游戏程序运算并生成这个复杂的帧需要比简单帧距离更长的时间。这样就无法保证每秒切换的画面帧数保持在一个恒定的帧数了,所以游戏程序一般都采用缓冲或者双缓冲技术(见图4),也就是说先多生成几帧画面保存在缓冲中,而另一边则每隔一个时间段(1秒显示24帧的话,时间段就是1/24秒)就从缓冲中取一幅画面并呈现到显示器上。“太空步”现象是由于电脑实在太慢,连生成缓冲画面都来不及,所以出现了跳帧和卡机现象,而在电脑的速度足以生成缓冲画面后,再怎么提高配置也不会加快游戏速度了,因为从缓冲中取帧的时间段是恒定的。
小知识:DirectX和OpenGL是什么?
DirectX和OpenGL是2种包含了丰富接口的图形库,前者仅在Windows下,后者则广泛应用于各个系统平台。由于在Windows 2000/XP/2003中,程序不能直接访问显卡等资源,必须先把请求提交给系统,再由系统通过显卡驱动程序来操控显卡进行绘制,这样就有效率低、速度慢的问题,因此微软允许开发者通过DirectX更快地绘制图形。同等配置情况下,OpenGL一般比DirectX的运行速度更快一些。
傻博士支招
DirectX引发游戏运行错误
玩游戏时,如果遇到“找不到d3dx9.dll”或类似的错误提示,就应该确定是没有安装DirectX所致,解决方法当然是安装最新版本的DirectX。如果你的游戏需要OpenGL库,那就必须单独安装新版的显卡驱动。
可怕的2年定律!积灰导致不散热
在我们的论坛上经常有朋友问,为什么我一玩网游或大型游戏就会蓝屏或死机呢?这个问题最大的可能就是该死的散热,因为网游或大型游戏需要显卡和CPU高速工作,这样必然产生很多热量,如果CPU或显卡的散热器过弱,就会造成CPU或显卡过热而罢工,也就导致了蓝屏或死机。还有就是国内许多地方(特别是北方)灰尘大,CPU或显卡散热器上积累了许多灰尘(90%的可能是这个原因),它们是散热的大敌。因此,遇到一玩网游或大型游戏就会蓝屏或死机,建议先打开机箱看看CPU和显卡散热器上的灰尘是不是太多了,如果是,就赶快折下来清理一下(清理教程请看这里:http://www.ocer.net/article/a_show.php?id=5355)。如果不是,就该考虑换上更好的散热器来解决问题了。
衰衰的秘宝——变速齿轮
衰衰终于解释了刚才他大笑的原因:“这种游戏,完全是看反应的,只要速度够慢,别说100层,就是1000层也照样能玩。对这种运算量不大的游戏来说,高配置电脑根本没意义。”说完,拿出了“变速齿轮”,瞄准“游戏”准备发射。
瞄准游戏,不伤及无辜
变速齿轮是有瞄准镜的,可以设定要变速的进程(程序运行之后的实例称为进程)。这又是通过系统挂钩技术(Hook)完成的,大家知道Windows里的程序都大量调用了Windows系统提供的API函数接口,Win32 API提供了各项功能,其中就包括“GetTickCount”和“timeGetTime”,两者都能获得系统启动至今的毫秒数。挂钩技术就是将这个进程调用这2个API的请求转移到了自己身上,相当于它做了个中介,然后再调用这2个函数并将返回结果传递回进程,在这个过程中,当然可以对返回结果做些手脚咯!
中介”真黑!时间翻倍
就像房产中介一样,变速齿轮的中介(挂钩)也赚了“差价”。比如原来程序不断检测时间,与上一帧的时间差达到20毫秒后就显示下一帧,比如取A帧时通过API获得的时间值是1000,而正常情况下再次检测时间时可能是1003,差值为3毫秒,不显示下一帧。变速齿轮挂钩了获取时间的API后,比如你设定了提速为10倍,那变速齿轮在担任中介后就会把获取到的时间值×10再传递给程序,这样取A帧时程序得到的时间值就是10000,而下次检测时得到的就是10030,这样差值就成了30,大于20毫秒的间隔,便直接显示下一帧了,这就是变速齿轮的奥秘!
“中介”太黑,消费者不认账
别以为把变速齿轮调到100倍,你的游戏就真的能以100倍的速度运行,别忘了刚才说的游戏缓冲技术,如果电脑无法在缩短的间隔时间内完成缓冲帧的运算和生成,即使骗过了间隔时间的检测,程序也没有帧可以显示,这时就会出现数秒的画面停滞现象。
衰衰把“游戏”操纵的《是男人就下100层》的速度调到了10倍(见图6),没过几秒,它就直接挂了,而我和衰衰则轻轻松松地赢了这一局。
小知识:显卡上标识的支持DirectX版本是什么意思?
很多显卡上都有“完全支持DirectX 9.0”或类似的标识,这是什么意思呢?其实每个版本的DirectX都提供了大量的新特性,比如“自动在此坐标范围内画上雾气效果”等,这样通过新版DirectX编写的游戏就不必自己运算这些雾气效果的具体细节(软件运算远比硬件慢),支持这个版本DirectX的显卡已经在硬件中内置了绘制此效果的过程,DirectX直接调用硬件就行了。如果你的显卡只支持DirectX 7.0的特性却安装了DirectX 9.0,在玩游戏时那些硬件不支持的新版本效果就会由DirectX通过软件方式模拟,速度也很慢。
傻博士支招
如果你的游戏速度不佳
看到衰衰用变速齿轮轻松地解决掉了这一局的小BOSS,傻博士忍不住出现要给正在忍受游戏速度煎熬的朋友支几招!
安装适合自己显卡的WHQL驱动程序
如果你的游戏只能以软件模拟方式运行,画面非常粗糙而且速度极慢,那一般是由于没有安装显卡的驱动程序造成的。很多人错误地认为,安装完Windows XP之后,只要能在显示属性里将桌面的分辨率设置为1024×768这类较高的分辨率,就表示不用再单独安装显卡驱动程序了。其实,系统自带的驱动程序并不一定完整,很有可能使你无法打开显卡的图形加速功能。那么什么驱动是适合自己的呢?在“驱动之家”(http://www.mydrivers.com)中搜索或者按照分类找到所用显卡的驱动程序列表。
每个都能用吗?是的。不过,建议你只装你的显卡还是主流那会儿推出的WHQL驱动程序。因为NVIDIA和ATI在发布新的驱动程序时,一般都会对当前主流的显卡型号进行优化,所以显卡驱动的版本号并不是越新越好,比如你用着一块3年前主流的显卡,却用今年刚为新型号显卡优化过的驱动,这是非常不合适的。至于WHQL,这个认证能保证你不用在各个显卡驱动版本号中徘徊,最稳定的即是最好的!
小提示
如果你不知道自己的硬件型号,不妨用Everest(下载地址:http://www.onlinedown.net/soft/29588.htm)检测一下。
小知识:什么是WHQL
WHQL认证是微软公司为了保证系统的稳定性与兼容性而推出的一种硬件认证。全称是Microsoft Windows Hardware Quality Lab(微软操作系统硬件质量实验室认证)。通过这个认证的硬件驱动程序,就代表着与Windows完全兼容,最为稳定!通过WHQL谁的驱动程序是用户的首选。
暂时关闭杀毒软件的内存和文件监控
杀毒软件的内存监控和文件监控都挺耗资源的,游戏程序在运行过程中需要读写大量的文件,同时也会有频繁的内存交换,因此杀毒软件的监控会在一定程度上降低游戏的运行效率,关闭它意味着优化。注意,玩完游戏后一定要及时重新打开这些监控。
关闭垂直同步
垂直同步为何物?显示器完成从屏幕顶端到最底端的所有像素点的显示,就会有一个垂直同步信号传出,表示已经画完一屏。而显卡中的垂直同步选项,如果开启则表示在没有收到显示器的垂直同步信号前,显卡不绘制下一帧,这样可以保证显卡计算的每一帧都与显示器上显示的帧对应起来,不会出现画面不连贯的情况。但有时,正是因为这个等待时间,造成游戏非常卡,关闭它之后就能发挥显卡的最大性能,可这是以牺牲游戏的平滑流畅作为代价的。
(1)NVIDIA显卡
右击桌面空白处选择“属性”,在“设置”选项卡点“高级”,然后在以显卡型号为名称的选项卡中点击左侧的“性能和质量设置”,在右侧界面下方列表中找到“垂直同步”,设置为“关”后点“确定”保存设置(见图7)。
(2)ATI显卡
和NVIDIA显卡一样打开“高级”选项,然后在“OpenGL”选项卡中找到最下方的“等待垂直同步信号”,将右侧拉杆拉到最左侧(即“始终为关”)即可。
(3)Intel集成显卡
右击桌面空白处选择“图形属性”,然后在弹出界面中点击“3D设置”,在“OpenGL设置”界面的列表中将“异步翻转”设置为“开启”(注意此处是“开启”!开启异步翻转就等于关闭垂直同步)。
MISSION3 玄武
DESCRIPTION:终于碰上个比较厉害的小BOSS了,这回“游戏”派出的是由内存寻址机制化身而成的魔兽——玄武。它的生命值只会因为身上极少的几处弱点来削弱,其他攻击对它来说不值一提,但是恐怖的是,玄武这个庞大得不像话的怪物的弱点却小得可怜,根本不知道从哪儿下手。
TARGET:找出玄武的弱点所在,掌握内存寻址的原理。
这回终于轮到我这个平时不怎么玩游戏的人出手了,由于不怎么玩游戏,所以偶尔玩的时候总想快点搞定,自然而然地……修改器就用得非常转。不过,出手攻击的任务还是得交给暴力达人衰衰。
无数次的试探攻击
虽然并不明白我要干什么,衰衰还是按照我的意思,不断用试探性的攻击来骚扰玄武。由于并没有找到那极少的几处弱点,所以这种攻击对玄武几乎没什么作用。尽管玄武身上不时爆出的掉血数字只是“-1”、“-2”这样无关痛痒的值,但拿着“金山游侠”(目前国内做得最好的游戏修改工具之一,但由于功能已经太完善了,所以停止了开发)的我却露出了一丝笑容。
刚开始修改游戏时,当务之急是要找出代表着游戏中某项数值(比如主人公的生命值)在内存中的变量,不过在这么大的内存范围内寻找一个小小的值真是太不现实了。因此,修改器在查找这些值的时候就需要多次筛选。
小知识:什么是变量
变量是程序向系统申请的一小块内存区域,程序可以在其中保存可变的数据。程序在运行中需要向系统申请大量的、各种类型的变量,包括整数型、字符串型、浮点型(这些变量类型在内存中都是以“01101010……”这种二进制类型存储的,只不过需要的内存区域大小不同)。
第1步:打开“金山游侠”,进入游戏,在游戏过程中记录下要修改的值当前的状态(比如生命值当前为100),然后在游戏过程中按*键调出修改界面(根据金山游侠的设置,也可以是弹出游戏后出现修改界面)。
第2步:输入刚才记录下的值,点“搜索”(见图8)。出来成千上万个结果?没关系,点击“金山游侠”右上角的“游戏”按钮返回游戏中,然后在游戏中设法改变刚才搜索的这个属性值,比如刚才搜了值为100的生命,就可以去找个怪物搏斗几下,耗掉点生命值(使值产生变化)。
第3步:在值产生变化后,再用热键调出金山游侠,在刚才建立的搜索任务中继续搜索新的值,如95,完成后范围就缩小了。重复这个过程,直到最后只剩下一个值为止,双击这个值,选择名称(内置了生命、金钱等名称),填入“数值”(要修改成什么值),“修改方式”根据需要选择,如果希望生命锁定(掉多少血都会自动补回来)就选择“自动锁定”,如果只是修改一次的话就选择“手动修改”。
小提示
在修改时,如果是普通的Windows游戏,“长度”一般选择“双字节”。
你也动动手
金山游侠也能改网游
你一定以为修改器只能修改单机版游戏……其实并非如此,只要要修改的内容是在本地运算完成的,在理论上就能够修改。“龙族”就是如此,骨灰级玩家竟然试验出了用修改器修改网游的方法!
第1步:将金山游侠的安装目录名和主程序文件名修改一下,因为龙族的修改器屏蔽方法是检测进程的路径和文件名,完成后进入游戏用*键呼出金山游侠修改界面。
第2步:在修改界面中搜索你在游戏中的名字,注意名字两侧要加英文引号,如在游戏中叫CFANPK就搜索“"CFANPK"”(不含外侧中文引号)。
第3步:会搜到十几个结果,一般情况下,最后一个结果是有效的修改地址。右击这条搜索结果选择“地址编辑”,然后查找“01 01 01 02 02 02 03 03 03”这个字段,此处的第一个“01”就是晃动值,锁定为“01”即可,此01前的第4位就是“连射”,比如“08 00 00 00 01”处的“08”,将此值锁定为“08”就能完成连射。
在衰衰无数次的试探性攻击后,我已经根据玄武身上爆出的掉血数值找到了它身上的弱点所在。于是,直接用金山游侠的手动修改功能将玄武的生命值修改为0,没有任何悬念的,战斗结束。
小知识:修改器的内存寻址
在Windows NT内核的操作系统中(如Windows 2000/XP/2003),每个应用程序都有自己独立的内存区域,不能跨越区域访问别人的内存地址,这就是为什么有些程序在运行时会报“该内存地址不能Read”错误的原因了。那为什么修改器可以任意操作别的进程的内存呢?又是挂钩技术,修改器利用挂钩将自身插入到游戏的进程中,然后就能自由读写属于“自己”的内存了。
傻博士支招
如果你的系统在运行游戏过程中出现类似“0x????????指令引用的0x00000000内存,该内存不能为read或Written”的错误信息,请按照下列步骤排查。
第1步:检查系统是否感染病毒。如果系统中已经或者曾经感染过文件型病毒,那么系统文件就有可能受到破坏。杀毒软件有可能将病毒杀干净,但被破坏的系统文件却无法还原,你可以试着用SFC命令修复系统文件。
第2步:及时释放内存。如果本身内存就不大,又运行过了比较大的应用程序(如Photoshop),那在玩游戏前就应该先重新启动一下,以免系统因内存不够造成运行错误。
第3步:修复WMI。点击“开始→运行”,键入“services.msc”回车打开系统服务管理,找到并关闭“Windows Management Instrumentation”服务(见图9),删除Windows\System32\Wbem\Repository目录下的所有文件(删除前请备份),完成后重新启动该服务。
第4步::删除不必要的插件程序。曾经多次遇到过因系统中被偷偷安装了Yahoo助手而导致的系统故障,由于很多插件加入了防止删除的系统底层挂钩,所以常会与其他程序发生冲突,当遇到问题时建议使用“360安全卫士”卸载。
MISSION4 机关·光盘·时间
DESCRIPTION:这一关没有怪物,“游戏”安排了一整套的机关,要打开远处的大门并通过,必须先往反方向跑,并在检测机关处放上光盘,但是当我和衰衰往回跑并接近已经被机关打开的大门时,大门却已经缓缓地关上了,机关的时间太短了!
TARGET:用光盘激活机关,打开大门,手持光盘走出大门。
“这不是光盘版游戏吗!?只要越过检测光盘的代码让大门始终开着就行了。”我已经发现了游戏耍的花样,“我在《电脑爱好者》2005年第3期的《偷天换日:光盘版游戏完美转换硬盘版》里就已经学会破解它的方法了!”
我的轻量级破解工具包
虽然现在破解大软件都使用IDA Pro、OllyDbg、Softice,不过对于去除游戏的光盘检测代码这种“小手术”来说,用我们为您准备的轻量级破解工具包就足够了,其中包含查壳工具PEiD、反汇编工具W32DASM、PE修改工具RTA。
下载地址:http://work.newhua.com/cfan/200708/cracker.rar
第1步:解压工具包后运行其中的W32dsm8.93+.exe。选择菜单“Disassembler→Open File to Disassemble”(反汇编→打开需要反汇编的文件),选择打开游戏的主程序。然后选择菜单“Functions→Imports”(函数→输入表),在弹出窗口的函数输入列表框中详细列出了程序中用到的所有API函数。在窗口上方文本框中输入“GetDriveType”(不含引号)并点击右侧“Search”(搜索)按钮,下方列表框中就选中了该函数所在行(见图10),接着双击它。
小提示:找到游戏主程序所在
如果你不知道哪个是游戏的主程序文件,右击桌面上的游戏快捷方式选择“属性”,在“快捷方式”选项卡的“目标”中就能找着它!
小提示:加壳程序怎么处理
如果你在列出输入表的时候,没有什么反应或者只有寥寥的几行,那就很有可能是被加了壳了。运行工具包中的PEiD_ch.exe(另一个没有“_ch”的是英文原版),点击“文件”右侧的“…”按钮,打开需要破解的程序文件,然后在界面下方就能看到使用的壳了(见图11)。PEiD已经自带了一些常见壳的脱壳工具,点击右下角的“=>”按钮选择“插件”就能看到,如果没有包含,在Google中搜索“壳名称 脱壳工具”就能找着。
第2步:在W32DASM主界面的代码显示框中就以高亮方式选中了GetDriveType函数的调用位置,顺着这个位置稍微往下拉一点就能看到光盘检测代码了。代码框最左侧的蓝色数字是代码的位置(即代码的前后顺序编号,数字形如“0048843”)。
小知识:GetDriveType
程序要检测光盘,就必须使用GetDriveType函数来获得盘符的设备类型。因此找到GetDriveType函数在程序中的调用位置,就一定能在附近找到光盘检测代码。
典型代码解读实战
下面是一个真实游戏的光盘检测代码,你能明白它们具体是干什么的吗?看注释。
:004088BD mov eax,dword ptr[esp+14]
:004088C1 test eax, eax
//检查光驱里是否有光盘,将结果存入寄存器
:004088C3 jnz 004088DB
//根据寄存器里的结果(有无光盘),决定是否跳转到004088DB位置(即游戏开始位置)。
:004088C5 push 00000000
:004088C7 push 00428934
:004088CC push 00428919
:004088D1 push 00000000
:004088D3 call dword ptr[004233EC]
//调用函数,此处是弹出提示窗口,告诉用户插入光盘。
:004088D9 jmp 00408933
//程序跳转到结束部分,也就是强制退出游戏。
严重注意:004088C3位置的代码是破解的关键,因为此处的条件跳转指令决定能否进入游戏开始位置,当前的代码是满足条件后跳转到游戏开始处(即JNZ),但是如果把JNZ改成JMP,岂不是有没有光盘都直接跳转到开始处?
小知识:条件跳转指令
JNZ为条件跳转指令,即先检查是否满足预设的条件,如果满足则跳转,否则继续执行下一行代码。与它对应的是无条件跳转指令JMP,到了JMP指令的时候,二话不说(不检测任何条件)直接跳转至需要转移的位置。
第3步:打开RTA(见图12),选择菜单命令“File→Open File”(文件→打开文件),打开刚才破解的文件。最左侧的红色数字为代码位置,边上蓝色十六进制数为该行代码的机器码,右侧黄色文字则为汇编代码。找到要修改的位置004088C3,这句汇编代码为“JNZ SHORT 4088DB”,在黄色位置将其修改为“JMP SHORT 4088DB”(修改后蓝色部分的机器码为“EB16”)。选择菜单“File→Save File”(文件→保存文件)保存文件,再运行游戏时就没有插入光盘的提示了。
破解大补帖
1.如果不需要某条指令,可以把它改成“空指令”,方法是将该条汇编代码改为“NOP”。
2.并非所有光盘版游戏都能这样破解,首先游戏必须已经将所有所需资源都安装到硬盘中了,同时,游戏没有使用复杂的加密技术(如果是加密高人加了壳,你就别指望能用网上现成的脱壳工具搞定了)。
3.如果你在用W32DASM读汇编代码时,出现了错误或假死的情况,有可能是游戏程序中加入了干扰W32DASM的代码,请用压缩包中其他几个版本的W32DASM试试(比如黄金版,这些都是破解达人经过优化修改的程序版本)。
MISSION5 念力控制!鼠标键盘全脱离
DESCRIPTION:终于可以和“游戏”的本体对战了,但在这一关禁止了我和衰衰使用随身携带的鼠标键盘,不能用它们,怎么能控制住“游戏”呢?
TARGET:不用鼠标键盘控制游戏,打赢“游戏”。
衰衰随手从包里拿出了“按键精灵”,看来他带的东西真不少:“用这个就可以施展‘念力’,不用动手就能控制游戏了!”
第1步:从http://www.onlinedown.net/soft/4832.htm下载“按键精灵”(安装时小心捆绑的软件选项),安装完成后运行,在主界面中点击“导入”,然后导入需要的游戏脚本。
第2步:需要的游戏脚本从哪里找?请从http://bbs.vrbrothers.com/forumdisplay.php?fid=32&page=1里找找,置顶帖里有很多完美效果的脚本。
第3步:在主界面确认脚本的热键为勾选状态(见图13),然后进入游戏,在需要时按热键就搞定了(如果是挂机脚本,你就可以安心睡觉去了)。
小提示:游戏屏蔽了热键怎么办?
有时会遇到“按键精灵”热键不起作用的情况,这是由于游戏采用了nProtect键盘保护技术(和QQ登录时的键盘保护一样),屏蔽了这类挂钩操作。可以在“按键精灵”中点击“神盾”来突破这种限制。
你也动动手
不用“按键精灵”,一样不用键盘
有一个测试打字速度的小游戏,链接是http://frenzy.morpheme.co.uk/index.jsp?id=ff,编辑部各小编的纪录在4~10秒之间。你想不想超过它们?不用“按键精灵”,用系统自带的SendKey功能做VBS脚本就行了(见图14)。打开“记事本”,输入以下脚本并保存为input.vbs(脚本需要自己补充完全)。
set WshShell = WScript.CreateObject("WScript.Shell")
msgbox "点击Flash游戏,确定焦点在游戏上,2秒后开始"
WScript.Sleep 2000
WshShell.SendKeys "a"
WshShell.SendKeys "b"
……(省略,请自行添加代码,将最后引号内的键替换为字母顺序即可)
WshShell.SendKeys "z"
小知识:“念力”的真相
Windows是基于消息驱动的操作系统,也就是说接收到消息才会有动作。游戏中能够接收玩家的控制,就是因为游戏收到了鼠标和键盘等输入设备的控制消息。而“按键精灵”这类软件就是模拟发出鼠标、键盘的消息来“欺骗”游戏,达到自动控制游戏的目的。