如何以编程方式将参数/指令注入预先构建的可移植可执行文件中

时间:2012-11-28 04:02:04

标签: winapi assembly masm portable-executable

我有两个可执行文件,都由我手动创建,我将分别称为1.exe和2.exe。首先,两个可执行文件都是由MSVS 2010使用Microsoft编译器编译的。我想在1.exe中键入一条消息,我希望1.exe将该消息注入2.exe(可能作为某种参数),所以当我在1.exe注入消息后运行2.exe时, 2.exe将显示该消息。

注意 - 这不是非法使用,这些可执行文件都是由我创建的。

对我来说最重要的是:

  1. 将邮件/说明放在2.exe 的位置,以便2.exe
  2. 可以轻松访问这些邮件/说明
  3. 2.exe如何查找使用这些参数(消息)。
  4. 我完全理解我不能简单地使用C ++代码作为注入,它必须是裸装配,可以在运行时由编译器生成/翻译(如果我错了,请纠正我)

    我一直在想的一些解决方案:

    1. 在需要参数的2.exe中创建一个标准函数(例如显示消息框),然后将这些参数(消息)注入函数?
    2. 在2.exe中创建某种结构以保存1.exe将注入的值,如果是这样的话?我是否需要对将这些参数放入的偏移量进行硬编码?
    3. 注意 - 我不希望有一个勺子,我想熟练地理解编程的这个方面,我已经阅读了PE文件格式并且对汇编有很好的理解(MASM汇编语法),并且我很想学习更多。谢谢你的时间。

2 个答案:

答案 0 :(得分:4)

很少有程序员需要做这类事情。没有它,你可以完成整个职业生涯。我上次在大约1983年做过。

如果我没记错的话,我有2.exe包含一个这样的汇编程序模块(我忘记了语法):

.GLOBAL TARGET
TARGET  DB 200h  ; Reserve 512 bytes 

1.exe然后打开2.exe,在符号表中搜索全局符号“TARGET”,找出文件中的位置,写下它想要的512个字节,然后保存文件。这是一个许可计划。


来自https://stackoverflow.com/users/422797/igor-skochinsky的评论提醒我,我当时没有使用符号表。这是一个不同的操作系统。在这种情况下,我确实扫描了一个字符串。

答案 1 :(得分:0)

从您的描述中可以看出,只需在命令行上传递值即可。

Win32 GetCommandLine()函数会为您提供传递给MessageBox()的值。

如果它需要是另一个正在运行的实例,那么另一种形式的IPC就像Windows消息(WM_COPYDATA)一样。