久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【新手教程】如何用C語(yǔ)言寫(xiě)游戲修改器,!

 GhostTrees 2019-05-19

本節(jié)教大家如何用基礎(chǔ)編程語(yǔ)言C語(yǔ)言寫(xiě)簡(jiǎn)單的游戲修改器。

用到的工具:

1.VC++6.0(上機(jī)通常都會(huì)用的)

2.CE 5.4(任何版本都行)

3.當(dāng)然要一款游戲這里我就用我臨時(shí)寫(xiě)的C語(yǔ)言小游戲來(lái)作為實(shí)驗(yàn)對(duì)象,。

教程開(kāi)始:

首先我們肯定要設(shè)計(jì)一個(gè)界面:


這里我用while循環(huán),,方便后面程序執(zhí)行完指令后不會(huì)退出。

在介紹重點(diǎn)部分時(shí),,我首先得介紹下涉及的專(zhuān)有名詞

句柄,、PID

句柄:這個(gè)嘛,是一種特殊的智能指針 ,。當(dāng)一個(gè)應(yīng)用程序要引用其他系統(tǒng)(如數(shù)據(jù)庫(kù),、操作系統(tǒng))所管理的內(nèi)存塊或?qū)ο髸r(shí),就要使用句柄 ,。我就引用百度詞條的解釋,。

PID:不管什么程序被運(yùn)行后都會(huì)被操作系統(tǒng)分配一個(gè)唯一標(biāo)識(shí)這個(gè)程序的ID。

如果想看具體每個(gè)程序的PID(任務(wù)管理器,,隨便選定一個(gè)進(jìn)程右擊,,選擇轉(zhuǎn)到詳細(xì)信息,就可以查看了,。(這里我是居于win10操作系統(tǒng)下)),。

如果實(shí)在不理解就把他們當(dāng)作現(xiàn)實(shí)生活中的學(xué)生證和身份證,有了這兩個(gè)就能證明你的身份,。程序一樣,。

介紹完句柄、PID的概念后我們正式開(kāi)始教程:

先定義個(gè)全局變量:

HWND hwnd; //這就是句柄的變量定義

DWORD Pid; //這就是PID的定義

定義完變量后,,就要獲取要修改的游戲的進(jìn)程句柄

這里我們用到FindWindow(NULL,,“模擬的貪吃蛇游戲”)“”這里面就填寫(xiě)你要獲取的窗口(這里我就填寫(xiě)我的游戲窗口名)

當(dāng)然這個(gè)函數(shù)是有返回值的

hwnd = FindWindow(NULL,“模擬的貪吃蛇游戲”)  就用剛剛的句柄變量接收

獲取完句柄后其次就是獲取PID:

這里PID的獲取就利用我們前面獲取的窗口句柄獲?。?/p>

 GetWindowThreadProcessId(hwnd,&Pid);   

 //形參一:從什么地方獲?。ň浔?/p>

形參二:獲取到的PID存放處

前期工作都做完后:

定義個(gè)新的類(lèi)型變量

HANDLE hprocess =0;

這個(gè)變量的作用就是接受進(jìn)程訪問(wèn)的許可

hprocess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);  //PROCESS_ALL_ACCESS

意思是獲取全部訪問(wèn)權(quán)限,;

講完前面的現(xiàn)在 我們需要獲取要修改的游戲分?jǐn)?shù)存放的地址

地址獲取方式就用ce

1.打開(kāi)游戲進(jìn)程 如圖

2.搜索分?jǐn)?shù)信息,,讓信息改變,再次搜索


這里我們就找到游戲分?jǐn)?shù)的地址 0x00328400

后面回到我的編程界面定義新的變量

DWORD score;  //要修改的分?jǐn)?shù)
DWORD ADDR =0x00328400;  //游戲分?jǐn)?shù)的地址

令score = 999,;

利用函數(shù)WriteProcessMemory(hprocess,(LPVOID)ADDR,&score,4,0);將修改后的地址注入到原來(lái)的地址中

到處就大功告成?。?/p>

最后附上源碼:

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#define Fail 0
#define Succeed 1


int GetHwnd();
void Fixprocess();

HWND hwnd;
DWORD Pid;
HANDLE hprocess = 0;

void main()
{
 int command;
 int ch;
 while(1)
 {
  system('cls');
  printf('-------------------------\n');
  printf('      1.獲取窗口句柄     \n');
  printf('      2.注入指令         \n');
  printf('      3.結(jié)束程序         \n');
  printf('-------------------------\n');
  scanf('%d',&command);
  getchar();
  if(command == 3)
  {
   break;
   exit(0);
  }
  else
  {
   switch(command)
   {
     case  1:
    //獲取程序的窗口句柄  int GetHwnd()
    ch = GetHwnd();
    if(ch == Succeed)
      printf('打開(kāi)進(jìn)程成功,,并且成功獲取窗口進(jìn)程,!');
    Sleep(2000);
    break;
     case 2:
      //注入指令
      Fixprocess();

    break;


   }

  }
 }


}

int GetHwnd()
{
 hwnd = FindWindow(NULL,'模仿的貪吃蛇游戲');
 if(hwnd!=0)
 {
     GetWindowThreadProcessId(hwnd,&Pid);
  hprocess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);
  if(hprocess == 0)
  {
   return Fail;
  }
  else
  {
   return Succeed;

  }

 }
 else
 {
      return Fail;
 }
}

void Fixprocess()
{
 //char Add[20];
 DWORD score;
 DWORD ADDR =0x00898730;
 //printf('輸入游戲分?jǐn)?shù)的地址:');
 //gets(Add);
 //getchar();
 //ADDR = *Add;
 printf('輸入你想要的分?jǐn)?shù):');
 scanf('%ld',&score);
 DWORD res = WriteProcessMemory(hprocess,(LPVOID)ADDR,&score,4,0);
 if(res == 0)
 {
  printf('指令注入失敗,!');
 }
 else
 {
  printf('指令注入成功,!');

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多