首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言游戏外挂:一个简单的内存外挂

C语言游戏外挂:一个简单的内存外挂

作者头像
小林C语言
发布于 2019-06-10 14:47:29
发布于 2019-06-10 14:47:29
4.6K00
代码可运行
举报
运行总次数:0
代码可运行

版权申明:内容来源网络,版权归原创者所有。

通过 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); 能写入某一进程的内存区域。入口区必须可以访问,否则操作将失败

编写测试效果

打开游戏

运行外挂

成功执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//  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 界面和失败对应处理,仅供入门学习交流

如果您觉得本篇文章对您有作用,请转发给更多的人,点一下好看就是对小编的最大支持!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何打造一款游戏外挂
前言 记得小学的时候玩页游把家里电脑弄坏了(怎么回事,页游还能弄坏电脑?),然后我爸拿去重新装了系统,回来之后电脑里有了两个新的单机游戏,植物大战僵尸和大鱼吃小鱼。 那个年代周围的小学生都是赛尔号/奥
Java团长
2019/07/15
1.3K0
如何打造一款游戏外挂
植物大战僵尸辅助
孩子一直迷恋植物大战僵尸这款游戏,从一开始的水平不行,到后来经常看植物大战僵尸的过关视频来提升自己的游戏水平,到现在游戏是玩的越来越好了,至少感觉植物大战僵尸这个游戏水平比我强很多。
码农UP2U
2020/08/26
9130
通过ReadProcessMemory读取进程内存「建议收藏」
修改一个程序的过程如下:1、获得进程的句柄 2、以一定的权限打开进程 3、调用ReadProcessMemory读取内存,WriteProcessMemory修改内存,这也是内存补丁的实现过程。下面贴出的是调用ReadProcessMemory的例程
全栈程序员站长
2022/11/09
1.6K0
C/C++ 遍历任务栏托盘图标
托盘图标,就是底部任务栏托盘,可以直接遍历,如果需要输出任务栏中的图片内容可使用如下方式。
王 瑞
2022/12/28
1.1K0
C/C++ 遍历任务栏托盘图标
C/C++ 实现远程代码注入
#include <windows.h> #include <iostream> #define STRLEN 20 typedef struct _DATA { DWORD dwLoadLibrary; DWORD dwGetProcAddress; DWORD dwGetModuleHandle; DWORD dwGetModuleFileName; char User32Dll[STRLEN]; char MessageBox[STRLEN];
王 瑞
2022/12/28
6210
C/C++ 实现常用的线程注入
各种API远程线程注入的方法,分别是 远程线程注入,普通消息钩子注入,全局消息钩子注入,APC应用层异步注入,ZwCreateThreadEx强力注入,纯汇编实现的线程注入等。
王 瑞
2022/12/28
7870
7.7 实现进程内存读写
内存进程读写可以让我们访问其他进程的内存空间并读取或修改其中的数据。这种技术通常用于各种调试工具、进程监控工具和反作弊系统等场景。在Windows系统中,内存进程读写可以通过一些API函数来实现,如OpenProcess、ReadProcessMemory和WriteProcessMemory等。这些函数提供了一种通用的方式来访问其他进程的内存,并且可以用来读取或写入不同类型的数据,例如整数、字节集、浮点数等。
王 瑞
2023/09/25
6500
7.7 实现进程内存读写
createthread函数详解_createremotethread
另一种注入代码到其他进程地址空间的方法是使用WriteProcessMemory API。这次你不用编写一个独立的DLL而是直接复制你的代码到远程进程(WriteProcessMemory)并用CreateRemoteThread执行之。
全栈程序员站长
2022/09/30
7250
进程中的数据读取和修改
// 获取窗口句柄 HWND hFindWnd = ::FindWindow(NULL, “[窗口标题]”);
ClearSeve
2022/02/16
1.1K0
我是这样对灰产 游戏外挂 下手的
分析外挂样本一般的步骤 对外挂样本进行简单的信息分析。 分析还原外挂样本具体功能实现方式。 分析外挂样本的反检测功能。 1. 对外挂样本进行简单的信息分析 查看文件属性,灰产及外挂的标配语言 “易语
小道安全
2021/01/18
1.8K6
我是这样对灰产 游戏外挂 下手的
32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式
    32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式 一丶RadAsm的配置和使用 用了怎么长时间的命令行方式,我们发现了几个问题 1.没有代码提醒功能 2.编写代码很慢,
IBinary
2018/01/08
3K0
32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式
C/C++ 实现远程线程DLL注入
远程线程注入是最常用的一种注入技术,该技术利用的核心API是 `CreateRemoteThread()` 这个API可以运行远程线程,其次通过创建的线程调用 `LoadLibraryA()` 这个函数动态载入指定的DLL即可实现运行DLL, 而`LoadLibrary()`函数在任何一个可执行文件中都可以被调用到,这就给我们注入提供了有效的条件.
王 瑞
2022/12/28
7030
远程线程注入
IBinary
2018/01/08
1.2K0
远程线程注入
C/C++ 修改EIP实现DLL注入
挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝到里面去,然后修改目标进程EIP使其强行跳转到我们拷贝进去的相关机器码位置,执行相关,然后跳转回来。下面的例子是实现DLL注入,但是和平时说的远程代码注入在注入的逻辑上不同,但是同时都是用到了一个重要的结论就是:很多系统dll的导出函数地址在不同进程中,是一样的.
王 瑞
2022/12/28
1K0
DLL远程线程注入
CreateToolhelp32Snapshot函数 https://learn.microsoft.com/zh-cn/windows/win32/api/tlhelp32/nf-tlhelp32-createtoolhelp32snapshot 获取指定进程的快照,以及这些进程使用的堆、模块和线程。(也就是说,我们可以利用这个函数来获取进程的PID)
YanXia
2023/04/07
8110
DLL远程线程注入
3.1 DLL注入:常规远程线程注入
动态链接库注入技术是一种特殊的技术,它允许在运行的进程中注入DLL动态链接库,从而改变目标进程的行为。DLL注入的实现方式有许多,典型的实现方式为远程线程注入,该注入方式的注入原理是利用了Windows系统中提供的CreateRemoteThread()这个API函数,该函数第四个参数是准备运行的线程,我们将LoadLibrary()函数填入其中,这样就可以执行远程进程中的LoadLibrary()函数,进而将我们自己准备的DLL加载到远程进程空间中执行,DLL在被装载后则会自动执行初始化部分。
王 瑞
2023/09/13
1.3K0
郁金香商业辅助教程 2016 笔记 1~5
我们要用到一款工具,CE。打开之后点击左上角打开进程,会弹出进程列表,我们需要选择游戏的进程。
ApacheCN_飞龙
2019/02/15
1.1K0
郁金香商业辅助教程 2016 笔记 1~5
WriteProcessMemory_linux注入
今天要完成一个项内容,运行另一个应用程序abc.exe,实现它的父进程是explorer.exe。
全栈程序员站长
2022/09/30
5330
WriteProcessMemory_linux注入
readprocessmemory函数分析_in the process
函数原型:BOOL ReadProcessMemory(HANDLE hProcess,LPCVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesRead);
全栈程序员站长
2022/11/09
4340
自由控制程序运行方式的编程技巧
本篇继续阅读学习《有趣的二进制:软件安全与逆向分析》,本章是自由控制程序运行方式的编程技巧,主要介绍调试器的原理、代码注入和API钩子
中龙技术
2022/09/29
7410
自由控制程序运行方式的编程技巧
相关推荐
如何打造一款游戏外挂
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档