这是昵称的昵称 发表于 2019-3-25 09:18

利用C语言进行游戏内存修改

本帖最后由 wushaominkk 于 2019-3-25 09:27 编辑

#include <tchar.h>
#include "stdafx.h"
#include <Windows.h>
#include<iostream>
using namespace std;
int gameaddress = 0x0000000; //游戏基址;
HANDLE gameprocess;

首先这里是一开始需要用到的。 gameaddress是游戏基址,也就是用CE找到的最后一个地址。






int _tmain(int argc, _TCHAR* argv[])
{
    //获取游戏窗口所在进程的进程ID,也就是PID
    HWND hWnd = FindWindow(NULL, TEXT("进程id"));
    if (NULL == hWnd)
    {
      printf("查找窗口失败\n");
      return 0;
    }
   
    DWORD dwProcessId;
    GetWindowThreadProcessId(hWnd, &dwProcessId);
    printf("进程ID:%d\n", dwProcessId);
   
    //获取进程句柄
    gameprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
    if (NULL == gameprocess)
    {
      printf("打开进程失败\n");
      return 0;
    }

这里是对进程ID的读取





int *get4point(int gameaddress,int p1,int p2,int p3,int p4)
{
      int iBase, iP1, iP2,iP3,iP4,*iP5;
    if (!ReadProcessMemory(gameprocess, (LPVOID)gameaddress, &iBase, 4, NULL))
    {
      return NULL;
    }

    if (!ReadProcessMemory(gameprocess, (LPVOID)(iBase + p1), &iP1, 4, NULL))
    {
      return NULL;
    }
    if (!ReadProcessMemory(gameprocess, (LPVOID)(iP1 + p2), &iP2, 4, NULL))
    {
      return NULL;
    }
      if (!ReadProcessMemory(gameprocess, (LPVOID)(iP2 + p3), &iP3, 4, NULL))
    {
      return NULL;
    }
    iP4=(int *)(iP4+p3);
      return iP4;
}


上面这段是对当前地址的读取,就是根据基址和偏移找到现在的地址,以4个偏移为例子。


int *pwx=get5point(gameaddress,0xD4,0x88,0x1D0,0x8,);//这里的话输入4个偏移。
      floatwx = 150;   
      cout<<pwx<<endl;
      WriteProcessMemory(gameprocess, pwx,&wx, 4, NULL);
对地址进行修改,就是在新的地址替换基址


新手入门,这是我当时在学c语言指针偏移的时候参考植物大战僵尸源码,写了一下中国式家长的修改器。
{:301_977:}

wushaominkk 发表于 2019-3-25 09:28

【公告】发帖代码插入教程
https://www.52pojie.cn/thread-713042-1-1.html
代码插入注意格式,已帮你编辑,下次注意!

huste 发表于 2019-3-25 10:09

不错哦,谢谢分享

boy7928 发表于 2019-3-25 10:19

正在学C语言,不过看楼主这个 应该是属于C++的范畴了吧

hewei000 发表于 2020-7-30 19:04

支持一下
页: [1]
查看完整版本: 利用C语言进行游戏内存修改