开发者生态
morning
HelloAssembly 最小的完整 Windows 应用程序
2026-08-25
1 阅读
约7分钟阅读
Bluestein
字号:
尽可能最小的完整 Windows 应用程序。来自 Dave's Garage 上的剧集“Hello,Assembly!在 x86 ASM 中逆向编码世界上最小的 Windows 应用程序”: 以及后续剧集“C vs ASM:制作世界上最小的 Windows 应用程序”: 存储库中的代码: 原始代码的优化版本位于“TinyOriginal”文件夹中 应用 shell 编码策略的版本位于“Lasse”文件夹中 使用手动编写的 PE 标头的版本位于“Theron”文件夹中 QRCode 是死代码,是嵌入到 QRCode 中的 exe,仅供后代使用 该项目的目标是制作尽可能最小的应用程序,无需压缩,具有以下功能: 运行 Windows 消息循环 具有标题栏、最小化、最大化和关闭按钮,所有这些按钮都按预期工作 具有相同的系统菜单 绘制背景和一些居中居中的文本,等于或大于“Dave's Tiny App” 请保持其可读性,并在注释中解释您在做什么!而且越小越好! Lasse 目录中当前代码中嵌入的优化以及 Crinkler 一般应用的优化(如果使用)相当激进,并且似乎类似于某些类型的恶意软件所应用的策略。因此,您的病毒扫描程序可能会将您从源代码构建的可执行文件标记为“可疑恶意软件”。这可能会使它们无法启动,或者您的病毒扫描程序甚至可以将它们隔离。根据您使用的防病毒解决方案,您也许能够将可执行文件列入白名单/排除以恢复它们并使其正常工作(已知 F-Secure SAFE 会发生这种情况)。您也可能必须暂时完全禁用病毒扫描程序(Microsoft Defender 已观察到这种情况)。请注意:您完全有责任决定是否要禁用病毒扫描程序。如果您暂时禁用病毒扫描程序,我们强烈建议您在测试从此存储库代码构建的可执行文件后立即重新启用它。尽管我们确实承诺此存储库不包含任何恶意代码,但我们不能保证您从其他来源获得的任何代码或可执行文件(例如此存储库应用程序的假定版本)都是如此。如果您的病毒扫描程序在您尝试运行从此存储库的源代码中生成的可执行文件时进行干预,并且您对(部分)禁用病毒扫描程序感到不舒服,那么就不要这样做。我们确实理解,我们真的不会反对你。 :) Lasse 目录中的代码可以使用普通的 MASM32 11.0 构建,可以从许多来源获得。使用它的构建指令为: ml /coff LittleWindows.asm /link /merge:.rdata=.text /merge:.data=.text /align:4 /subsystem:windows LittleWindows.obj 可执行文件将被命名为 LittleWindows.exe。 Crinkler 是 Windows 的压缩链接器,专门针对大小仅为几千字节的可执行文件。该工具的副本包含在该存储库的 Crinkler 目录中。也可以从其 GitHub 存储库获取它。 Crinkler 需要安装 Windows SDK。 Windows 10 SDK 版本 10.0.20348.0 取得了最佳(即最小)结果。它和其他版本可以从 Microsoft 网站上的 Windows SDK 存档页面下载。安装后,可以使用它构建的应用程序的构建指令为: Lasse 目录中的代码:ml /c /coff LittleWindows.asm crinkler.exe /NODEFAULTLIB /ENTRY:start /SUBSYSTEM:WINDOWS /TINYHEADER /NOINITIALIZERS /UNSAFEIMPORT /ORDERTRIES:1000 /TINYIMPORT /LIBPATH: " C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\um\x86 " kernel32.lib LittleWindows.obj 可执行文件将命名为 out.exe。 TinyOriginal 目录中的代码: ml /c /coff /IC: \m asm32 \i ninclude Tiny.asm crinkler.exe /ENTRY:MainEntry /SUBSYSTEM:WINDOWS /TINYHEADER /NOINITIALIZERS /UNSAFEIMPORT /ORDERTRIES:2000 /TINYIMPORT /LIBPATH: " C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\um\x86 " kernel32.lib user32.lib gdi32.lib Tiny.obj /OUT:tiny.exe 可执行文件将被命名为tiny.exe。 Theron 目录中的代码必须使用 Yasm 构建,Yasm 是在“新”BSD 许可证下重写的 NASM 汇编器。可以从Yasm项目下载页面获取;选择“一般用途”版本。假设汇编器被重命名为 yasm.exe 。使用它的构建指令为: yasm -fbin -o HelloWindows.exe HelloWindows.asm 可执行文件将被命名为 HelloWindows.exe。截至 2023 年 3 月 11 日,当前已知的最小可执行文件大小如下: 程序链接器大小(以字节为单位) Lasse\LittleWindows.asm MASM32 1104 Lasse\LittleWindows.asm Crinkler 818 Theron\HelloWindows.asm Yasm 383 TinyOriginal\Tiny.asm Crinkler 540
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱