乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【新手教程】如何用C語言寫游戲修改器!

       GhostTrees 2019-05-19

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

      用到的工具:

      1.VC++6.0(上機通常都會用的)

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

      3.當(dāng)然要一款游戲這里我就用我臨時寫的C語言小游戲來作為實驗對象。

      教程開始:

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


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

      在介紹重點部分時,我首先得介紹下涉及的專有名詞

      句柄、PID

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

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

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

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

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

      先定義個全局變量:

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

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

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

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

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

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

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

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

       GetWindowThreadProcessId(hwnd,&Pid);   

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

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

      前期工作都做完后:

      定義個新的類型變量

      HANDLE hprocess =0;

      這個變量的作用就是接受進程訪問的許可

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

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

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

      地址獲取方式就用ce

      1.打開游戲進程 如圖

      2.搜索分數(shù)信息,讓信息改變,再次搜索


      這里我們就找到游戲分數(shù)的地址 0x00328400

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

      DWORD score;  //要修改的分數(shù)
      DWORD ADDR =0x00328400;  //游戲分數(shù)的地址

      令score = 999;

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

      到處就大功告成?。?/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('打開進程成功,并且成功獲取窗口進程!');
          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('輸入游戲分數(shù)的地址:');
       //gets(Add);
       //getchar();
       //ADDR = *Add;
       printf('輸入你想要的分數(shù):');
       scanf('%ld',&score);
       DWORD res = WriteProcessMemory(hprocess,(LPVOID)ADDR,&score,4,0);
       if(res == 0)
       {
        printf('指令注入失?。?#39;);
       }
       else
       {
        printf('指令注入成功!');

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多