我有一个功能未知的严重混淆的本机 win32 dll,它似乎没有从其他 dll 调用任何函数。我的问题是,理论上该代码是否能够修改其代码以造成任何伤害。子问题: - 动态加载的 dll 的代码部分是默认只读还是可写?- 如果代码不使用任何其他 dll,它仍然能够执行需要系统 dll 中的一些代码的操作吗?如果默认没有加载加载dll的函数,它如何加载另一个dll并找到一个函数?
提前致谢。
此代码是否能够修改其代码以造成任何伤害。
是的。事实上,它甚至可能在不需要修改自身的情况下造成伤害。
动态加载的 dll 的代码部分是默认只读还是可写?
默认情况下,DLL 能够自行修改。他们需要打电话VirtualProtect才能这样做,但这是完全可能的。
如果代码不使用任何其他 dll,它仍然能够执行需要系统 dll 中的某些代码的操作吗?
DLL 可以加载任何系统 DLL 并调用它选择的任何函数。
如果默认没有加载加载dll的函数,它如何加载另一个dll并找到一个函数?
通过调用LoadLibrary和GetProcAddress。如果 DLL 真的什么都不导入,那么获取GetProcAddress. 但并非不可能。如果 Windows 能够做到这一点,那么 DLL 肯定也能做到。它可以做的一件事是读取加载到每个进程中的 kernel32 DLL 的内存内容。它可以解析 PE 导出表并使用它来查找GetProcAddress.