C语言游戏脚本:一个简单的内存脚本!

通过 C 语言编写一个简单的外挂,通过 API 函数修改游戏数据,从而实现作弊功能

● 对象分析

● 要用的 API 函数简单介绍

● 编写测试效果

● 总体评价

对象分析

本次游戏对象为 Super Mario XP

没有更新所以可用任意版本 试玩发现人物血量最大为 10,心最大为 99,命最大为 99

要用的 API 函数简单介绍

HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName); 

// 通过类名或窗口名查找,返回窗口句柄

DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD lpdwProcessId); 

// 得到窗口句柄后通过 GetWindowThreadProcessId 这个函数来获得窗口所属进程 ID 和线程 ID

HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId) 

// 打开一个已存在的进程对象,并返回进程的句柄

bool WriteProcessMemory(HANDLE hProcess,LPVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesWritten); 

// 能写入某一进程的内存区域。入口区必须可以访问,否则操作将失败

编写测试效果

打开游戏

运行外挂

成功执行

//  01一个简单的内存外挂.cpp

//  C/C++

#include <windows.h>

#include <stdio.h>

int main() {

   HWND h = ::FindWindow(NULL, "Super Mario XP");  //  寻找并打开进程

   DWORD processid;

   GetWindowThreadProcessId(h, &processid);

   HANDLE hprocess = 0;

   hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processid);

   if (hprocess == 0) {    //  对应处理

       printf("打开进程失败!

"

);

       return 1;

   } else {

       printf("打开进程成功!

"

);

       DWORD hp = 10;  //  要修改的游戏数据最大值  

       DWORD heart = 99;

       DWORD life = 99;

       DWORD addr = 0x00428282;    //  通过CE找到的游戏数据地址

       DWORD addr2 = 0x00428292;

       DWORD addr3 = 0x004282a2;

       DWORD res = WriteProcessMemory(hprocess, (LPVOID)addr, &hp, 4, 0);  //  写入内存修改游戏数据

       DWORD res2 = WriteProcessMemory(hprocess, (LPVOID)addr2, &heart, 4, 0);

       DWORD res3 = WriteProcessMemory(hprocess, (LPVOID)addr3, &life, 4, 0);

       return 0;

   }

总体评价

由于是简单外挂,没有 GDI 界面和失败对应处理,仅供入门学习交流!

对于热爱编程的人来说,有一群一起学习一起解答的小伙伴很重要!笔者有一个C语言/C++编程零基础入门学习交流俱乐部(点击进入),还有编程学习文件(源码,零基础教程,项目实战教学视频),欢迎初学者和正在进阶中的小伙伴们!

发布了540 篇原创文章 · 获赞 143 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/HUYA69/article/details/105486987