一、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. 当前行的td值传入模态框

    <!-- 让include引用的页面,因为故障列表和周.月故障列表里面的table和分页是一样的前端页面,只有一点不同,没必要每个页面都写这些 --> <table id=" ...

  2. [PowerShell]Windows服务开启、重启、关闭

    # 获取服务信息 PS C:\Users\Administrator> Get-Service win* Status Name DisplayName ------ ---- -------- ...

  3. ACP知识总结

    由于ACP是一个敏捷开发的系统性知识,下面只针对我自身学习的知识总结,若需要完整的考试学习资料,可评论区或私聊我拿.   敏捷估计与规划.png   ACP知识点锦集.png   敏捷项目软件总结.p ...

  4. 刷题84. Largest Rectangle in Histogram

    一.题目说明 题目84. Largest Rectangle in Histogram,给定n个非负整数(每个柱子宽度为1)形成柱状图,求该图的最大面积.题目难度是Hard! 二.我的解答 这是一个 ...

  5. python爬虫2:按html标签提取信息和中文域名处理(BeautifulSoup用法初步)

    #!/usr/bin/env python # -*- coding: utf- -*- # python3 import string import urllib from urllib impor ...

  6. opencv —— 同时识别三种颜色

    要点: 1.识别一种颜色 minH = ; //色相 maxH = ; minS = ; //饱和度 maxS = ; minV = ; // inRange(原图像, 最小值的范围, 最大值的范围, ...

  7. Node.js核心模块-fs文件系统

    fs是file-system的简写,文件系统的意思.在Node中如果想要进行文件操作,就必须引入fs这个核心模块. 引入 const fs = require('fs') fs.readFile(pa ...

  8. MariaDB(MySQL)创建、删除、选择及数据类型使用详解

    一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行 ...

  9. 分享10个免费或便宜的Photoshop替代工具

    说到编辑照片和图像文件,一般很多人都使用photoshop软件.然而,使用现在的最新版本Photoshop CC每月最低也要支付980日元,感觉使用门槛有点高的人应该不少吧. 有一篇文章,推荐了10个 ...

  10. Linux系统的启动原理

    Linux系统的启动原理 RHEL的启动原理BIOS自检-MBR-启动GRUB-加载内核-systemd的init进程 systemd的初始化进程加载需要的服务,挂载文件系统/etc/fstabsys ...