我正在尝试在calc.exe for Windows XP的文本部分末尾添加一条jmp指令,我已添加它并修改了入口点以从该地址开始并修改了虚拟大小文本部分,以便它可以处理添加的指令,但结果exe不起作用。我在这里错过任何东西吗? 这是我编写的用于处理这些事情的C#代码:
public static void inject()
{
StreamReader sr = new StreamReader("C:\\calc.EXE");
BinaryReader br = new BinaryReader(sr.BaseStream);
List<byte> bytesList = new List<byte>();
for (long i = 0; i < br.BaseStream.Length; i++)
{
bytesList.Add(br.ReadByte());
}
{
// updating the entry point
bytesList[280] = 176;
bytesList[281] = 42;
bytesList[282] = 1;
bytesList[283] = 0;
}
{
bytesList[496] = 192;
}
{
// second jmp
bytesList.RemoveRange(76464, 5);
byte[] injectedBytes = { 233, 255, 255, 249, 192 };
bytesList.InsertRange(76464, injectedBytes);
}
StreamWriter sw = new StreamWriter("C:\\calc2.EXE");
BinaryWriter bw = new BinaryWriter(sw.BaseStream);
bw.Write(bytesList.ToArray());
bw.Close();
}
并提前致谢
答案 0 :(得分:1)
当您更改(在您的情况下为Add / Enlarge)一个Section(在您的情况下为Code Section,也就是所谓的文本Section)时,您还必须告诉Windows Loader通过修改它将此附加部分映射到Memory中。部分的关联标题(描述符)。在您的情况下,看起来您没有这样做,并且Loader将不会加载新代码(在您的情况下,它甚至不会加载/启动应用程序)。修改图像文件很酷,但需要时间掌握。
Portable Executable File Format – A Reverse Engineer View显示了它的工作原理。