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

  对象分析

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  要用的 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

  #include

  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

  ;

  }

  代码可以左右移动哦!

大连治疗阳痿早泄医院 http://www.84211111.net/

  大连男科医院哪个正规 http://hnyy.01ny.cn/

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄