关于aDLLaDLL是一个强大的代码分析工具,可以帮助研究人员以自动化的方式识别和发现DLL劫持漏洞。该工具可以分析加载到内存中的源代码图像,在加载过程中搜索DLL,并使用MicrosoftDetours代码库拦截对LoadLibrary/LoadLibraryEx函数的调用,然后在代码运行时分析加载的DLL文件。该工具的主要目标是帮助研究人员搜索可执行程序使用的DLL列表并识别潜在的DLL劫持漏洞。DLL劫持攻击DLL劫持是指病毒通过某种手段劫持或替换正常的DLL,诱骗正常程序加载预先准备好的恶意DLL。首先,我们需要了解Windows为什么可以劫持DLL?主要是因为Windows的资源共享机制。为了尽可能安排资源共享,微软建议任何被多个应用程序共享的模块都应该放在Windows系统目录下,比如kernel32.dll,这样可以方便的找到。但随着时间的推移,安装程序会将系统目录下的文件替换为不向后兼容的旧文件或新文件,这会导致其他一些应用程序无法正常执行。因此,微软改变了策略,推荐使用该程序将所有文件放在自己的目录下,而不触及系统目录中的任何内容。为了提供这样的功能,从Window2000开始,微软增加了一个特性,强制操作系统加载器先从应用程序目录加载模块,只有当加载器在应用程序目录下找不到文件时才搜索其他目录。利用系统的这个特性,可以强制应用程序加载我们指定的DLL来做一些特殊的工作。快速入门首先,我们需要使用如下命令将项目源码克隆到本地:gitclonehttps://github.com/ideaslocas/aDLL.git接下来,我们可以在项目的Binaries文件夹中找到编译好的aDLL。文件被执行。我们建议用户使用版本架构(32位或64位)对应的版本来分析目标可执行文件。为了保证工具能够正常运行,我们必须将“hook32”、“hook64”、“informer*32”、“informer64”和“aDLL.exe”放在同一个目录下。该工具要求aDLL在Windows10操作系统平台上开发和测试。如果您使用的操作系统版本比较老,或者您没有安装VisualStudio,该工具可能会在运行时抛出“找不到VCRUNTIME140.dll”,我们需要安装VisualC++Redistributableupdate.[下载地址]项目编译如果需要修改或重新编译项目代码,建议使用VisualStudio2015或更高版本,该工具使用该工具提供了一个-h选项,可以帮助我们获取所有可用的参数aDLL的选项:.\aDLL-h使用aDLL,我们至少需要提供一个运行参数,即要分析的可执行程序的路径:.\aDLL-e"C:\System32\notepad.exe”工具选项-h:显示该工具的帮助信息,并简要说明各选项的作用。-e:指定一个DLL要分析的可执行文件的路径。-t:指定一个文本的路径filecontainingalistofexecutablepaths.-o:指定扫描文件的存放目录路径端口,每个扫描的可执行文件将在其中存储报告。-m:搜索可执行文件的清单列表并将其显示在屏幕上。aDLL将搜索嵌入在二进制文件中的清单列表,如果清单列表作为外部文件存在,aDLL将无法找到清单列表。-w:定义可执行进程在运行时搜索加载的DLL时保持打开状态的秒数。默认时间为20秒。-aDLL:如果找到要测试的DLL,会自动检测该DLL是否会伪装成合法的DLL(恶意DLL伪装)来执行。-d:结合-a选项,这个选项可以让我们选择恶意DLL的路径。-r:可执行文件导入的每个DLL都可以导入其他DLL作为依赖项。递归搜索将对所有未重定向(ApiseSchema或WinSxS)且不属于系统已知DLL列表的DLL执行“n”次。项目地址aDLL:【GitHub传送门】
