关闭

让游戏不再愁“钱”花--->解决“钱不够花”问题---自编游戏修改器

标签: 游戏functionstringaccessuser制造
907人阅读 评论(0) 收藏 举报
分类:

让游戏不再愁“钱”花--->解决“钱不够花”问题---自编游戏修改器

刚才在整理以往的代码时候,整理到VB,还发现一个小玩具,我都快忘了,初中的时候玩红色警戒尤里的复仇,刚开始玩打最多的国家比较难,特别是机器配置越高,计算机越牛,不得不开加速齿轮来调节,感觉如果有更多的钱,就不需要加速齿轮了,于是萌生了能否搞个自己的修改器的想法。

首先,那个时候我已经知道那些money和数据都在内存中,为什么呢,因为我们使用金山游侠(免费破解版),那个时候有一个教程来讲怎么来定位钱数的内存地址,根据我的观察,钱的地址是动态的,但是,我就是想用自己编写的程序锁定钱数,那也很爽啊,因为那是自己的修改器,而且当时想一定有办法确定某个地址是钱的,例如说,让程序读某个固定的钱数(该钱数非常特别,然后自行按键激发,找到该地址,最后锁定该地址)。

界面比较丑陋(界面不重要么?!~不过对于自己用,够了,简洁明了):


因为玩红警的朋友,特别是我自己,感觉“钱不够花”,所以,一旦开始写,那么就会反复写内存,钱就产生一种花不完的状态,一花又恢复了,你不知道,那感觉多好,哈哈~~

估计很多程序员,也很希望现实中的银行卡上的钱也是这样。。。那岂不是很爽,即使在游戏中体验这种感觉也很不错呀。

这个程序的关键是:

1、定位住尤里复仇的钱的内存地址

2、实现读取和修改内存地址的值

3、使用代码按照秒数锁定内存地址的值

使用效果证明:

刚开始:钱数为4760


开始写:(再次实验使用该工具,同学的机器,我的机器上现在没有该游戏)

很久之前做的软件,那个显示钱数当时没有做好:


进入游戏:钱数已变为100


开始制造电场:可以看到钱数为98,瞬间截屏为98元,实际上只是下调了2


制造完毕,钱数仍未100


核心代码:

模块声明:

Option Explicit
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
全局声明:
Dim LngHand As Long
Dim StrName As String * 255
Dim str As String * 2
Dim lngProcID As Long
Dim phandle As Long
Const PROCESS_ALL_ACCESS = &H10000000
LngHand = FindWindow(vbNullString, "Yuri's Revenge")
GetClassName LngHand, StrName, Len(StrName)
GetWindowThreadProcessId LngHand, lngProcID
phandle = OpenProcess(PROCESS_ALL_ACCESS, False, lngProcID)
读取内存钱数(转换有问题)
ReadProcessMemory phandle, &H568D1B8, str, 2, 0&
Label1.Caption = str
锁定钱数:-----加一个时钟组件
WriteProcessMemory phandle, &H568D1B8, Chr$(100), 2, 10&
最终的关闭:
 CloseHandle ProcessHandle


对于钱数显示,是转化有问题,这里只是回顾我当时做的东西,这东西改进也没有太大意义,只是说明如此做是可以做成修改器的,另外,对于动态地址的游戏,我们可以采用内存基址+内存偏移量 来定位钱地址,可以实现永久的使用锁定效果。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:239657次
    • 积分:2977
    • 等级:
    • 排名:第11764名
    • 原创:56篇
    • 转载:87篇
    • 译文:0篇
    • 评论:24条
    最新评论