c ++ PE注入其他功能

时间:2015-05-29 14:33:07

标签: c++ winapi

例如,我有非常简单的C ++主函数

int main ()
{ 
    for (int i = 0; i < 10; i++) Sleep(10);
    return 0;
}

所以这个exe在开始10秒后关闭。 现在的问题是: 有没有办法JOIN(连接)两个PE应用程序? 我正在尝试一个程序C ++,它将两个应用程序合并为一个新的。例如: 我使用参数app运行我的程序:

My_app.exe %windir% / calc.exe 

Exe Wrapper 一般说明 Exe包装器是一个命令行实用程序,可以编译和输出“启动器”exe 与输入exe一样工作,但有一些额外的功能。包装器必须是命令 基于三个输入变量的行: 1.任何Windows可执行文件 2.到期日期 3.服务器指令和“下载exe”的URL 示例命令: wrapper.exe“input_exe.exe”“20150528 15:00:00” “http://pemainin。 COM / launch_askar.php PID = 2及?TID = 123&安培; N =测试” 包装器的输出是一个新的exe文件,它看起来尽可能与输入相似 可执行程序。 如果没有设置到期时间,则输出exe应该表现为exe从start开始到期。该 输出exe应该如下:

2 个答案:

答案 0 :(得分:1)

你所描述的是不可行的。您必须分析目标应用程序的原始代码,并在该代码中注入您的自定义代码以执行您所需的操作,在到期时间中断其消息循环(如果它甚至有一个)等等。这将是非常的复杂的实施,甚至不值得努力。

一种不那么具有侵入性的方法,一种更容易实现的方法,就是将自定义代码附加到目标.exe文件的末尾,然后读取文件的PE标头以找到应用程序&# 39; s入口点功能并通过绕道修补它,跳转到您的自定义代码并蹦床回到原始入口点代码,以便应用程序可以正常运行。您的自定义代码可以启动一个工作线程,该线程在到期时间(最好通过优雅的方式 - WM_CLOSE / WM_QUIT等)杀死当前进程,然后再使用暴力 - TerminateProcess()),或者在允许应用程序正常运行之前做任何其他事情。

另一种方法是创建并运行你的启动器作为一个完全独立的进程,让它做任何在启动时需要做的事情,然后正常运行原始目标.exe文件并在到期时终止它。如果要将两个.exe文件合并到一个.exe文件中,可以将目标应用程序存储到启动程序的资源中,然后启动程序可以将应用程序解压缩到临时文件,运行它,然后将其删除(或者,有第三方解决方案用于从内存而不是文件运行可执行文件)。这种方法的缺点是,知识渊博的用户可以在运行时复制提取的应用程序,从而绕过您的启动器。

答案 1 :(得分:0)

您要构建的内容称为“活页夹”。您可以通过让包装器“加入”两个PE文件stubdecoy来实现您想要的效果。 stub将实现您概述的主要功能(从链接下载,超时e.t.c),并且还负责删除和执行包装器嵌入其中的decoy PE文件。包装器可以将decoy PE文件嵌入到资源部分中,或者将其附加到stub文件的末尾,并添加一个配置文件,告诉stub有关该文件的位置和大小的信息。诱饵文件,URL,超时等进入资源部分。因此,当运行stub时,它所要做的就是找到并读取配置并删除并执行decoy PE文件作为新进程。要使“绑定”可执行文件看起来像decoy PE文件,包装器可以将decoy PE文件的图标和版本资源应用到stub

Here是我对带有源代码的活页夹的实现。