使用VC2008制作简单大航海外传内存修改器

这篇教程介绍了如何使用VC2008和WinAPI函数来创建一个游戏内存修改器,专注于实际操作,旨在帮助读者掌握内存修改的基本技巧。教程分为两部分,首先讲解了关键的WinAPI函数,如CreateToolhelp32Snapshot、OpenProcess等,并通过一个简单的控制台应用程序演示了它们的使用。接着,教程展示了如何构建一个GUI图形界面,实现读取和写入游戏内存的功能,以修改大航海外传女主角的金币数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者 :小草
日期 :2010/7/4

始发于 http://bbs.evewind.net/read.php?tid=2815


程序源代码下载地址: http://code.google.com/p/vcpluslvlup/downloads/list


此教程是本人游戏之作 ,如有雷同 ,纯属抄袭
此教程宗旨 :动手实践为主 ,理论解释为辅 .只看不动手者 ,只动手不自学者 ,请回家 . 编程乃至学习这件事不适合你 .

简介 :
此教程目的是为了记录我个人的学习成果 ,并希望阅读的人掌握文中提到 的知识 .
希望通过这样的方式,教会大家怎么样制作内存修改器,期待有抛砖引 玉的效果.




教 程分为2 个部分 :
1. 介绍游戏内存修改器主要用到的 WINAPI 函数 .
2. 通过图文一步步介绍如何使用 VC9创建修改器的图形界面 GUI和如何在其中使用第一部分提到的函数 .


使用到的工具:
Visual Studio 2008


作品功能:读取和写入大航海外传女主角的金币数


第一部分 : 介 绍游戏修改器主要用到的 WIN API 函数

游戏修改主要调用的 WIN API 函数有以下几个 :
HANDLE WINAPI CreateToolhelp32Snapshot(
__in DWORD dwFlags ,
__in DWORD th32ProcessID
);
功能 :CreateToolhelp32Snapshot ()函数用来创建系统快照以得到所有进程的信息 ,然后结 合下面的 Thread32First() Thread32Next()来枚举进程信息 . 如何使用在这部分的后面会展示 ,解释就不必了 .通常越解释越不明白 ,直接看实例会更好理解 .下面的函数也一样 .
BOOL WINAPI Thread32First(
__in HANDLE hSnapshot ,
__in_out LPTHREADENTRY32 lpte
);
功能 :取得第一个进程信息
BOOL WINAPI Thread32Next(
__in HANDLE hSnapshot ,
__out LPTHREADENTRY32 lpte
);
功能 :取得下一个进程信息
DWORD GetWindowThreadProcessId(
HWND hWnd, // handle to window
LPDWORD lpdwProcessId // address of variable for process identifier
);
功能 :GetWindowThreadProcessId()函数用 来得到我们所要修改的游戏窗口的句柄 (ID).为什么需要得到这个句柄呢 ? 答案是下面这个函数需要这个句柄才能让我们的修改器和游戏联系起来 .
HANDLE OpenProcess(
DWORD dwDesiredAccess, // access flag
BOOL bInheritHandle, // handle inheritance flag
DWORD dwProcessId // process identifier
);
功能 :OpenProcess()函数用来打开我们的修改程序和游戏之间的通道 .第一个参数是对我们所 要修改的游戏的内存区域进行修改的权限 ,一般当然是越高越好 .
BOOL WriteProcessMemory(
HANDLE hProcess, // handle of process whose memory is written to
LPVOID lpBaseAddress, // address to start writing to
LPVOID lpBuffer, // address of buffer to write data to
DWORD cbWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten // actual number of bytes written
);
功能 :WriteProcessMemory()函数进行内存的读取工作 .这个函数和下面的写入函数是内存修改器的灵 魂函数 .
BOOL ReadProcessMemory(
HANDLE hProcess, // handle of process whose memory is read
LPVOID lpBaseAddress, // address to start reading
LPVOID lpBuffer, // address of buffer to read data to
DWORD cbRead, // number of bytes to read
LPDWORD lpNumberOfBytesWritten // actual number of bytes read
);
功能 :ReadProcessMemory()函数进行内存的写入工作 .
好吧 ,一般没学过 WINAPI的人看到这段代码就开始晕呼呼了吧 .我在第一次看到的时候也一样 .其实不必惊慌 ,初学者只要知道有那么几个东西就够了 .并不需要强行把它们都理解或者 记住 .通过实例的练习 ,相信你们会很快熟悉 并开始运用它们 .
下面我们就开始进行动手做练习了 .可能有人会说怎么这么快 ,你基本什么都没说呢 !”.可是要知道 ,就算我说得再多 ,还不如亲手动手来实践学习得快 .很多人学习了 n年的 C++ VC,连一个简单的程序都做不出来 .为什么 ?因为只学习理论而不动手实践 .我的宗旨是 :不能真正动手写出实实在在程序的 ,不叫学习 ,请回家 .因为 ,所以 ,我们开始动手吧 .
为了更好的理解这些函数的运用和它们之间的联系 ,下面的程序使用控制 台为平台 .而不使用会混淆视听的图形界面 (GUI).至于我为什么这么做 ,读者们在看了后面的部分会明白的 .
运行 VS2008 ,按照文件 (File)->新建 (New)->项目 (Project)的顺序打开新建项目对话框 . 在项目类型里面选择 VisualC++下的 CLR然后在模板里选择 CLR Console Application.在 名字 (Name)中输入 KoukaigdTrainer.在储存地址 (Location)中输入 D:/Koukaigd trainer,如果你要存在其他盘如 C盘中就把地址中 的 D替换成 C.以后类似这样琐碎的事情我就 省略了 .如图 1显示 :


点击 OK ,进入代码编辑窗口 .
目前我们的控制台程序代码如下 :

//KoukaigdTrainer.cpp : main project file.
// Author: 小草
// Date:2010/7/4
#include "stdafx.h"
using namespace System;
int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值