在Portable-Executable中,我们可以通过编辑PE文件来更改导入的dll名称, 在这里,我已经更改了一个导入的应用程序exe的dll名称,那个时候它正常更改....例如advapi32.dll到^ dvapi32.dll,所以这里system32或任何其他PATH位置没有^ dvapi32.dll ..这个时间只是我将真正的advapi32.dll更改为^ dvapi32.dll并放入应用程序目录,这次它的工作正常....但是当我尝试使用ntdll& gdi32.dll,它不支持,我无法解决问题,请帮我解决问题..谢谢。
答案 0 :(得分:1)
当Windows启动时,像GDI32.DLL这样的系统Dll会加载到内存中,因为它们提供了必要的Windows操作系统功能(在本例中为图形功能)。一些DLL使用固定的ImageBase构建(怀疑这适用于最重要的系统DLL,例如KERNEL32,GDI32.DLL,USER32.DLL),复制和重命名这种类型的DLL并引用它们将无法工作,而不是修改它们的ImageBase PE头。
这是因为它们会尝试将自己加载到ImageBase指定的内存中并失败,因为特定的内存位置已经被内存中的原始DLL占用,并且它们的固定ImageBase阻止它们在备用内存位置加载。没有固定ImageBase的DLL将被Windows重新定位,以使用另一个内存位置并运行没有问题。
如果DLL副本的ImageBase更改为其他值,则具有固定ImageBase的DLL将正常工作,前提是ImageBase指向的内存位置未被占用。
虽然我已经在记事本的副本上成功测试了这种方法,然后在Windows XP上更改了DLL拷贝的导入的DLL名称和ImageBases,但是我强烈地发现这会导致进口和篡改Windows系统DLL以这种方式。