在其他过程中找到价值

时间:2013-12-28 14:54:19

标签: c# memory process

我正试图在另一个进程的内存中找到一个特定的值(字节数组或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]);

我想我还在读错了记忆中的部分?

0 个答案:

没有答案