针对 ntdll 中地址的跳转指令是否是恶意软件的标志?

逆向工程 拆卸 视窗 恶意软件
2021-07-04 20:05:38

为了好玩,我从“驱动程序下载”网站下载了一个安装程序。我不打算安装它,但我有兴趣检查它只是为了看看它的样子。我把它扔进 Ollydbg(没有推进指针),只是浏览了程序集。

有多种不同的调用/跳转/远跳转到各种ntdll.addr.

我知道这ntdll是一个非常低级的库,但我在 windows x86 反汇编方面没有足够的经验来知道什么是“正常”。从表面上看,这也是一个驱动程序安装程序,因此调用ntdll. 这样的跳跃是否被视为正常行为?通常我习惯于看到明确命名函数的调用......而不是ntdll.

额外的细节/背景

该文件没有打包,但有几个地方在[A-Za-z]十六进制视图中出现了完整的可打印 ASCII ,我记得这可能是 base64 编码/解码在某处进行的迹象。也许移位密码。

作为参考,我正在查看的精确二进制文件是here视窗 7 64 位。(安装程序本身似乎是 32 位的...... Ollydbg 加载得很好,而且 IDA 也是免费的。)

PEBrowse64 还向我展示了Resources->STRING->4085.

在本节中,似乎为Pageup/ Down/ Backspace/ Esc/Enter预留了字符串,我知道这可能是键盘记录器的迹象……但同样,我是新手,所以我不确定。

1个回答

有可能发生这种情况的合法情况,称为“导入转发”。也就是说,一个 DLL(例如 kernel32.dll)可能会导出一个符号,其实现保存在另一个 DLL(例如 ntdll.dll)中。一个典型的例子是堆分配函数:HeapAlloc 和 HeapFree。如果您检查 kernel32.dll,您将看到它们被重定向到 ntdll.RtlAllocateHeap 和 ntdll.RtlFreeHeap。这样做的原因是行为可能不是特别有趣(这与保持兼容性有关)。

这并不是说直接调用 ntdll.dll 的所有此类情况都是合法的,但它可能解释了您所看到的情况。