一、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虚拟机中运行的结果如下图所示

 

借鉴的资源

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

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

调试代码可以参考我的git

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

我并不是代码的创造者,只是将我遇到的坑展示出来,减少他人排坑的时间,欢迎大佬们指点!

在Visual Studio中将dll以资源的形式嵌入exe中的更多相关文章

  1. [C++] 将 mp3 等音乐资源以资源形式嵌入 exe 文件中

    引用:http://www.easyx.cn/skills/View.aspx?id=6 本文讲解怎样将 mp3 等音乐资源以资源形式嵌入 exe 文件中,并通过 mciSendString 调用.嵌 ...

  2. 将 mp3 等音乐资源以资源形式嵌入 exe 文件中

    引用:http://www.easyx.cn/skills/View.aspx?id=6 本文讲解怎样将 mp3 等音乐资源以资源形式嵌入 exe 文件中,并通过 mciSendString 调用.嵌 ...

  3. Visual studio 类视图和资源视图不显示的问题

    关于Visual studio 类视图和资源视图不显示的问题 解决方法: 1. 工具—选项—文本编辑器—C/C++—高级,浏览/导航下的禁用数据库选项置为False; 2. 输入命令:devenv / ...

  4. Visual Studio 生成DLL文件

    新建一个项目,在菜单栏中选择“项目”/“**属性”选项,该页面中将“输出类型”下拉列表中的选项选择为“类库”,然后重新生成一下该项目,或者在“Visual Studio 2008命令提示”中输入以下命 ...

  5. 在Visual Studio中将现有.NET Framework项目迁移至.NET Core 1.1 Preview 1

    1)下载安装包含 .NET Core 1.1 Preview 1 的 SDK:Windows x64 安装包(下载地址列表) 2)下载最新 VS 2015 NuGet 插件:https://dist. ...

  6. Visual Studio添加dll程序集引用操作步骤

    Visual Studio 中添加引用的操作: 在“解决方案资源管理器”中,先右击项目图标,在弹出菜单选择“添加引用...” 然后在弹出的窗口中选择所要添加的选项,点击确定就可以了. 原文:http: ...

  7. Visual studio 编译错误 无法将文件obj\Debug\*.exe复制到bin\Debug\*.exe

    问题: 错误 未能将“obj\Debug\Server.exe”复制到“bin\Debug\Server.exe”.超出了重试计数 10.失败. Server 错误 无法将文件“obj\Debug\S ...

  8. Visual Studio 2019社区版:错误 MSB6006 “CL.exe”已退出,代码为 2

    系统:win10 环境:Visual Studio 2019社区版 问题:错误 MSB6006 “CL.exe”已退出,代码为 2 解决方法: 1 一个类内部的定义返回类型为double的方法种没有写 ...

  9. Visual Studio下,打开资源视图rc文件,提示在另一个编辑器中打开

    在网上搜索关键字: rc文件   提示在另一个编辑器中打开 很多地方的回答都是说: rc文件以代码形式打开了,只要关掉后再打开就可以了. 但是,很多时候,当关闭掉RC的代码文件以后,发现VS的RC文件 ...

随机推荐

  1. [jQuery]jQuery链式编程(六)

    链式编程 节约代码量 <button>快速</button> <button>快速</button> <button>快速</butt ...

  2. h5笔记(实战)

    1.margin:auto 水平居中只对block有效,对inline和inline-block都无效 2.text-align:center 内容居中对block和inline-block有效,对i ...

  3. css实现表单label文字两端对齐

    如图,在我们写页面的时候,经常遇到这种的情况,而需求是想让label文字两端对齐,我们来看看如何用css解决 /**css代码**/ ul li{ list-style: none; } .info- ...

  4. 在虚拟机中使用NetToPLCSim和PLC相连.

    1,虚拟机...系统Win10...里面安装了VS. 2,本机...系统Win10...里面安装了博图15. 3,转换软件:NetToPLCSIM. 4,本机和虚拟机连接同一个路由器.注意: 5,设置 ...

  5. 推荐一款疫情期间适合在家办公的远程工具,仅需IP和密码轻松实现远程管理

    这段时间,受疫情影响,很多企业都开启了居家办公模式.但疫情突发,大多数人的办公资料没有拷贝打包,对于居家办公的人,尤其是运维人员来说,很难完成顺利完成工作. 像向日葵.teamviewer之类的远程软 ...

  6. 清北学堂—2020.1提高储备营—Day 3(图论初步(一))

    qbxt Day 3 --2020.1.19 济南 主讲:李奥 目录一览 1.图论(图.图的存储方式.最小生成树的定义) 总知识点:图论 前言:众所周知,图论是一个非常重要的部分,而这次集训也可以算从 ...

  7. 044.Python线程的数据安全

    线程的数据安全 1 数据混乱现象 from threading import Thread,Lock num = 0 lst = [] def func1(): global num for i in ...

  8. 【算法】——递归:小白正在上楼梯,楼梯有n阶台阶,小白一次可以上1阶,2阶或者3阶,实现一个方法,计算小白有多少种走完楼梯的方式。

    分析:从最后一步分析,能有的情况有三种情况构成,写出如图所示的方程 //和斐波拉契相似 int void f(int n) { //考虑出口 ) ;//正常思路是返回0 ) ;//通过自己想可以得出只 ...

  9. MySQL第六课

    SELECT [DISTINCT]     * /{字段名1,字段名2,字段名3,.........} FROM 表名 [WHERE 条件表达式1] [GROUP BY 字段名[HAVING 条件表达 ...

  10. 如何利用 WPS Office 进行 IIS Log 分析

    找到 IIS Log 打开 Internet Information Service (IIS) Manager 点击左侧 Connections > Sites,在右侧 Sites 列表中定位 ...