2

我有一个功能未知的严重混淆的本机 win32 dll,它似乎没有从其他 dll 调用任何函数。我的问题是,理论上该代码是否能够修改其代码以造成任何伤害。子问题: - 动态加载的 dll 的代码部分是默认只读还是可写?- 如果代码不使用任何其他 dll,它仍然能够执行需要系统 dll 中的一些代码的操作吗?如果默认没有加载加载dll的函数,它如何加载另一个dll并找到一个函数?

提前致谢。

4

1 回答 1

7

此代码是否能够修改其代码以造成任何伤害。

是的。事实上,它甚至可能在不需要修改自身的情况下造成伤害。

动态加载的 dll 的代码部分是默认只读还是可写?

默认情况下,DLL 能够自行修改。他们需要打电话VirtualProtect才能这样做,但这是完全可能的。

如果代码不使用任何其他 dll,它仍然能够执行需要系统 dll 中的某些代码的操作吗?

DLL 可以加载任何系统 DLL 并调用它选择的任何函数。

如果默认没有加载加载dll的函数,它如何加载另一个dll并找到一个函数?

通过调用LoadLibraryGetProcAddress。如果 DLL 真的什么都不导入,那么获取GetProcAddress. 但并非不可能。如果 Windows 能够做到这一点,那么 DLL 肯定也能做到。它可以做的一件事是读取加载到每个进程中的 kernel32 DLL 的内存内容。它可以解析 PE 导出表并使用它来查找GetProcAddress.

于 2013-02-18T20:20:01.477 回答