2

サイトから単純なコード スニペットを「コピー」し、ハッキングしようとしていたゲームに合わせて調整しました。マルチプレイヤーのない古いゲームで、基本的にこのすべてのメモリ編集作業を練習するためのものです。プログラムがウィンドウ ハンドルを正常に返すたびに、プロセス ハンドルを返すことができません。これが私のコードです:

#include "stdafx.h"
#include <iostream>
#include <Windows.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    long address = 0x47C0F04;
    int newvalue = 200; 
    DWORD newvaluesize = sizeof(newvalue);

    HWND hWnd = FindWindow(0, L"No One Lives Forever");
    HANDLE pHandle; 
    DWORD pid; 

    if(hWnd != 0) { 
        cout << "Found windowx.\n"; 
        GetWindowThreadProcessId(hWnd, &pid);
        pHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); 
    } 
    else {
        cout << "Can't find window\n";
    } 
    if(pHandle !=0) { 
        WriteProcessMemory(pHandle, (LPVOID)address, (LPVOID)newvalue, newvaluesize, 0);    
        cout << "Written to memory successfully\n";
    } 
    else { 
        cout << "Couldn't get handle.\n";
    } 
    CloseHandle(pHandle);
    return 0;
}

私の記憶が正しければ、このゲームは 2000 年のものです (ちなみに本当に素晴らしいゲームです)。高度なアンチ ハック シールドは搭載されていないと思います。チート エンジンでそのアドレスの値を編集して、問題なく動作します。

編集:正確に何が起こるかを説明します。常に「ウィンドウが見つかりました」と出力されますが、「ハンドルを取得できませんでした」と直接出力されます。コンパイラ エラーは発生しません (Microsoft Visual C++ 2010 Express でコンパイルしています)。

4

2 に答える 2

1

PROCESS_ALL_ACCESS 権限を持つハンドルを取得するには、プログラムを管理者として実行する必要があります。これにより、問題が解決します。

于 2020-03-28T21:52:33.167 に答える