仅供学习和交流,先上结论:
理论:
使用 Cheat Engine 查找进程中需要修改的数值,观察数值的变化确定数值的内存地址,通过代码改变内存地址的数值。
开搞
-
windows 基础类库 kernel32.dll 中提供了如下接口 【memoryapi.h】
由于 c++ 比较阴间,我们把它翻译成c#
[DllImport("kernel32")]
extern static bool WriteProcessMemory(IntPtr hProcess, IntPtr lpAddress, IntPtr lpBuffer, int nSize, out int lpNumberOfBytesRead);
- 在C#中使用不安全代码(unsafe关键字)来实现修改内存的动作,有手就行
static unsafe void Main(string[] args)
{
var processAddr = Process
.GetProcesses()
.Where(x => x.MainWindowTitle.Contains("植物大战僵尸"))
.First()
.Handle;
var lpAddr = new IntPtr(0x14964BF0);
var buff = 10086;
var result = WriteProcessMemory(
processAddr ,
lpAddr,
new IntPtr(&buff),
sizeof(int),
out var lpNumberOfBytesRead
);
}