我可以从另一个程序的内存中获取String吗?

时间:2013-10-04 13:21:48

标签: c# string memory text ram

提前感谢您的帮助。

我已经知道如何找到数值的内存地址,并在ram中读取\写入它们。 (使用C#)。 对于任何程序中的任何文本,我想要做的是相同的。但我不知道它是否可能。

那么比如说,我可以访问打开的notepad.exe内存来提取写在里面的String吗? 现在我正在这样做,它返回垃圾:

Process process = Process.GetProcessesByName("notepad").FirstOrDefault();
String stringaddress = "00401110";
int address = int.Parse(stringaddress, NumberStyles.HexNumber);
int bytesRead;
byte[] value = MemoryAccess.ReadMemory(process, address, 2000000, out bytesRead);
byte[] buf = Encoding.Convert(Encoding.GetEncoding("iso-8859-1"), 
                                Encoding.UTF8, value);
int count = buf.Length;
String tempString = Encoding.UTF8.GetString(buf, 0, count);

我最终想要的是能够在程序中找到特定窗口并复制其中的所有文本。

1 个答案:

答案 0 :(得分:0)

我认为地址根本没有变化。

使用ProcessMemoryReader,您可以尝试这样的事情。

ProcessMemoryReader memoryReader = new ProcessMemoryReader();
memoryReader.ReadProcess = process;
memoryReader.OpenProcess();

...

public string GetString(int memoryAddress, uint bytes) {
    int bytesRead;
    byte[] memoryValue = memoryReader.ReadProcessMemory((IntPtr)memoryAddress, bytes, out bytesRead);
    Encoding encoding = Encoding.Default;
    string result = encoding.GetString(memoryValue, 0, (int)bytes);
    result = result.TrimEnd('\0');
    return result;
}