我正试图在另一个进程的内存中找到一个特定的值(字节数组或int32)。 以下代码不返回任何结果,但其他内存扫描程序(例如作弊引擎)可以找到值。
public void CheckForValue()
{
Process[] proc2 = Process.GetProcessesByName("xxxxxxxxx");
handle = OpenProcess(PROCESS_WM_READ, false, proc2[0].Id);
byte[] tofind = new byte[] { 0x01, 0x10, 0x00, 0x01 };
int results = 0;
uint PTR = 0x000000;
int read = 0;
byte[] page = new byte[4096];
bool found = false;
while (PTR <= 0x7FFFFFFF && !found)
{
read = 0;
page = new byte[4096];
if (ReadProcessMemory(proc2[0].Handle, (IntPtr)PTR, page, 4096, out read) != false)
{
if (ContainsBytes(page, tofind))
{
results++;
}
}
PTR += 4096;
}
}
public bool ContainsBytes(byte[] all, byte[] tofind)
{
for (int i = 0; i < all.Length - tofind.Length + 1; i++)
{
if (all[i] == tofind[0])
{
bool found = true;
for (int a = 1; a < tofind.Length && found; a++)
{
if (all[i + a] != tofind[a])
found = false;
}
if (found)
return true;
}
}
return false;
}
编辑:之前只检查模块,但现在不再检查(我认为)。
编辑2:我得到的结果与作弊引擎完全不同。我已经尝试查看确切地址的值,但它们是不同的:
ReadProcessMemory(proc2[0].Handle, (IntPtr)0x14F00420, page, 4096, out read);
Log(page[0] + " - " + page[1] + " - " + page[2] + " - " + page[3]);
我想我还在读错了记忆中的部分?