Files
KJD/TEMUKJD/BLL/MemoryReader.cs
T
2025-10-03 17:50:45 +08:00

79 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace TemuKJD.BLL
{
public class MemoryReader
{
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out uint lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out uint lpNumberOfBytesWritten);
[DllImport("kernel32.dll")]
public static extern bool CloseHandle(IntPtr hObject);
// 声明GetLastError函数
[DllImport("kernel32.dll")]
private static extern int GetLastError();
const int PROCESS_WM_READ = 0x0010;
const int PROCESS_WM_WRITE = 0x0020;
const int PROCESS_WM_ALL = 0x003F;
const int PROCESS_ALL_ACCESS = 0x1F0FFF;
public static void ReadMemory(int nProcess, int nAddress, int nReadSize)
{
int processId = nProcess; // 目标进程ID
//IntPtr hProcess = OpenProcess(PROCESS_WM_READ | PROCESS_WM_WRITE, false, processId);
IntPtr hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, processId);
if (hProcess == IntPtr.Zero)
{
int errorCode = GetLastError();
//Console.WriteLine("Process access failed.");
BaseForms.BaseMsgForm.ShowError("Process access failed.");
return;
}
int endAddress = nAddress + nReadSize;
while (nAddress < endAddress)
{
IntPtr address = new IntPtr(nAddress); // 目标内存地址
byte[] buffer = new byte[1024]; // 读取数据的缓冲区
uint bytesRead;
if (ReadProcessMemory(hProcess, address, buffer, (uint)buffer.Length, out bytesRead))
{
//Console.WriteLine("Read successful.");
string s = System.Text.Encoding.Default.GetString(buffer);
if (s.Contains("pddidResult"))
{
}
}
else
{
//Console.WriteLine("Read failed.");
// 获取最后一个错误代码
int errorCode = GetLastError();
//Console.WriteLine("Error code: " + errorCode);
// 将错误代码转换为异常(可选)
Exception ex = Marshal.GetExceptionForHR(errorCode);
//BaseForms.BaseMsgForm.ShowError(ex.Message);
}
nAddress += 1000;
}
//CloseHandle(hProcess);
}
}
}