【发布时间】:2018-04-13 20:02:43
【问题描述】:
我试图通过创建字节数组、分配内存、写入分配的内存,然后创建远程线程来调用 C# 中的进程函数。据我所知,这是通过进程执行 shellcode 的常用方法。
void WalkFunc()
{
byte[] asm = new byte[]
{
0x6A, 0x01, //PUSH 1
0x31, 0xC9, //XOR ECX, ECX
0xBA, 0x10, 0x00, 0x10, 0x00, //MOV EDX,00+10+00+10
0xA1, 0xB0, 0x01, 0x83, 0x00, //MOV EAX,DWORD PTR DS:[8301B0]
0xE8, 0x??, 0x??, 0x??, 0x??, //CALL 0x005378E4
0xC3 //RETN
};
Process proc = Process.GetProcessesByName("process")[0];
IntPtr hHandle = OpenProcess((int)ProcessAccessFlags.All, false, proc.Id);
IntPtr hAlloc = VirtualAllocEx(hHandle, IntPtr.Zero, (uint)asm.Length, AllocationType.Commit, MemoryProtection.ExecuteReadWrite);
UIntPtr bytesWritten = UIntPtr.Zero;
WriteProcessMemory(hHandle, hAlloc, asm, (uint) asm.Length, out bytesWritten);
uint iThreadId = 0;
IntPtr hThread = CreateRemoteThread(hHandle, IntPtr.Zero, 0, hAlloc, IntPtr.Zero, 0, out iThreadId);
}
如您所见,我找不到调用偏移量。确实,在阅读信息后,我得到那个调用有 no static offset 所以我必须计算跳转地址,如果我没记错的话,就是 CALL 。 在我看来,我的 TO 是 0x005378E4。但我不知道如何找到我的 FROM 知道
VirtualAllocEx 正在分配一个我在运行时无法预测的地址。
谢谢
【问题讨论】:
标签: c# assembly memory ollydbg