多文件嵌入系列(两种)

一、将驱动程序以数组的形式嵌入exe中

【准备】

示例采用VS2012,win32控制台--->空项目

选择Release、win32版本

解决方案资源管理器窗口中,右键选择属性

修改项目属性C/C++---->代码生成--->运行库--->多线程(/MT)

修改项目属性链接器--->调试--->生成调试信息--->否

这样生成的exe最小,而且当反编译时,避免出现编译路径等调试信息。

【功能】

将驱动程序嵌入exe程序,以管理员模式运行后释放驱动程序到指定目录

【步骤及代码】

1、使用工具:winhex 打开想要被嵌入的文件,按Control+A全选,右键--->编辑--->复制选块--->C源码

2、粘贴到一个【driver.h】文件内,会获得一个数组

driver.h

 1 unsigned char data[3584] = {
 2     0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
 3     0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 4     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 5     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00,
 6     0x0E, 0x1F, 0xBA, 0x0E, 0x00, 0xB4, 0x09, 0xCD, 0x21, 0xB8, 0x01, 0x4C, 0xCD, 0x21, 0x54, 0x68,
 7     ......
 8     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 9     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
10 };

main.c

 1 #include <windows.h>
 2 #include <stdio.h>
 3 #include <Shlwapi.h>
 4 #include "driver.h"
 5 #pragma comment(lib,"shlwapi.lib")
 6 
 7 int ReleaseFile(TCHAR FileName[])
 8 {
 9     HANDLE hFile = CreateFile(FileName,
10         GENERIC_ALL,
11         FILE_SHARE_WRITE | FILE_SHARE_READ,
12         NULL,
13         CREATE_ALWAYS,
14         FILE_ATTRIBUTE_NORMAL,
15         NULL);
16     if (hFile == INVALID_HANDLE_VALUE){
17         printf("CreateFile error %x\n", GetLastError());
18         return -1;
19     }
20 
21     DWORD dwret;
22     BOOL bret = WriteFile(hFile, data, sizeof(data), &dwret, NULL);
23     if (!bret){
24         printf("WriteFile error %x\n", GetLastError());
25         CloseHandle(hFile);
26         return -2;
27     }
28     CloseHandle(hFile);
29     return 0;
30 }
31 int main()
32 {
33     ReleaseFile(TEXT("C:\\Windows\\System32\\drivers\\driver.sys"));
34     return 0;
35 }

二、在Visual Studio中将dll以资源的形式嵌入exe中

【功能】

dll功能:弹出对话框、cmd调用命令打开word文档

exe功能:注入dll到系统进程explorer.exe

【步骤】

准备环境成功后,右键添加现有项,将远线程注入所需的.cpp.h文件添加进去,然后再修改一下头文件包含的问题。

解决方案资源管理器窗口中,右键选择添加--->资源

弹出对话框

 

选择导入

 

这里要选择所有文件,否则.dll格式的文件无法显示,选择想要注入的dll后,出现下图所示对话框。

点击确定后,解决资源管理方案中多出了三个文件

 

在加载资源函数前,添加头文件[#include “resource.h”],否则有一些函数会报错

然后编译一下,如果还有语法报错,相信凭经验很快就能够解决掉它了。

最终在win7虚拟机中运行的结果如下图所示

 

借鉴的资源

https://bbs.csdn.net/topics/390413480

https://bbs.csdn.net/topics/250007060

关于dll注入的代码,强推https://github.com/fdiskyou/injectAllTheThings ,至少我在调试的时候,环境适配性很不错。

调试代码可以参考我的git

https://github.com/Qing-Huan/DLL-embedding-exe

posted @ 2019-12-25 15:54  Qing-Huan  阅读(2127)  评论(0编辑  收藏  举报