【发布时间】:2018-09-02 17:02:26
【问题描述】:
几天前我发布了一个关于 ReadProcessMemory 没有返回正确值的问题,现在我知道为什么它在我的 Windows 7 机器上工作而不是在 Windows 8.1 和 Windows 10 上工作,那就是 SeDebugPriviledge。我做了一些研究,发现了一个为它启用权限的函数,它返回它已经成功了。
void sample()
{
HANDLE hToken = NULL;
TOKEN_PRIVILEGES tokenPriv;
LUID luidDebug;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken) != FALSE)
{
if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luidDebug) != FALSE)
{
tokenPriv.PrivilegeCount = 1;
tokenPriv.Privileges[0].Luid = luidDebug;
tokenPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (AdjustTokenPrivileges(hToken, FALSE, &tokenPriv, 0, NULL, NULL) != FALSE)
{
// Always successful, even in the cases which lead to OpenProcess failure
cout << "SUCCESSFULLY CHANGED TOKEN PRIVILEGES" << endl;
}
else
{
cout << "FAILED TO CHANGE TOKEN PRIVILEGES, CODE: " << GetLastError() << endl;
}
}
}
CloseHandle(hToken);
}
但接下来发生的事情不是在控制台中打印出 0,而是开始打印出这个负数 -858993445。然后我决定在不同的进程和不同的计算机上尝试它,这次是在 windows 10 而不是 windows 8.1 上,并且在三个不同的进程和运行两个不同操作系统的两台不同的计算机上打印了相同的确切数字。我尝试在 Windows 7 上对程序进行编码,然后将其放在 USB 上并在 Windows 8.1 上运行,然后它就可以正常工作了。但是当我对其进行编码和调试时,它不起作用。有没有人对这个问题有任何经验以及如何绕过这个问题,我知道出于安全原因,但我需要 PROCESS_ALL_ACCESS 来练习逆向工程。
免责声明:这不是为了黑客或恶意软件开发目的,如果我想在视频游戏中作弊,我可以在线下载作弊
编辑:我应该补充一点,我的电脑找不到 secpol.msc
ReadProcessMemory 函数:
int main()
{
int points;
sample();
DWORD pID;
HWND hWnd = FindWindowA(0, ("Call of Duty®: Black Ops"));
GetWindowThreadProcessId(hWnd, &pID);
HANDLE pHandle = OpenProcess(PROCESS_VM_READ, FALSE, pID);
ReadProcessMemory(pHandle, (LPVOID)0x1C0A6C8, &points, sizeof(points), 0);
cout << points << endl;
system("pause");
}
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c++ windows security memory reverse-engineering