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

一、Dll的优点:

1、扩展应用程序的特性

2、简化项目管理

3、有助于节省内存

4、促进资源的共享

5、促进本地化

6、有助于解决平台间的差异

7、可用于特殊目的

有关于dll及注入相关理论资料,可参考《Windows核心编程5》第四部分(19-22章)。

二、做dll注入时遇到的坑

环境:VS2013

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

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

问题:dll注入成功,但是dll中的代码未运行(未弹出对话框及打开word文档)

1、编译要选择Release版本,win32或者x64根据电脑的系统版本选择

2、exe注入dll时,传参的路径中要存在dll。这个坑我是怎么都没想到,阴沟里翻船了!我用的是获取当前路径函数[GetCurrentDirectory],而exe运行时获取的路径并不是exe真实存在的路径,或许你听起来蒙圈了,但是遇到注入失败时,确定路径是否正确也是一个调试思路。

三、无法获取dll路径

当我获取路径的问题无法解决时,有两种方法可以绕过该问题

1、将dll加密成字符串存储到exe中的大数组里,然后解密到指定路径dll_path下的.dll文件中,在注入的时候,直接传路径dll_path就万无一失了。

2、用Visual studio将dll以资源的形式嵌入到exe中。

我采用了第二种方法解决,第一种方法还未尝试

四、以远线程注入为例

1、准备

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

选择Release、win32版本

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

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

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

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

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

2、代码

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

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

弹出对话框

选择导入

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

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

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

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

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

(0)

相关推荐

  • Visual Studio使用Github同步项目后引用的dll全部失效

    因为我有个VSTO项目,在使用Github同步之后会出现引用全部失效的情况,如下图. 解决方案是删掉项目的csproj文件里的Target节点,然后重新打开项目即可.

  • 成功解决Visual Studio 2015安装时,点击vs_community.exe 没有反应

    成功解决Visual Studio 2015安装时,点击vs_community.exe 没有反应 解决问题 Visual Studio 2015安装时,点击vs_community.exe 安装执行 ...

  • Visual Studio Code 1.56稳定版发布

    白开水 OSC开源社区 昨天 文 | 白开水 出品 | OSC开源社区(ID:oschina2013) Visual Studio Code 1.56 稳定版已发布,其中一些主要亮点内容如下: 改进的 ...

  • 微软正式宣布 Visual Studio 2022

    首先,我们要感谢正在阅读这篇文章的你,我们所有的产品开发都始于你也止于你,无论你是在开发者社区上发帖,还是填写了调查问卷,还是向我们发送了反馈意见,或者参与了客户研究,感谢你帮助我们继续引导 Visu ...

  • 微软宣布Visual Studio 2022:10 篇热文汇总

    昨天 本文精选了DotNet 2021年04月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <微软正式宣布 Visual Studio 2022> 将会更 ...

  • Visual Studio Code出现乱码怎么办

    使用vscode打开记事本文档时,会出现如上图的乱码. VSCode通常默认UTF-8编码,打开"记事本"编辑的文本文件时会出现乱码,是因为Notepad在简体中文系统下,ANSI ...

  • 64位Visual Studio 2022,微软在下一盘大棋!

    dotNET跨平台 今天 有没有跟我一样奇怪过,都2021年了,用的还是VS2019?原来微软是憋大招去了,4月18号Amanda的一篇博文宣布了一则重磅消息--Visual Studio 2022 ...

  • 微软Build2021,.NET6 Preview4和Visual Studio 2022首发!

    Microsoft Build 2021全球开发者大会将至,将带来什么惊喜呢?去年Build 2020是第一次完全线上举办的Build大会,是第一次完全属于开发者的大会,几乎所有的新产品都是属于开发者 ...

  • 使用 Visual Studio Code 进行远程开发

    在完成了 AT 指令入门的学习之后,接下来就要使用 AT 指令进行 Socket 通信了.问题在于,之前 .NET 的 Socket 编程只需一台电脑便可进行学习,服务器和客户端都可以在本机运行,也可 ...