PDA

View Full Version : خواندن محتویات یک افست



sevenboys
سه شنبه 07 خرداد 1392, 16:19 عصر
چگونه محتویات یک آدرس ( آفست) از حافظه را میتوانم بخوانم؟

tooraj_azizi_1035
سه شنبه 07 خرداد 1392, 16:27 عصر
class ProcessMemoryReaderApi
{
// constants information can be found in <winnt.h>
[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
}

[DllImport("kernel32.dll")]
private static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);

[DllImport("kernel32.dll")]
public static extern Int32 CloseHandle(IntPtr hProcess);

public static byte[] ReadMemory(Process process, int address, int numOfBytes, out int bytesRead)
{
IntPtr hProc = OpenProcess(ProcessAccessFlags.All, false, process.Id);
byte[] buffer = new byte[numOfBytes];

ReadProcessMemory(hProc, new IntPtr(address), buffer, numOfBytes, out bytesRead);
return buffer;
}



IntPtr baseAddr = new IntPrt(0x00B5CCB8);
IntPtr newAddr = IntPtr.Add(baseAddr, 0x02);

FastCode
سه شنبه 07 خرداد 1392, 18:14 عصر
در خط 33 به جای All از VMRead استفاه کنید.خیلی از برنامه ها جلوی flag هایی مثل CreateThread, DupHandleو Terminate رو میگیرین

sevenboys
چهارشنبه 08 خرداد 1392, 10:52 صبح
دوست عزیز این فایل های دی ال ال که ایمپورت کردی را از کجا باید بگیریم؟؟؟

class ProcessMemoryReaderApi
{
// constants information can be found in <winnt.h>
[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
}

[DllImport("kernel32.dll")]
private static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);

[DllImport("kernel32.dll")]
public static extern Int32 CloseHandle(IntPtr hProcess);

public static byte[] ReadMemory(Process process, int address, int numOfBytes, out int bytesRead)
{
IntPtr hProc = OpenProcess(ProcessAccessFlags.All, false, process.Id);
byte[] buffer = new byte[numOfBytes];

ReadProcessMemory(hProc, new IntPtr(address), buffer, numOfBytes, out bytesRead);
return buffer;
}



IntPtr baseAddr = new IntPrt(0x00B5CCB8);
IntPtr newAddr = IntPtr.Add(baseAddr, 0x02);

_behnam_
چهارشنبه 08 خرداد 1392, 10:59 صبح
دوست عزیز این فایل های دی ال ال که ایمپورت کردی را از کجا باید بگیریم؟؟؟
kernel یک رابط سطح بالا برای توابع پایه ای سیستم است و در ویندوز وجود داره. نیازی نیست که شما اون رو دانلود کنی.