我为我的节目制作了一个小白名单。 但问题是它不起作用。 这是代码:
#include <iostream>
#include <Windows.h>
#include <string>
#include <cstdint>
using namespace std;
int main();
{
//Here is the part where it gets the process and it data so i won't type it here, takes too much space.
string a;
uintptr_t p = 0x0178B3A8;
int value = *reinterpret_cast<int *>(p);
int ID = 22862235;
printf("Authorizing...\n");
if(value == ID)
{
printf("Authorized, Access Granted\n");
Sleep(5000);
}
else
{
printf("ERROR004:Account Not On Whitelist\n");
printf("Shutdowning...\n");
BYTE newcode[] = {0x90, 0x90, 0x90, 0x90, 0x90, 0x90};
DWORD address = 0x007C122E;
WriteProcessMemory(GetCurrentProcess(), (LPVOID)address, newcode, sizeof(newcode), NULL);
}
}
运行时会显示“ERROR404:帐户不在白名单上” 任何修复???
答案 0 :(得分:4)
每个进程都有自己的虚拟寻址,其唯一的寻址空间可以使用或不使用任何地址。这允许物理存储在任何物理上可寻址的介质中:高速缓存,RAM,磁盘高速缓存或类似于成对的亚原子粒子旋转的深奥的东西。因此,所有进程可以同时使用相同的地址,因为每个进程中的每个地址都映射到物理存储中的不同位置。
OP已声明在某个未知进程的0x0178B3A8处,X是有效的ID号。OP的程序不是进程X.让我们称之为执行进程Y.在进程X中,0x0178B3A8很可能是用户ID的地址。我无法证实这一点。但由于0x0178B3A8是虚拟引用,而不是物理存储引用,因此进程Y无法读取0x0178B3A8并期望任何进程Y没有放在那里。如果Y没有在0x0178B3A8处放置任何内容,则程序的行为未定义。
如何解决这个问题我想与之无关。赔率很高,不会结束。