战网中国

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

暗黑破坏神2在1.12a之前各版本的免CD的game.exe建立方法

已有 659 次阅读2023-2-8 00:46 |个人分类:game

零、前言

这个帖子讲讲怎么建立1.12a以前版本的免CD的D2运行程序game.exe。方法就是利用1.12a的game.exe,修改其导入表。
这个方法就是我在这个帖子里


提到的Seltsamuel的方法。Seltsamuel在The Phrozen Keep论坛的一份回帖中写到:
yes, themastercaster is right. Beside of this no one here is allowed to tell you how to crack a copyprotection that is still actively in use in other titles.. this has nothing to do with modding but with piracy. The way we went is .. take a 1.12a game.exe and modify the importtables so it works with older game.dlls ..switch all ordinals and such. This way we had not to change a single line of code copyrighted by blizzard ^ ^.

Greetings

Seltsamuel

本贴就是图文记录将上述方法实现的过程,方便也想自己动手的朋友可以得到自己做的免CD的game.exe。今天,我们演示将1.12a修改成1.11b。用到的工具:OllyDBG、Uedit、LordPE和Windows自带的计算器。

一、找到导入表全部函数

用OllyDBG打开1.12a的game.exe,右键选择寻找-->当前模块中所有函数名


结果出现下图所示的函数表


从上表中可以看到,导入的D2函数包括:D2Sound、D2gfx、D2Win、D2MCPClient以及Fog和Storm这几个模块中的函数。由于Fog和Storm模块从1.11b到1.12a没有变化,因此,这两个模块中的函数无需修改,即我们只要修改这6个模块中的前4个的即可。

二、找到对应版本的全部函数编号

首先,要找出d2两个版本中对应模块中相同函数的对应编号。从上图可以看到全部的1.12a版本的函数编号,现在需要自己找出1.11b版本中对应函数的编号。这个过程是需要耐心和使用OllyDBG(或者用IDA)的能力的,下面是我已经找好111b、110f和109d的结果(109d运行完退出游戏时,有错误提示):

112a            111b                110f               109d(same as 110f)
D2Sound 
10002          10044              10001             10001
10032          10050              10000             10000
D2MCPClient
10024          10039              10001             10001
D2gfx
10008          10026              10020             10020
10010          10034              10001             10001
10022          10003              10018             10018
10036          10055              10015             10015
10069          10061              10011             10011
10078          10022              10027             10027
D2Win
10011          10120              10174             10174
10045          10032              10036             10036
10059          10030              10037             10037
10073          10051              10171             10171
10109          10100              10001             10001
10121          10182              10002             10002
10188          10089              10000             10000
10194          10040              10205             10205

上面左边的每个模块下的函数编号都可以在上图中看到,这些是1.12a版本的导入表,现在我们就是要将左边的编号在game.exe中替换成111b的编号,这样1.11b的免CD的game.exe就做好了。

三、替换导入表形成免CD的game.exe

首先,打开LordPE,点击PE Editor,选择1.12a版本的(将要修改它,所以先备份它)game.exe,再点击Directory,如下图


点击后就会出现下图的数据目录表


程序的数据目录表有16项,其中第2项就是导入表(上图中划红线的)。点击有点点的按钮,出现下图


这就是真正的导入表了。略过前面的Windows的模块,到D2的模块,由于Fog和Storm模块不用替换,要替换的只有上图中看到的下面4个模块。上图中标示1的是D2Win模块,共有8个函数,正好是我们前面列出的函数。标示2的地方,是第一个导入函数。图中的数据,我们只要看ThunkOffset和ApiName两项即可。第一个导入函数的ThunkOffset下是地址:0000A788,ApiName下是:27D2h和10194d。这两组数据的意思是:前一个是这个导入函数的所在地址,第二数据下的27D2h(h代表16进制,后面的d是代表10进制)中的16进制27D2正好是10进制的10194,即第二组数据函数编号。
下面就是修改了,我们用Uedit打开这个game.exe,找到A788地址,如下图


图中光标的地方正是A788位置,可以看到,在A788位置是D2,A789位置是27。对照该函数我们找到的1.11b中对应的编号是10040,用计算器将其换算成16进制的如下图,得到2738


因此,我们只要将A788位置的D2,修改成38,就完成了1.12a版本的这个函数替换成了1.11b的,如图所示。


依次完成上述全部的4个模块中的函数,最后保存game.exe,这个就是1.11b的免CD程序了。

至此,本贴也就完成了,希望你能做出自己的1.12a之前版本的d2免CD程序!

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

Archiver|手机版|小黑屋|BattleCN ( 陕ICP备05006600号 )

GMT+8, 2024-4-25 06:43 , Processed in 0.039984 second(s), 16 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部