吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6151|回复: 94
收起左侧

[原创] 如何将dll转成exe并能够双击运行?——pe结构原理

    [复制链接]
LingMo 发表于 2024-1-21 07:18
本帖最后由 LingMo 于 2024-1-21 23:16 编辑

1.png

说明

dll文件和exe文件看似只是后缀名不同,但其两者均遵循微软的可执行文件格式——PE结构(Portable Executable)。
Windows的PE装载器在识别所打开的一个可执行文件的时候,就是按照PE结构去解析相关的代码和数据信息。

为什么系统要提出dll文件这种概念呢?如果你作为程序员打算要编写一款小型程序,因为该程序的功能并不复杂,所以不需要编写过多复杂的代码。正因此,你只需要编译出一个体积差不多小的exe文件就能宣布项目开发完成了。

但如果是中大型项目呢?一个大小型项目往往能牵扯到许多的业务功能实现,将所有的业务功能实现的代码都全部写进同一个exe来的话,exe的体积将会空前巨大,而且要是该项目在某一些业务功能上有了更新,要让用户用上新发布的版本就只能让用户重新下载exe,影响极其不便。

而有了dll之后,事情就好办多了。把负责用户注册登录的代码写进一个dll里,把负责播放音乐、播放视频的代码写进另一个dll里,最后再让exe自己链接到相应的dll,就不仅避免单个文件膨大的问题,还能使更新更加地方便。

实现步骤

咳咳,现在我们来说说根据pe结构的原理怎么实现把dll转成exe来,步骤超级超级简单。

首先我们随便写个代码来,静态编译出一个dll

#include <Windows.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {

    MessageBoxW(NULL, L"阿姨你好", L"(-.-)", MB_OK);

    return TRUE;
} 

2.png
3.png
接着我们随便使用一个PE编辑器来,用StudyPE+、CFF Explorer或LordPE等等都可以,这里我使用CFF Explorer。

打开CFF Explorer,我们将刚刚编译好的dll文件拖到里边去
4.png
找到nt头下的文件头,也就是Nt Headers下的File Header,找到右边的Characteristics,单击“Click here”
5.png
6.png
我们把"File is a DLL"这个选项取消掉,再OK,然后覆盖保存即可。

(PE装载器就是通过判断这个属性位来确定文件是exe还是dll)

接着我们回到刚刚编译出来的目录那里,把dll文件的后缀改成.exe,接着双击运行就可以啦
7.png
8.png


我们还可以在Dll里边创建窗口并显示出来,此时我们应该要清楚,在清除了文件头属性"File is a DLL"的位的时候,文件已经不再是dll了

#include <Windows.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {

        HWND hWnd = CreateWindowA("Button", "window", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hinstDLL, NULL);
        //显示窗口
        ShowWindow(hWnd, SW_SHOW);
        UpdateWindow(hWnd);
        //消息循环
        MSG nMsg = { 0 };
        while (GetMessage(&nMsg, NULL, 0, 0)) {
                TranslateMessage(&nMsg);
                DispatchMessage(&nMsg);//将消息交给窗口处理函数来处理。
        }

    return TRUE;
} 

编译出来后重复上述步骤,双击运行
9.png
一句话总结:dll本身就是为了模块化应用程序而诞生的,dll跟exe的区别就是dll不能直接执行main入口,只能让其他exe或dll模块在加载和卸载的时候自动调用dllmain,其他的编译方式跟exe并没有区别。

补充说明:

dll还有一种形式就是纯资源型的dll,这种dll因为不需要链接入口点所以并不支持我上面所说的方法
屏幕截图 2024-01-21 220623.png
在vs的链接器->高级里就能看到“无入口点”这个选项。
勾上此选项之后再静态编译,把编译出来的文件拖入到pe工具里查看
屏幕截图 2024-01-21 220831.png
屏幕截图 2024-01-21 221104.png
可以看程序入口的rva值是0,即没有入口点

提醒

最后再说明下,这帖只是说明dll和exe在pe结构属性上的区别而已,要用实验证明能转exe还是得自己编译一个出来dll再操作才好,你要是随便去某一个目录里找个dll来做实验是没意义的,本来那个dll就是服务于主业务exe,多数情况下肯定是没窗口的


免费评分

参与人数 32威望 +1 吾爱币 +56 热心值 +27 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
Kayven + 1 + 1 用心讨论,共获提升!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xiaoweng + 1 + 1 我很赞同!
kewu200 + 1 我很赞同!
fsjz + 1 + 1 我很赞同!
杨辣子 + 1 + 1 谢谢@Thanks!
xyz667 + 1 + 1 谢谢@Thanks!
cscscscs + 1 我很赞同!
pdone + 1 + 1 我很赞同!
wangccyy + 1 谢谢@Thanks!
fofbbc + 1 + 1 你很喜欢阿姨啊
FANT456 + 1 + 1 谢谢@Thanks!
karthusss + 1 + 1 谢谢@Thanks!
猫吃 + 1 懂了
qsj521521 + 1 + 1 热心回复!
tianshenyonghen + 1 + 1 我很赞同!
pp875598763 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
4nfu + 1 热心回复!
suimengzero + 1 + 1 热心回复!
2022313 + 1 用心讨论,共获提升!
pallove + 1 + 1 用心讨论,共获提升!
IsToken + 1 + 1 涨知识了
abilittty + 1 + 1 热心回复!
wszjf + 4 + 1 请教.exe可以改成.dll吗?
smile1110 + 3 + 1 谢谢@Thanks!
haoge101 + 1 + 1 用心讨论,共获提升!
hunfeifei + 1 + 1 用心讨论,共获提升!
Lishi8 + 1 + 1 用心讨论,共获提升!
小菜鸟一枚 + 1 + 1 用心讨论,共获提升!
阿阿阿阿勇 + 1 + 1 我很赞同!
zpy2 + 2 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wszjf 发表于 2024-1-21 13:04
请教: .exe可以改成.dll吗?
sky27076 发表于 2024-1-21 10:00
l15131770577 发表于 2024-1-21 09:19
我是小白。买了个游戏端  我问了好几个大佬都说缺少源码和dll,他们说dll被删了   我就不是很理解了  这个 ...

这个一般缺少的微软提供的dll,你可以网站上搜索一下缺少的dll的文件名,下载一个符合系统的dll,然后放在游戏根目前,或者放在系统windows目录下的system32或者是system64文件夹下就可以了。注意,32位系统的dll文件放在ststem64文件夹下,64位的dll文件放在system32文件夹下。
vscos 发表于 2024-1-21 07:29
遇上没有窗口的DLL,你还能这样改吗!不是所有的DLL的函数都有窗口的。
zhanglei1371 发表于 2024-1-21 07:42
100个dll,能这样搞的不到5个。
zpy2 发表于 2024-1-21 08:25
不错,赞&#128077;
chishingchan 发表于 2024-1-21 08:41
我的体会是 dll 是函数集合,每个函数包含一个功能。
wapj_lzx 发表于 2024-1-21 08:53
学习了!感谢分享!!
chizha 发表于 2024-1-21 08:54
改了几个都是一闪,啥都没看到
吾爱石皮姐 发表于 2024-1-21 08:59
谢谢楼主分享!
1045837055lucy 发表于 2024-1-21 09:13
学习了,又涨知识,感谢楼主分享
怜渠客 发表于 2024-1-21 09:16
工具确实好用,我还以为是要分析一下原理呢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 06:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表