【问题标题】:How can an executable be this small in file size?可执行文件的文件大小怎么会这么小?
【发布时间】:2016-07-05 09:24:15
【问题描述】:

我一直在 Metasploit 上生成有效负载,并且我一直在尝试不同的模板和您可以拥有有效负载的模板之一,如 exe-small。我生成的有效负载类型是 windows/meterpreter/reverse_tcp 并且仅使用普通的exe 模板,它的文件大小约为 72 KB,但exe-small 输出的有效负载大小为 2.4kb。为什么是这样?我如何将它应用到我的编程中?

【问题讨论】:

    标签: windows portable-executable malware


    【解决方案1】:

    PE 文件最小可能只有 97 个字节 - 它什么也不做(只是返回)。

    目前最小的可运行可执行文件是 133 字节,因为 Windows 需要加载 kernel32。无法执行没有导入的 PE 文件。

    通过在导入表中指定 UNC 路径,它已经可以从 Internet 下载有效负载。

    要实现这么小的可执行文件,你必须

    • 在汇编器中实现,主要是为了摆脱 C 运行时
    • 降低文件对齐方式,默认为 1024
    • 删除打印消息“此程序无法在 DOS 模式下运行”的 DOS 存根
    • 将部分 PE 部分合并到 MZ 标头中
    • 删除数据目录

    完整的描述可在更大的研究blog post called TinyPE 中找到。

    【讨论】:

    • 我不同意。阅读我最初的回复。我有一个 20 字节的有效 .com 文件,我一直在 MS-DOS 上使用。
    • @Overmind:COM 文件不是 PE 文件,因此没有差异。该文件是否仍然在当今的 Windows(7 或更高版本)上运行? COM 文件没有标头,没有元数据等。另请注意:这个问题是在 Metasploit 的上下文中从 Security.SE 迁移的,我假设有人想要下载恶意有效负载,您可能无法在 20 字节的 COM 文件中下载.
    • 它不能在 64 位上运行,因为它是 16 位可执行文件。
    • 顺便说一句,97字节的文件是做什么的?
    • @Overmind:它什么都不做,只是返回。更新了答案
    【解决方案2】:

    对于这么小的 EXE,大多数空间通常用于图标。通常,图标包含各种尺寸和配色方案,如果您不关心“旧的、生锈的”图标或根本没有图标,您可以将其去掉。

    当您签署 EXE 时,还使用了一些 4k 的空间。

    作为小型 EXE 的示例,请参阅 grcnever10。有一个详细信息页面突出了以上几点:

    https://www.grc.com/never10/details.htm

    在最后一段中:

    最后一点:我有点恼火“Never10”和它现在一样大 85 字节。数字签名增加了应用程序的大小 4k,但微软现在的高分辨率和高彩色图标 需要占用56k!因此,无需所有烦人的开销,该应用程序 将是一个可观的25k。而且,是的,我当然写在 汇编语言。

    免责声明:我与 grc 没有任何关系。

    【讨论】:

      【解决方案3】:

      几乎不需要一个可执行文件很大,除非它包含我称之为垃圾代码的代码,这些代码实际上对程序/exe 的功能并不重要。这对其他文件也有效。将手动编写的 HTML 页面与 FrontPage 中编写的页面进行比较。那是垃圾邮件代码。

      我记得我的旧 DOS 文件大小都是 KB,几乎可以在操作系统中执行任何需要的任务。我的一个 .exe(实际上是 .com)只有 20 个字节。

      请这样想:就像在某些情况下,Windows 操作系统中包含的大部分文件都可以删除,但操作系统仍然可以正常运行,对于 .exe 文件也是如此:大部分代码要么没用,要么与目标相关的目的不同,要么是故意添加的(见下文)。

      这种偏差的高峰是现在一些使用高级复制保护的游戏的.exe文件中添加的代码,这可以使文件大到几十MB。运行游戏所需的实际代码实际上不到完整代码的 10%。

      在您的示例中,72 KB 的文件大小几乎足以对 Windows 操作系统执行任何操作。

      要将其应用到您的编程中,例如制作非常小的 .exe,请保持简单。不要仅仅为了外观而添加不必要的代码,或者认为你会在某个时候使用程序/代码的那一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        • 2022-01-13
        • 1970-01-01
        相关资源
        最近更新 更多