在c#中为代码洞穴计算64位jmp

时间:2017-03-28 12:19:17

标签: c# codecave

我无法解决我的问题。任何帮助赞赏。 我想为我分配的内存创建一个jmp。 如果我用作弊引擎分配的内存检查我的计算,那很好。 原因作弊引擎在更高的区域分配内存。 我分配的内存是例如:0x870000,我想创建jmp的地址位于:7FFDE65F5184。

Console.WriteLine("toWrite: {0:x}", toWrite.ToInt64()); /*toWrite: 7FFDE65F5184*/
IntPtr allocation = VirtualAllocEx(openproc, IntPtr.Zero , 0x1024, AllocationType.Commit | AllocationType.Reserve, MemoryProtection.ExecuteReadWrite);

Console.WriteLine("allocation: {0:x}", allocation.ToInt64()); /* allocation: 870000*/

IntPtr jmp = new IntPtr((toWrite.ToInt64() - (allocation.ToInt64() + 5)));

byte[] bytes1 = BitConverter.GetBytes(jmp.ToInt64());


byte[] bytes2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, };
bytes2[0] = 233;
bytes2[1] = bytes1[0];
bytes2[2] = bytes1[1];
bytes2[3] = bytes1[2];
bytes2[4] = bytes1[3];
/*nops*/
bytes2[5] = 144;
bytes2[6] = 144;
bytes2[7] = 144;
bytes2[8] = 144;
UIntPtr written = new UIntPtr();
WriteProcessMemory(openproc, toWrite, bytes2, 9, out written);

50%的结果是正确的。谁有人可以帮忙?

这是我的结果:

7FFDE65F5184 - E9 77AE271A           - jmp 7FFE00870000

为什么在我需要的jmp地址前面有7FFE00? 如果我在VirtualAllocEx中选择另一个值而不是IntPtr.Zero,则返回值为0 - 不知道为什么!我知道它没有很好的编码,但首先我想了解我的问题是什么以及如何解决这个问题。

非常感谢你们!

1 个答案:

答案 0 :(得分:0)

哇,伙计们!你激励了我,我得到了我的解决方案...... MEM_TOP_DOWN完成了这项工作!非常感谢!