MSVCXXX.dll 是否意味着 PE 文件是由 Microsoft Visual C 编译的?

逆向工程 拆卸 C++ C 聚乙烯
2021-06-21 09:04:26

在查看一些用visual C设计的程序的PE头文件和导入的函数时,我发现它们都包含以下函数之一:

  • MSVCRT.DLL
  • MSVCR80.DLL
  • MSVCR90.DLL
  • MSVCR100D.DLL
  • MSVCRT20.DLL
  • MSVCRT40.DLL
  • 以及其他以 MSVC 前缀开头的 DLL。

这是否意味着任何导入这些函数的程序(甚至恶意软件)都必须由 MSVC 编译?

2个回答

虽然可以使用 MSVC 以外的编译器编译某些内容并“手动”从 MSVC DLL 导入,但这种情况极不可能且不常见。

很有可能,是的,如果您看到从 MSVC DLL 导入的内容,很可能是用 MSVC 编译的。

请记住,使用 MSVC 编译的可执行文件可能不会从 MSVC DLL 导入函数。

“极不可能和不常见”听起来就像恶意软件会尝试/争取的东西。

在恶意软件打包程序中,使用普通的 WinAPI 函数作为对逆向程序的干扰或对模拟器的浪费时间的机制很常见 .
没有理由不使用 msvcrt.dll 函数(但是,不能指望安装 Visual Studio X 的可再发行包,因此 msvcrt90.dll 和类似的存在是反对它是恶意软件的标志),因此 msvcrt* 的存在是根本不可靠。

入口点签名、Rich 签名或调试目录将是更好的选择。

很快:那些带有 D 的是调试版本。