如何找游戏内存写脚本

如何找游戏内存写脚本,第1张

可以用TC简单开发这款游戏脚本制作软件。
TC简单开发简介:TC简单开发是国内首款免费多线程的图形界面脚本制作开发工具软件,支持中英文双语言编写脚本程序,可以说TC开脚本界先河,是免费脚本开发制作工具的首选。

内存挂
玩网游的时候客户端是从服务器获取数据,然后用户通过客户端在内存中接受服务器传递的数据经过用户的 *** 作改变,然后返回给服务器比如我现在坐标是(1,2),客户端向前走一步,X+1,那么客户端就会返回(2,2)给服务器内存挂就是通过在内存中搜索游戏相关的数据,逐步缩小搜索范围,然后再修改,那样客户端获得的数据就是修改后的,然后返回给服务器的数据也是修改后的,比如说我的攻击本来是打不死怪的,但是修改成攻击很高,一刀杀掉了客户端就会返回你杀死了怪的记录,然后服务器就会传递你升级的信号,客户端就可以发现你升级了简单说就是数据拦截
按键挂。。。其实按键挂严格意义上来说不是挂,是用软件代替人工按键
按键精灵是什么
他只是一个鼠标键盘的模拟替代工具而已,就象没手的人要安个假肢来辅助它完成某些功能,他不可能实现变态的功能,就象我们计算题目一样,你可以用手来计算,也可以使用计算器来帮你计算,可以提高一些效率而已根本就谈不上叫外挂,它可以让你能悠闲地喝着茶水看着电脑帮你完成那些单调重复的简单劳动罢了

这个要用到dll

获取进程标示符,也就是进程ID

版本 2
支持库 eAPI

程序集变量 进程列表, 进程信息, , "0"
程序集变量 n, 整数型
程序集变量 进程ID, 整数型
程序集变量 寄存器, 整数型
程序集变量 进程的句柄, 整数型

子程序 __启动窗口_创建完毕

进程列表 = 取系统进程列表 ()
计次循环首 (取数组成员数 (进程列表), n)
    如果真 (进程列表 [n]进程名称 = “你的游戏名称exe”)
        进程ID = 进程列表 [n]进程标识符
        跳出循环 ()
    如果真结束

计次循环尾 ()

首先要获取访问权限,返回进程句柄。

版本 2

DLL命令 OpenProcess, 整数型, "Kernel32dll", "OpenProcess"
    参数 访问方法, 整数型
    参数 是否继承句柄, 逻辑型
    参数 进程标识符, 整数型

版本 2

子程序 _时钟1_周期事件

进程的句柄 = OpenProcess (2035711, 假, 进程ID)

3 写数据到内存地址

版本 2

DLL命令 WriteProcessMemory, 逻辑型, , "WriteProcessMemory"
    参数 进程句柄, 整数型
    参数 要写的内存地址, 整数型
    参数 写入变量的缓冲区, 整数型, 传址
    参数 要写入的字节数, 整数型
    参数 实际写入的字节数, 整数型
版本 2

子程序 _时钟1_周期事件
局部变量 a, 整数型

WriteProcessMemory (进程的句柄, 327421008, 9999, 4, a)

4 写完后要关闭句柄,不然会卡死

版本 2

DLL命令 CloseHandle, 逻辑型, , "CloseHandle"
    参数 要关闭的句柄, 整数型
版本 2

子程序 _时钟1_周期事件

CloseHandle (进程的句柄)

内存挂是内存CALL啦……
就是调用游戏内部的函数
网上大部分人内存挂都用delphi写挂,
下面是个例子:
时间获取i控制
procedureiTForm1Timer2Timer(Sender:iTObject);
begin
Ifi(CheckBox5checked)iandi(ComboBox16text<>'0')ANDi(gjtime1<strtoint(edit38t
ext))then
gjtime1:=gjtime1+1;//攻击的延时。用来使这个变量通过这个timer不停的自加1一直加到延时等于想攻击的时间。比如我设置的攻击。是3秒按一下。那这个就是自加到3,然后等调用的地方清0edit38里放着需要等到的时间。checkbox5是用来检测是否启用了这个功能。combobox是用户选择的快捷键。如果这个没有设置。是0的情况。也认为是没有启用这个功能。以下的都跟这个是一样的
Ifi(CheckBox6checked)iandi(ComboBox17text<>'0')andi(gjtime2<strtoint(edit39text))then
gjtime2:=gjtime2+1;
Ifi(CheckBox7checked)iandi(ComboBox18text<>'0')andi(gjtime3<strtoint(edit40text))then
gjtime3:=gjtime3+1;
Ifi(CheckBox8checked)iandi(ComboBox19text<>'0')andi(gjtime4<strtoint(edit41text))then
gjtime4:=gjtime4+1;
Ifi(CheckBox9checked)iandi(ComboBox20text<>'0')ANDi(fztime1<strtoint(edit22text))then
fztime1:=fztime1+1;
Ifi(CheckBox10checked)iandi(ComboBox21text<>'0')andi(fztime2<strtoint(edit23text))then
fztime2:=fztime2+1;
Ifi(CheckBox11checked)iandi(ComboBox22text<>'0')andi(fztime3<strtoint(edit24text))then
fztime3:=fztime3+1;
Ifi(CheckBox12checked)iandi(ComboBox23text<>'0')andi(fztime4<strtoint(edit20text))then
fztime4:=fztime4+1;
Ifi(CheckBox13checked)iandi(strtoint(edit25text)>0)and(huanidtime<strtoint(edit25text))then
huanidtime:=huanidtime+1;
Ifi(CheckBox1checked)iandi(strtoint(edit17text)>0)iand(ComboBox1text<>'0')and(hptime<10)ithen
hptime:=hptime+1;
Ifi(CheckBox2checked)iandi(strtoint(edit18text)>0)iand(ComboBox2text<>'0')and(mptime<10)ithen
mptime:=mptime+1;
ifi(CheckBox18checked)iandi(strtoint(edit52text)>0)iandi(combobox25text<>'0')andi(bbtime<strtoint(edit52text))then
bbtime:=bbtime+1;
ifi(CheckBox4checked)iandi(combobox4text<>'0')ithen
huanwqtime1:=huanwqtime1+1;
ifi(CheckBox4checked)iandi(huanweizhi<>0)ithen
huanwqtime2:=huanwqtime2+1;
edit7Text:=Concat('攻',inttostr(gjtime1));
edit8Text:=Concat('攻',inttostr(gjtime2));
edit9Text:=Concat('攻',inttostr(gjtime3));
edit10Text:=Concat('攻',inttostr(gjtime4));
edit11Text:=Concat('辅',inttostr(fztime1));
edit12Text:=Concat('辅',inttostr(fztime2));
edit13Text:=Concat('辅',inttostr(fztime3));
edit14Text:=Concat('辅',inttostr(fztime4));
edit48Text:=Concat('换',inttostr(huanidtime))i;
edit15Text:=Concat('HP',inttostr(hptime))i;
edit16Text:=Concat('MP',inttostr(Mptime))i;
edit49Text:=Concat('宝',inttostr(bbtime))i;
edit55Text:=Concat('武',inttostr(huanwqtime1))i;
edit56Text:=Concat('器',inttostr(huanwqtime2))i;
//这些是把这些变量都用一个text表输出出来。我好测试一些问题看着。没什么用
end;
这是第2个timer。用来监控时间的。他用来把那些变量每秒+1。让各自函数分别检测这些变量来判断是否应该执行对应的 *** 作。比如喝血cd。技能cdi以及打怪时间,换怪时间,i换武器时间等等

写这篇文章是因为从小喜欢游戏,一直以来,学习编程的过程中一直喜欢
游戏方面的东东我想和我一样的人,大概还有很多吧
## 这里将要讨论的不是什么高深的游戏原理而只是在易语言中如何
画出游戏画面因为懂的不多,请高手指正
主要内容 : 1:如何画出图像
2:如何消除闪烁
3:如何设计角色结构
4:如何进行半透明混合
5:如何进行高级图像处理

(一):
首先,如何画出图像
太简单了,用画板

号=载入("文件名")
画板1画(号)
其次,画动画
也很简单: 首先载入多个,其号存入 号数组[N]中
计次循环首(数,计次变量)
画板1画(号数组[计次变量])
计次循环尾
你现在大概看到了他的坏处,太闪烁了
我们可以有两个办法
1: 画板1禁止重画()
画板1画()
画板1充许重画()
2: 再放一个 画板2
先在画板2上面画出我们想画的图像再把画板2 复制到 画板1 上去
## 实际上, 我们将要采用的就是方法 2
你可以试一下,两个画板复制 的速度是 画 的多少倍我想
大概有 10 倍左右

上面的试验 如果 每一次画 只画一个上去,那么你看不出有什么不同
但实际 *** 作中,每一帧画面都是由许多 小 所组成的
比如,一个飞机游戏 敌机有十多架,再加上満天的子d,都要我们一个一个的画
上去,如果直接在 窗口主画板 上画,必然会出现闪烁 所以我们要设两个
画板, 主画板 和 副画板 先在副画板上 把要画的飞机和子d 一个 一个的
画上去, 再用一个
副画板复制(,,,,主画板,,,)
把他们一下子复制到主画板上去
## 这里,我再加一句,敌机和子d 也是,如果直接用 画() 画到副画板
上,会消耗时间 所以, 还要再加一个画板
材料画板
那么是不是 有多少敌机就要加多少画板呢
不可以
这里就要 设计一下 数据的结构了
设一个 结构名为 [ 原型 ]
它有如下 成员:
1:x
2:y
3:宽度
4:高度
5:停留时间
载入时,可以将所有要用到的 集合到一张上,载入此到材料画板
然后 设一个 数组变量
物体原型[N] 数据类型 原型
程序运行前将 材料画板上的各个 要画的物体 在材料画板上的 左顶点,长度,
宽度,依次 赋值 给 物体原型[N]数组的各个元素
这样,在程序中使用起来,就方便了
材料画板复制(,,物体原型[N]宽度,物体原型[N]高度,副画板,物体原型[N]x,物体原型[N]y,)
实际上,我们将来还要再来一个 结构 [ 实物体 ]
他的成员为:
1:x
2:y
3:原型 数据类型 原型
4:层次 (指示其在多个物体时的遮挡层次)
5:是否碰撞检测
6:前进方向
7:所去目标坐标
8:被碰撞时的处理方法
到时候真正用到的将 是这个实物体
说了这么多,很无聊实际上,相当于我们构建一个 易语言 中的可视控件
比如 框1x=100,框1y=200 就可以将它移动到 100,200 处
我们就是在模仿它的原理
## 为什么 不直接 用可视控件 来做呢 就是因为 速度

上面讨论了 一下 游戏中的结构,实际上你可以自已任意的设计只要你觉得方便就可以
所以我也不多说了主要还是讲讲图像方面
## 如何 画半透明合成 的图像
这个又叫 alpha 混合 是很多大型游戏中 必被用到的在API 中有一个函数可以供我
们使用 AlphaBlend()
---------------------------------------
Dll命令:半透明混和
返回值类型:逻辑型
Dll库文件名:msimg32dll
在Dll库中的命令名:AlphaBlend
参数:hdc1
参数:x
参数:y
参数:宽度
参数:高度
参数:hdc2
参数:x2
参数:y2
参数:宽度2
参数:高度2
参数:复制方式 数据类型:整数型
----------------------------------------
实际上它的使用方法和 画板的 复制方法差不多,只是多了两个参数
其中的参数 hdc1 和 hdc2 是源画板和目标画板的设备句柄 要用下面这个API 取得
--------------------------------------
Dll命令:getdc
返回值类型:整数型
Dll库文件名:user32dll
在Dll库中的命令名:GetDC
参数:窗口句柄
--------------------------------------
具体使用方法如下:
------------------------------------
子程序:__启动窗口_创建完毕
hdc1 = getdc (画板1取窗口句柄 ())
hdc2 = getdc (画板2取窗口句柄 ())
------------------------------------
------------------------------------
子程序:_按钮4_被单击
alphafunc (hdc1, 0, 0, 200, 200, hdc2, 0, 0, 200, 200, 混合度 × 50)
------------------------------------
说明: 上面的 混合度=求次方(2,16) ,后面所跟的 50 是混合度,从(0~255)
之所以这样是因为 这个参数是一个 四字节的结构指针
上面的程序是可以运行的,当然你的画板2 上要先画上,或者先设好了底图
实际上,不光 画板 可以 取出dc ,任何窗口对像都有dc, 所以你可以把 按钮控件(
或者其它任何控件) 复制到画板上,或者任何地方
当然,用完了dc,还要安全释放
在 _启动窗口_将被销毁 中加入以下命令
释放dc(_启动窗口取窗口句柄(),hdc1)
释放dc(_启动窗口取窗口句柄(),hdc2)
该命令的 定义如下:
------------------------------------
Dll命令:释放dc
Dll库文件名:user32dll
在Dll库中的命令名:ReleaseDC
参数:窗口句柄
参数:hdc
------------------------------------

## 如何进行 高级图形处理
说明: 请你看清了, 是高级而不是高速因为我至今还没有学会高速处理图像的方法
这里所说的,将是最简易的方法如果你知道,请回一贴,我十分感激
先打个比方, 有些游戏 一进的进候,屏幕慢慢变黑或变白有些时候,又会慢慢变成红
色(多半是死亡时)就像是一层 透明彩色纸 挡住了一样
这是如何实现的呢
先定义一个字节集 zz
然后
zz=画板1取()
此时, zz数组中就存有了 画板1 上的所有点的颜色值它的格式是这样的
前54个元素 是格式说明(我也不知道,猜的)
从 第 55 个元素起,一直到最后,是图像各个点的数据
说明如下: 假若 画板1 左下角 处有一个 红色点 则
zz[55]=0 蓝色值
zz[56]=0 绿色值
zz[57]=255 红色值
知道了这些,就可以用我们自已的方法来处理图像了
----------------------------------------------------
子程序:_按钮1_被单击
局部容器:zz 数据类型:字节集
局部容器:计次 数据类型:字节集
zz = 画板1取 (, )
计次=55
计次循环首( 画板1宽度 画板1 高度, )
zz[计次]=255
计次=计次+3
计次循环尾
画板1底图 = zz
----------------------------------------------------
上面 我们把所有 的蓝色都改为 255 (最大值),整个画板上的图像都像蒙了一层
蓝色透明纸一样我们的愿望实现了
最后不得不说的是:这种方法处理起来很慢,主要时间就浪费在 画板取() 和
画板1底图= zz 上面了
这种办法最简单但最不高效在我这里测试了一下,
当画板大小为 400 200 时
上面的 程序执行时间大约是04--05 秒左右也就是说:每秒只能画两帧图像
适当的调大颜色变化值,每帧图像的 像素颜色变化值 调大到 10 左右时,
效果看起来还差不多,可以实现淡入淡出效果了
有了这种方法,还可以进行各种处理,如 滤镜效果浮雕效果真正半透明合成 等等
(上面介绍的Alphablend () API 并不是真正的 alpha 混合,而只是固定混合)
「知无不言言无不尽百人誉之不加密百人毁之不加疏」-- 诸葛廷栋

内存脚本:数据方面依靠内存地址, *** 作方面用模拟按键。

内存挂:数据方面依靠内存地址, *** 作方面调用游戏本身的函数,也就是人家说的关键CALL。

内存挂就是通过在内存中搜索游戏相关的数据,逐步缩小搜索范围,然后再修改,那样客户端获得的数据就是修改后的,然后返回给服务器的数据也是修改后的比如说攻击本来是打不死怪的,但是修改成攻击很高,一刀杀掉了。

客户端就会返回杀死了怪的记录,然后服务器就会传递升级的信号,客户端就可以发现升级了,简单说就是数据拦截。

扩展资料:

内存脚本优点:

优点是存取速度快、读写方便,缺点是数据不能长久保持,断电后自行消失,因此主要用于计算机主存储器等要求快速存储的系统。按工作方式不同,可分为静态和动态两类。静态随机存储器(SRAM)的单元电路是触发器,存入的信息在规定的电源电压下便不会改变。

SRAM速度快,使用方便。动态随机存储器 ( DRAM ) 的单元由一个金属-氧化物-半导体(MOS)电容和一个MOS晶体管构成,数据以电荷形式存放在电容之中 ,需每隔 2~4毫秒对单元电路存储信息重写一次(刷新)。DRAM存储单元器件数量少,集成度高,应用广泛。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12805268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存