我有一个严重混淆的原生win32 dll,功能未知,似乎没有调用其他dll的任何函数。我的问题是理论上这个代码能够修改其代码以造成任何伤害。子问题: - 是默认情况下动态加载的dll读取的代码部分还是可写的? - 如果代码不使用任何其他DLL,它仍然能够 做一些需要系统DLL代码的东西? 如果默认情况下没有加载加载dll的函数,它如何加载另一个dll并找到一个函数?
提前致谢。
答案 0 :(得分:7)
此代码是否能够修改其代码以造成任何伤害。
是。事实上,即使不需要自我修改也可能造成伤害。
动态加载的dll的代码部分是默认只读还是可写?
默认情况下,DLL可以自行修改。他们需要拨打VirtualProtect
才能这样做,但这完全有可能。
如果某个代码没有使用任何其他dll,它仍然可以执行一些需要系统dll中某些代码的操作吗?
DLL可以加载任何系统DLL并调用它选择的任何函数。
如果默认情况下没有加载加载dll的函数,它如何加载另一个dll并找到一个函数?
致电LoadLibrary
和GetProcAddress
。如果DLL真的根本没有输入任何内容,那么抓住GetProcAddress
是很棘手的。但并非不可能。如果Windows设法做到这一点,那么肯定也可以使用DLL。它可以做的一件事是读取加载到每个进程中的kernel32 DLL的内存中内容。它可以解析PE导出表并使用它来查找GetProcAddress
的地址。