这个修改后的 PE 文件是什么导致 MsMpEng.exe 消耗 4 秒的 CPU?

逆向工程 聚乙烯
2021-06-12 14:31:13

这个问题的相关文件在这里:

https://cubiclesoft.com/Unrelated/32_pe_msmpeng_test.zip

包含一个之前和之后的 DLL。这个简单的 PHP 脚本演示了这个问题:

<?php
    $ts = microtime(true);
    file_put_contents("test.dll", file_get_contents("32_pe_msmpeng_before.dll"));
    echo "Time taken:  " . sprintf("%.02f", microtime(true) - $ts) . " sec\n";
    unlink("test.dll");

    $ts = microtime(true);
    file_put_contents("test.dll", file_get_contents("32_pe_msmpeng_after.dll"));
    echo "Time taken:  " . sprintf("%.02f", microtime(true) - $ts) . " sec\n";
    unlink("test.dll");
?>

输出看起来像:

>php test.php
Time taken:  0.00 sec
Time taken:  4.14 sec

两个 DLL 之间的唯一区别是证书表已被删除并且 PE 校验和已在“之后”DLL 中更新。4 秒的延迟是由 MsMpEng.exe 在此期间使用 100% 的 CPU 核心造成的。MsMpEng.exe 是主要的 Windows Defender 实时扫描引擎。这些文件没有被标记为恶意软件,但这种行为很奇怪,因为简单地删除证书表会触发深度扫描。

原始文件是使用我的Windows PE File Tools for PHP和以下命令修改的:

php pe_tools.php modify clear-certs 32_pe_msmpeng_before.dll 32_pe_msmpeng_after.dll

php pe_tools.php modify apply-checksum 32_pe_msmpeng_after.dll 32_pe_msmpeng_after.dll

我已经以我能想到的所有可能的方式检查了“之后”文件,它似乎对我使用的所有工具都完全有效。我还修改了许多其他 PE 文件,而没有触发实时扫描程序。仅此文件会导致 CPU 使用率的时间延迟和峰值,并且仅在删除证书表后才会发生。我可以对文件进行各种其他疯狂的更改,这些更改应该会立即导致无效的证书表(例如,添加新的 PE 部分、嵌入图标等)并且它也不会绊倒实时扫描程序。但是完全删除证书表,然后在 MsMpEng.exe 中出现 4 秒延迟 + 100% CPU。这种行为似乎意味着仅拥有一个证书表可能会绕过部分甚至全部的 Windows Defender。

但这不是真正的问题。我想知道的是,导致 MsMpEng.exe 进行需要 4 秒以上才能完成的深度扫描的“之后”DLL 中究竟是什么?

0个回答
没有发现任何回复~