1

チート エンジンを使用して見つけたアドレスから文字列値を取得しようとしています。たとえば 0x01742A38 が見つかりました。これは私のプログラムの主要部分です (通常の Windows フォーム アプリケーション)。

            Process[] processes = Process.GetProcessesByName("Tibia");

            foreach (Process p in processes)
            {
                IntPtr windowHandle = p.MainWindowHandle;
                byte[] bufor = new byte[50];
                uint baseAddress = (uint)p.MainModule.BaseAddress.ToInt32();
                IntPtr addr = ((IntPtr)(baseAddress + 0x01742A38));
                uint o = 0;
                UInt32 k = 30;
                if (ReadProcessMemory(windowHandle, addr, bufor, k, ref o))
                {
                    label3.Text = "Success!";
                }
                else
                {
                    label3.Text = "Fail : (";
                }
            }
4

1 に答える 1

1

静的アドレスが正しいと仮定すると、少なくとも正しいPROCESS_VM_READ (0x0010)でOpenProcess 関数を使用してターゲット プロセスを開く必要があります。

また、関数ReadProcessMemoryにより適した pinvoke シグネチャを使用することをお勧めします。

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out IntPtr lpNumberOfBytesRead);
于 2014-05-10T17:12:13.133 に答える