【发布时间】:2012-07-14 13:41:06
【问题描述】:
我从一个站点“复制”了一个简单的代码 sn-p,并将其调整为我试图破解的游戏。一个没有多人游戏的老游戏,基本上只是为了练习所有这些记忆编辑的东西。每次我的程序成功返回一个窗口句柄,但随后无法返回进程句柄。这是我的代码:
#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 中编译)
【问题讨论】:
-
为什么不调用一些 GetLastError 来获取更多关于发生了什么的详细信息??
-
您的计算机上是否安装了任何反恶意软件,可以防止您的程序是未签名的可执行文件侵入进程?
-
@Desmond 我启用了 microsoft security essentials,但即使我禁用它(禁用实时保护,当它不起作用时,我只是用进程管理结束它)它仍然具有相同的效果.
-
可能又是一个空白镜头,但是您是否以管理员权限运行您的程序?
-
是的,我刚刚想通了。那太愚蠢了,我使用了数学家建议的 GetLastError,它说“拒绝访问”,所以我认为这将是管理员权限的事情。真是菜鸟的错误。