游戏内存编辑、游戏修改专题

[ 11004 查看 / 20 回复 ]

如果在游戏中读写内存,可能需要掌握一些游戏修改的基础知识。
下面是我从网络上收集的一些文件,希望对大家有用。

第一章:使用模拟精读写内存

请参考教程:http://www.yhhe.net/ape/lib/art/?xml=mem

ReadBook助手源代碼:http://www.yhhe.net/bbs/dispbbs.asp?BoardID=4&ID=997&replyID=&skin=1

下面是一个简单的例子BR>

--声明变量
local red,blue,redmax,bluemax,redbj,bluebj,ys

--打开内存访问句柄
mem.open( win.getForeground() );

--读取内存
redmax = mem.readInt(0x012bee34,1); --最大HP值
red = mem.readInt(0x012bee28,1); --目前HP值
bluemax = mem.readInt(0x012bee38,1); --最大MP值
blue = mem.readInt(0x012bee2c,1); --目前MP值

--关闭内存访问句柄
mem.close();

redbj=redmax/100*40;  --取红最大值的百分之四十
bluebj=bluemax/100*40; --取蓝最大值的百分之四十
ys=_set["速度"]; --如果遇到网络慢或本身电脑卡机,会有多吃参的情形时,请予以调整,最慢建议不要超过750。

if red<redbj then --如果小于最大值的百分之四十
    key.press("F6"); --补血
    delay(100);
    ys=ys-50;
end;

if blue<bluebj and _cs>7 then --如果蓝小于最大值的百分之四十,并且_cs计数器大于7
    key.press("F5"); --补蓝
    delay(250);
    ys=ys-50;
    _cs=1;
end;

key.press("F4"); --跑步
delay(250);
delay(ys); --控制喝水的速度
_cs=_cs+1;

第二章:进制转换工具

在进行游戏修改、内存编辑的时候,大家可能经常要用到进制转换。

下面是好用的进制转换小工具:
http://www.yhhe.net/ape/tool/bin.exe


此主题相关图片如下:


本主题由 管理员 admin 于 2008-5-28 13:32:43 执行 设置精华/取消 操作
分享 转发
TOP

第三章:用《金山游侠》进行游戏动态修改

第三章:用《金山游侠》进行游戏动态修改

游戏修改工具,是一种通过修改内存中的数据来改变游戏中的各项数值,以达到快速通关的目的的软件。

从FPE到GameMaster ,从《东方不败》到早期的《金山游侠》,它们的功能都大体相同,使用的方法也几乎一样。

但是随着《金山游侠 2002》的出现,这种格局完全被打破了,金山游侠凭着其 DirectX 智能弹出、一键必杀、游戏录像机、模拟光驱等功能从众多的游戏修改工具中脱颖而出,也成为广大游戏爱好者首选的修改利器。

下面我们就谈谈如何用《金山游侠 2002》来进行游戏修改。

一、金山游侠的常规界面
金山游侠的界面主要由左右两部分组成。左面是功能选择区,要在游戏进行的同时修改就启用“游戏修改”功能;要修改存盘文件就进入“文件修改”界面;要制做自己的组合快捷键就进入“一键必杀”功能面板;等等。


此主题相关图片如下:

面板的右面主要由三部分组成:上部是针对游戏或文件的操作,如输入数据、进行搜索、新建任务、删除当前任务,等等;中部是查找过程中找到的地址列表以及结界保存列表;最下面部分是状态栏。

除了常规功能外,金山游侠特别值得一提的是“一键必杀”功能,除了单机 PC 用户,它还支持制作网络游戏的练功机器人,利用它可以定制自己的游戏大招,但是由于本文的主要内容在于“游戏修改”,因此没有对金山游侠进行全面的介绍,相关的资料大家可以自行查阅软件的帮助文件。

二、游戏修改
前面我们说过,游戏中的一切都是数据,要对游戏(也就是数据)进行修改,那么就必须先找到这个数据,然后将其值改成你想要的值。

常规步骤:

1、要进行游戏修改时,先用笔记下欲改数据。

2、呼叫修改器(在金山游侠中默认的是小键盘上的 “*” 号),在数据栏里面输入刚才记下来的数据,然后按回车键进行搜索,完成后游侠返回所有结果,而你要改的数据就在这里面。但是数据太多了,哪一个才是我们想要的呢?不要慌,接着来。

3、点按游侠右上角的返回键回到游戏中,想办法改变刚才搜索的数据。如刚才搜索的是 HP 值,那么我吃点药补点血或打一架减少点 HP ,这时的 HP 值就是我们需要再次搜索的数据。记下此数据。

4、再次呼叫修改器,在数据搜索栏里面输入改动后的数据并进行搜索。

5、这样基本上就找到数据了,如果找到的数据仍然有好几个,那么再重复 3 和 4 步骤,直到最后的结果为一个(有时候无论怎么搜也可能有两个、三个,这时可以将这几个数据都修改了,一般不会出问题)。

6、最后用鼠标双击找到的数据,并在弹出的窗口中将数据改成你想要的数据。如图二


此主题相关图片如下:

图二

三、示例
下面我们以《英雄无敌历代记》为例进行资源的修改。

1、进入游戏,记下当前的木材数量 20 ,然后呼叫修改器,在修改器的数据搜索栏中输入 20 ,然后按回车键进行搜索,完成后有一大堆数据。如图三:

此主题相关图片如下:

图三

2、点按右上角的“返回”按钮回到游戏。

3、用掉一点木头或捡几个木头。我是捡了 6 个木头,因此,要修改的数据变成了 26(20+6)。

4、呼叫修改器,在数据输入栏里输入 26 然后按回车键进行搜索,结果如图四:


此主题相关图片如下:

图四

怎么样,结果出来了吧?就是这个数据,修改它。

5、用鼠标双击这个数据,在弹出的窗口中将数据改成欲改的数据,此处我将其改为 255 。如图五:

此主题相关图片如下:

图五

6、最后返回游戏,呵呵,木头的数量变成 255 个了!

四、修改补遗
1、游戏数据的修改有锁定修改与普通修改的差别。普通修改只是把数据修改过来,锁定修改则是自动把数据“锁定”,无论如何做都不会改变这个锁定的数据值。如:锁定金钱为 99999 ,那么无论买多少物品还是这个值,这就是“锁定”。

2、对于某些游戏特别是动作游戏,在游戏的屏幕上,我们看不到人物状态的数值,而是用诸如“血槽”之类的状态条代表人物状态。对于这种游戏,我们就得采用低阶扫描方式(也称为模糊搜索)对游戏进行修改。

方法是:

A、在血槽发生变化前呼叫修改器,然后在数据搜索栏里输入“ ?”号,然后返回游戏。

B、当血降低时再次呼叫修改器,输入 “-” 号(如果是血增加了,那就输“+”号),然后回到游戏并重复 A 与 B 步骤,直到结果只有几个。

C、最后对数据进行修改。

五、结束语
好了,在经过本章的学习后,你基本上已经掌握了游戏动态修改的方法,对大多数游戏的修改也不成问题了。

但是你依然算不上高手。你可以修改经验值、生命值、体力值,等等,但你能修改主人公的特殊属性吗?能在游戏的初期就拿到终级的装备吗?

所以建议大家继续我们的游戏修改之路。

TOP

第四章:游戏高级修改——内存编辑

第四章:游戏高级修改——内存编辑

前面我们已经反复强调,游戏中的一切都是数据,经验值、武功招式、物品等等都是代码组成的,只要你找到相应代码就可以改!

当然,这个代码必须是游戏中有的,如果没有的代码硬要修改,小心死机哟,呵呵。所以修改前能存盘就存盘。

另外还有一些必须知道的知识:

1、电脑上的位址都是低位元对应低位址,所以如果是十六进位制的 14FC ,在内存或存盘文件上以 FC14 这样的形式储存。如生命值 500 ,本来是 01F4 ,则存为 F401。

2、在电脑上,两个字节为一位,因此,代码也按两个字节的方式来排列,如:01F4 ,在存盘文件上存为:F4 01 (为什么不是 01 F4 ?回头看下第一点)。

3、对于一些数值可能比较大的元素,如金钱,为了避免数值过大产生溢出错误,一般用 3 个或 4 个字节存放。如当前金钱数为 1000 ,那么在内存编辑中应该是四组数据:E8 03 00 00 。

4、游戏中连续数值的排列:如在游戏中的数值是 500/500 ,那么内存中或存盘文件上前后两个 500 极可能是连续排在一起的。

5、很多游戏特别是 RPG 游戏,人物的各种状态值常常是排在一起的,如生命值、力量值、防御值,等等,大家最好都抄下来,然后找到其中一个数值的存盘位置,再前后多看一下,很容易找到其他的数据,这时大胆地修改吧。

6、如果在游戏中看见很多的 FF 集中存放在一起,一般来说这就是物品或魔法的代码集结处,试着改一改吧,大不了死机重启,呵呵。另外还要考虑物品或魔法代码的位数,可能是一位,也可能是两位哟。

一、内存编辑的基础要诀
胆大、心细,是内存编辑的基础要诀。

比如通过第一节的知识,我们很轻易地找到了代表木剑数量的存盘位置,看一看前面的代码,将其转换为十进制后在游戏中却无论如何找不到代表该数字的物品,很自然地,它应该是木剑的代码;那么将木剑代码改成紧接着的下一个数字,就有可能是铁剑的代码,再下一个,又可能是钢剑的代码,以此类推,“英雄之剑”、“末日之剑”不也就出来了吗? “老师带入门,修行*各人”,前面我们讲了这么多,只不过是一些基础原理,要想成为游戏修改的高手,可得自己多练习一下。

下面,我们进入一个实际的内存编辑例子。

二、内存编辑实例
我们还是以英雄无敌历代记为例,目的是通过内存编辑修改资源、英雄的经验值、英雄的特殊技能。

1、进入游戏,然后按第一节的方法找到代表木材的代码。

2、点按金山游侠右上角内存编辑按钮进入内存编辑状态,如图一:


此主题相关图片如下:

图一

3、进入内存编辑界面后,光标停止处正是木材的代码,将其由 14(20d)改成 FF(255d),然后回到游戏中,发现木材数量变成 255 个了。如图二:


此主题相关图片如下:

图二

4、记下当前其他资源的数量,另外五项分别是:10 (0AH),10(0AH),20(14H),10(0AH),10(0AH) 。

5、再进入金山游侠的内存编辑界面,还是刚才找到的关于木材的地址,前后看一下,很容易就找到了代表其他资源的代码(根据十六进制),这些代码都是集中放在一起的,修改吧。如图三:


此主题相关图片如下:

图三

6、回到游戏中,修改起作用了吧?

7、下面来修改英雄的经验值与特殊技能。进入游戏中,记下当前英雄的经验值为 40(28H) ,当前特殊技能为“进攻术”。

8、回到金山游侠界面中,搜索 40 的数值,完成后再回到游戏里,让英雄打一架或捡个宝箱,让英雄的经验值变化。我是捡了个宝箱,得到 1000 点经验值,现在英雄的经验值是 1040 ,呼叫修改器进行搜索并最终找到了代表英雄经验的代码。

9、选中本代码进入内存编辑,将英雄的经验值改为 FF FF 00 00 ,再回到游戏里,如何,英雄的经验值变为 65535 (因为 FFFFH 就是十进制中的 65535 啦)了吧?呵呵。如图四:


此主题相关图片如下:

图四

10、再回到内存编辑窗口,在代表英雄经验值的前后找找,那个 66 是什么东西?66H 转换成十进制是 102 ,游戏中关于这个英雄的内容没有这个数值呀,改一下,将其改成 67 ,再回到游戏中一看,哈哈,原来这个位置存放的是英雄特技的代码,英雄原来的“进攻术”变成“狼骑士”了。如图五:


此主题相关图片如下:

图五

TOP

正好我遇到了这方面的问题,所以请教一下版主.

我自己也编写了一个类似的代码/P>

if red<redbj then --如果小于最大值的百分之四十
    key.press("F6"); --补血
    delay(100);
    ys=ys-50;
end;

if blue<bluebj and _cs>7 then --如果蓝小于最大值的百分之四十,并且_cs计数器大于7
    key.press("F5"); --补蓝
    delay(250);
    ys=ys-50;
    _cs=1;
延时都是5000

但是这就有一个问题/P>

上面两个语句是依次执行的(应该是吧?)

如果在某个时候我喝了蓝,在5秒的延时时间内又要喝红,就非等等不可

本来想用if的嵌套解决的

但是还有一个脚本也要同时运行

用嵌套太麻烦

代码多了4倍多

就非用las的同时运行不可了

"同时运行多个las脚本"我看了不下10遍.

我的代码里没有用到那些禁止的函数.

但感觉自己还是没有入门.

版主可不可以帮忙把上面那两个语句弄成同时运行的?

然后我再自己改改吧.

多谢了

TOP

模拟精灵支持多线程,同时运行很简单,放到LAS文件与或者一个字符串里都可以.
很简单很简单啊.

你就当他是两个脚本可以.
其实不需要多线程也可以,很多方法

你把你的代码贴上来,功能说一下,最好代码都加上详细的注释.
把你的意途详细的说一说.我再看看能不能帮你改改.

你可以看一下这个贴子: http://www.yhhe.net/bbs/dispbbs.asp?boardID=4&ID=1343&page=1
可能对你有帮助

看不明白的时候,先写几句简单的代码试一下,不要急.
你不要一开始就去你的程序里用多线程,你先写一些简单的脚本试验,然后就狂改狂拆腾你的代码,很容易就明白了.


s =[[LAScriptbr>while( nStop() ) do   
    delay(1000) 
    print("我是子线程2哈哈") 
end;
]]

win.consoleOpen();
win.exec(s)

while( nStop() ) do   
    delay(1000) 
    print("我是主线程1哈哈") 
end;



学习的时候,先写最简单的代码,乱改,乱试,出错找原因就学到了东西.
如果要一下子就懂就能用那个方法就错了.
TOP

另外,上面的代码并没有延时5秒.

1000毫秒才是一秒
delay(250); 实际上才延时了0.25秒.

实际上你说的问题不存在.你再快也要给游戏一个处理你的请求的时间,
不可能没有一点延时同时做两件事

TOP


if(  math.abs( color(654,654) - color("#4365cc")  )    >=    5000    )
    then key.press("q")
delay( math.random( 1000,1600) )
  end;




if(  math.abs( color(202,654) - color("#ff9457")  )    >=    5000    )
    then key.press("w")
delay( math.random( 1000, 1600) )
  end;
math.randomseed(os.tick() );

就是这两个了/P>

math.abs( color(654,654) - color("#ff9439")  )    >=    5000    这个是进行颜色的近似判定的.





TOP

你这样比较颜色的相似度好象不太科学,有效吗?另外代码尚可优化

下面是我帮你改的代码(这里不需要用多线程)

-- 这两个颜值可以一次性算出来,不需要每次循环都去算,最好放到init区块中

if not _CL4365CC then
    _CL4365CC = color("#4365cc") + 0;--提前转换为数字
end;

if not _CLFF9439 then
    _CLFF9439 = color("#ff9439")+ 0; --提前转换为数字
end;

-- --------------------------------------
math.randomseed(os.tick() ); --随机数种子
-- --------------------------------------

if(  math.abs( color(654,654) - _CL4365CC  )    >=    5000    )
    then key.press("Q"); --键名一定要大写
    delay(100); --这里随便弄一个小的延时,游戏能反应过来就行
end;

if(  math.abs( color(202,654) - _CLFF9439  )    >=    5000    )
    then key.press("W"); --键名一定要大写
end;

-- 两个动作共用一个延时函数就行了
-- --------------------------------------
delay( math.random( 1000,1600) );
-- --------------------------------------


最好是取RGB值,或者计算出HSI值比较颜色
或者用image库抓屏以后,使用图像处理函数分离出颜色通道(img:split),或者降低颜色位数(img:bpp)
然后再从图像上抓点.

[此贴子已经被作者于2005-11-27 19:44:47编辑过]

TOP

下自习刚刚回来

学习ing

多谢版主

我又知道了不少东西

谢谢

[em01][em01][em01][em01][em01][em01]
TOP

现在很多网络游戏对金山游侠进行了封杀,不太好用了,也许对付一下单机游戏还可以,给加加出一道

题,呵呵,全当博士论文题目了。

新天骄这款游戏你也许没玩过,其实如果你真的没玩过,倒可以去玩玩试试,这是款民族特色很浓的游戏

从人物形象、美工、装备打造、聊天等均有很多自己的特色,和那些大众化的游戏比起来,绝对能给你耳

目一新的感觉,虽然现在的新天骄被一群毛孩子改的乱七八糟了,但原来的主要风貌还在,又是款免费游

戏,而且上手特简单,不妨去下一个试试

新天骄官方网站

我的题目就是一道关于这款游戏的实践题喽,考考加加的功力,你写程序的思路和处理问题的敏捷程度都

是我目前深入接触过的程序员里最棒的!!你就以这款游戏为例,开发一套外挂的示例程序怎么样?如果

对补血补蓝等能结合内存读写进行当然更棒,这款游戏现在封外挂封的很厉害,而且做这款游戏外挂的人

不多,目前只剩下有些人的简易按键精灵和贵族天骄了,也被封了半个多月了,开发小组的新外挂还没弄

出来,

天骄贵族网站

不过目前大江南北玩这款游戏的倒是不少,上班族和原来的老玩家占了很大部分,很多人玩了这款游戏就对别的游戏提

不起兴趣来(比如说我,非典时被关在单位玩上的这款游戏,都现在了还是时常会忍不住上去看看,可惜现在工作比较

忙,连写个完整简易外挂的时间都没有,只有每天早晨起来逛逛论坛)加加要是能针对他做点什么,也许正可以叫我们的

模拟精灵广为人知,酒香也怕巷子深哦!!如果加加组织外挂攻关小组,偶第一个报名!!

TOP