在玩game 時, 補血, 補時間, 補寶物, 補人數. 如何做到.

如果我們可以知道存放在記憶的位置, 又有一權限可以修改記憶體. 這樣就可以永久保持人數不往下掉.

 

必要的步驟如下, 

  一. 知道要修改的 PID

      a. 如果你知道 window Handle hWnd, 

           DWORD proccess_ID;
           GetWindowThreadProcessId(hWnd, &proccess_ID);

     b. 不如果不知道, 可使用 function FindWindow( ) 拿回 hWnd, 

         MFC 可使用 this->m_hWnd;

  二. OpenProcess() with desired access right

       a.  HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proccess_ID);

       b. 或使用工具 processExplorer, process viewer 等可以查到 ProcessID, 再放到 OpenProcess 中.

  三. ReadProcessMemory( ) / WriteProcessMemory( )

            char    string[4096];
            int a = (int)GetClipboardData;  //此例可以拿回GetClipboardData() function 的ASM 前4個BYTE
            ReadProcessMemory(
                hProcess,
                (LPVOID)a,   // 可改回你在process 中要讀取的 address.
                string,
                4,
                &ss);

  四.  關閉 process handle

       CloseHandle(hProcess);

        也要印出 ss, 是否 READ/WRITE 是否有成功, ss 是傳回 多少Bytes 有讀寫成功.

 

  五. 完整function 

      主程式中找個地方call 以下Function.

void ProcessReadWriteTEST(HWND hWnd) // 可以傳入其他window 的handle , 就可以寫到其他程式的記憶體.
{
  TCHAR strX[1000];
  DWORD proccess_ID;
  GetWindowThreadProcessId(hWnd, &proccess_ID);
  HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proccess_ID);
  if (!hProcess)
  {
    //FAIL to open process;
  }
  else
  {
    SIZE_T ss;
    char dddd[5] = { 0x8b,0xff,0x55,0x8b,0xec };
    char str[4096];
    int a = (int)GetClipboardData;
    ReadProcessMemory(
      hProcess,
      (LPVOID)a,
      str,
      4,
      &ss);
    char bb[100];
    sprintf(bb, "%2x %2x %2x %2x %2x", str[0] & 0xff, str[1] & 0xff, str[2] & 0xff, str[3] & 0xff, str[4] & 0xff);
    strncpy(str, (char*)bb, 20);
    str[100] = 0; //
    swprintf(strX, 1000, L"%hs", str);
    MessageBox(NULL, strX, strX, MB_OK);
    char eeee[5] = { 0x11,0x22,0x33,0x44, 0 };
    if (WriteProcessMemory(hProcess, (LPVOID)a, eeee, 5, &ss))  // 這例子有破壞性, 請自行找另一個地方寫入做測試.
    ;
    CloseHandle(hProcess);
  }
}

如果MEMORY 有被Process 保護, 不能READ/WRITE. 這樣這支function 就不會成功.

 

 

arrow
arrow
    創作者介紹
    創作者 cianfen 的頭像
    cianfen

    cianfen的部落格

    cianfen 發表在 痞客邦 留言(0) 人氣()