假设我有一个应用程序app.exe,它执行d.dll的加载时链接,而d.dll又加载了对dangerous.dll的加载时链接。假设dangerous.dll被认为有各种安全漏洞。假设app.exe不需要dangerous.dll中的任何功能,app.exe也不会调用d.dll,要求它使用dangerous.dll中的任何函数。
我想发布没有dangerous.dll的应用程序,理想情况下对app.exe或d.dll的修改很少或没有。如果我只删除dangerous.dll,启动app.exe时出现加载错误,因为它加载d.ll而d.dll尝试加载dangerous.dll,但失败了。
选项1
我可以做一个" no-op" dangerous.dll的版本,它提供了所有与dangerous.dll相同的导出函数签名,但是对于所有导出的函数本身都没有操作代码。那可能不会太糟糕。我想知道是否已经存在一个工具可以获取.dll文件并输出另一个具有相同导出功能的.dll文件,但是什么都不做?这样做的缺点是我的无操作版本的dangerous.dll仍然可以被用户看到,看起来我的应用程序仍然存在dangerous.dll中的漏洞。
选项2
我想知道是否有某种方法,如果没有从源代码构建d.dll,我可以破解d.dll,这样它就不会尝试加载时遇到dangerous.dll。如果这导致从d.dll到dangerous.dll函数的任何调用失败/崩溃都没关系,因为我说app.exe不应该导致d.ll使用dangerous.dll中的任何函数。
答案 0 :(得分:1)
如果你有d.dll的源代码,那么只需将其修复为不加载/使用dangerous.dll。
如果您没有源代码,只需为所有导出的函数构建一个带有存根实现的dangerous.dll。
案件结案。继续前进,把时间花在更有成效的事情上。