ibcadmin 发表于 2019-12-26 09:06:18

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

<p>一、Dll的长处:</p>
<p>1、扩展应用步伐的特性</p>
<p>2、简化项目管理</p>
<p>3、有助于节流内存</p>
<p>4、促进资源的共享</p>
<p>5、促进当地化</p>
<p>6、有助于办理平台间的差异</p>
<p>7、可用于特别目的</p>
<p>有关于dll及注入干系理论资料,可参考《Windows焦点编程5》第四部分(19-22章)。</p>
<p> </p>
<p>二、做dll注入时遇到的坑</p>
<p>情况:VS2013</p>
<p>dll功能:弹出对话框、cmd调用下令打开word文档</p>
<p>exe功能:注入dll到体系历程explorer.exe</p>
<p> </p>
<p>题目:dll注入乐成,但是dll中的代码未运行(未弹出对话框及打开word文档)</p>
<p>1、编译要选择Release版本,win32大概x64根据电脑的体系版本选择</p>
<p>2、exe注入dll时,传参的路径中要存在dll。这个坑我是怎么都没想到,阴沟里翻船了!我用的是获取当前路径函数,而exe运行时获取的路径并不是exe真实存在的路径,大概你听起来蒙圈了,但是遇到注入失败时,确定路径是否精确也是一个调试思绪。</p>
<p>三、无法获取dll路径</p>
<p>当我获取路径的题目无法办理时,有两种方法可以绕过该题目</p>
<p>1、将dll加密成字符串存储到exe中的大数组里,然后解密到指定路径dll_path下的.dll文件中,在注入的时间,直接传路径dll_path就安若泰山了。</p>
<p>2、用Visual studio将dll以资源的情势嵌入到exe中。</p>
<p>我接纳了第二种方法办理,第一种方法还未实行 </p>
<p>四、以远线程注入为例</p>
<p>1、预备</p>
<p>示例接纳VS2012,win32控制台--->空项目</p>
<p>选择Release、win32版本</p>
<p>办理方案资源管理器窗口中,右键选择属性</p>
<p>修改项目属性C/C++---->代码天生--->运行库--->多线程(/MT)</p>
<p>修改项目属性链接器--->调试--->天生调试信息--->否</p>
<p>如许天生的exe最小,而且当反编译时,制止出现编译路径等调试信息。</p>
<p>关于dll注入的代码,强推<a href="https://github.com/fdiskyou/injectAllTheThings">https://github.com/fdiskyou/injectAllTheThings</a> ,至少我在调试的时间,情况适配性很不错。</p>
<p>2、代码 </p>
<p>右键添加现有项,将远线程注入所需的.cpp、.h文件添加进去,然后再修改一下头文件包罗的题目。</p>
<p>办理方案资源管理器窗口中,右键选择添加--->资源</p>
<p>弹出对话框</p>
<p> </p>
<p>选择导入</p>
<p> </p>
<p>这里要选择全部文件,否则.dll格式的文件无法显示,选择想要注入的dll后,出现下图所示对话框。</p>
<p></p>
<p>点击确定后,办理资源管理方案中多出了三个文件</p>
<p></p>
<p> </p>
<p>在加载资源函数前,添加头文件[#include “resource.h”],否则有一些函数会报错</p>
<p></p>
<p>然后编译一下,如果尚有语法报错,信任凭履历很快就可以大概办理掉它了。</p>
<p>终极在win7假造机中运行的效果如下图所示</p>
<p> </p>
<p>鉴戒的资源</p>
<p><a href="https://bbs.csdn.net/topics/390413480">https://bbs.csdn.net/topics/390413480</a></p>
<p><a href="https://bbs.csdn.net/topics/250007060">https://bbs.csdn.net/topics/250007060</a></p>
<p>调试代码可以参考我的git</p>
<p><a href="https://github.com/Qing-Huan/DLL-embedding-exe">https://github.com/Qing-Huan/DLL-embedding-exe</a></p>
<p>我并不是代码的创造者,只是将我遇到的坑展示出来,淘汰他人排坑的时间,欢迎大佬们辅导!</p>
页: [1]
查看完整版本: 在Visual Studio中将dll以资源的形式嵌入exe中