別のプロセスメモリに書くにはどうすればよいですか?
-
30-09-2019 - |
質問
変更したいアドレスがあります。プロセスがあります。私は新しい価値を持っています。んで、どうする?
// My Process
var p = Process.GetProcessesByName("ePSXe").FirstOrDefault();
// Address
var addr = 0x00A66E11;
// Value
var val = 0x63;
どうすれば書くことができますか 0x63
(99)別のプロセスメモリ上のこのアドレスに?
解決
@harvey、あなたの答えから私は掘りました、そしてたくさん見つけました:
署名を開閉、閉じ、書き込みます:
[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);
[DllImport("kernel32.dll")]
public static extern Int32 CloseHandle(IntPtr hProcess);
フラグ:
[Flags]
public enum ProcessAccessFlags : uint
{
All = 0x001F0FFF,
Terminate = 0x00000001,
CreateThread = 0x00000002,
VMOperation = 0x00000008,
VMRead = 0x00000010,
VMWrite = 0x00000020,
DupHandle = 0x00000040,
SetInformation = 0x00000200,
QueryInformation = 0x00000400,
Synchronize = 0x00100000
}
私の人生を楽にする方法:
public static void WriteMem(Process p, int address, long v)
{
var hProc = OpenProcess(ProcessAccessFlags.All, false, (int)p.Id);
var val = new byte[] { (byte)v };
int wtf = 0;
WriteProcessMemory(hProc, new IntPtr(address), val, (UInt32)val.LongLength, out wtf);
CloseHandle(hProc);
}
別のプロセスメモリに書き込む:
static void Main(string[] args)
{
var p = Process.GetProcessesByName("ePSXe").FirstOrDefault();
WriteMem(p, 0x00A66DB9, 99);
}
他のヒント
チェックアウト writeprocessmemory pinvoke.netで
これが別の同様です 役職 StackOverFlowでは、C ++について話しています。 Pinvokeを使用して同じことができます。
p/は、次のようなネイティブ機能を呼び出します WriteProcessMemory
メモリ編集に専念するライブラリが存在し、このタスクをより簡単に達成できるようになります。
ライブラリを使用します メモリシャープ, 、これは次のように要約できます。
using(var sharp = new MemorySharp(Process.GetProcessesByName("ePSXe").FirstOrDefault()))
{
sharp[0x00A66E11, false].Write(0x63);
}
前のコードでは、値が記述されているアドレスがリベースされていないアドレスを想定しています。
使用できます writeprocessmemory, 、しかし、デバッグ特権をオンにする必要があり、Vista以降の多くの安全なプロセスでは機能しないことに注意してください。
そして、あなたはおそらく足で自分自身を撃ち、何度か物事をクラッシュさせることでしょう。これを行うときに重要なプログラムを実行していないことをお勧めします。
頑張ってください、あなたはそれが必要です。 :)
所属していません StackOverflow