请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#问题入口 ASP.NET问题入口

【C#问题提交】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接毕业设计】 面试-葵花宝典下载

官方一群:

官方二群:

查看: 1483|回复: 14

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

  [复制链接]
  • TA的每日心情
    开心
    前天 10:30
  • 签到天数: 1723 天

    [LV.Master]伴坛终老

    4251

    主题

    6182

    帖子

    11万

    积分

    管理员

    IBC编程社区-原道楠

    Rank: 9Rank: 9Rank: 9

    积分
    117416

    推广达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2019-12-26 09:06:18 | 显示全部楼层 |阅读模式

    马上加入IBC,查看更多教程

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

    一、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文件添加进去,然后再修改一下头文件包罗的题目。

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

    弹出对话框

    090935payn62l1cynncnnz.png

    选择导入

    090935cgb3bqpuxgu4ppuw.png

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

    090936ati1xq09d9npt030.png

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

    090937wdj1t76ss1ztbka1.png

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

    090937vx0z896889v8s9xx.png

    然后编译一下,如果尚有语法报错,信任凭履历很快就可以大概办理掉它了。

    终极在win7假造机中运行的效果如下图所示

    090938dfjri1jr1g8mfygg.png
    090940edrz2z997rffv2dz.png

    鉴戒的资源

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

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

    调试代码可以参考我的git

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

    我并不是代码的创造者,只是将我遇到的坑展示出来,淘汰他人排坑的时间,欢迎大佬们辅导!

    C#论坛 www.ibcibc.com IBC编程社区
    C#
    C#论坛
    IBC编程社区

    该用户从未签到

    0

    主题

    26

    帖子

    96

    积分

    注册会员

    Rank: 2

    积分
    96
    发表于 2020-9-29 09:49:58 | 显示全部楼层

    一、Dll的长处:

    1、扩展应用步伐的特性

    2、简化项目管理

    3、有助于节流内存

    4、促进资源的共享

    5、促进当地化

    6、有助于办理平台间的差异

    7、可用于特别目的
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则