多文件嵌入系列(两种)
一、将驱动程序以数组的形式嵌入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