长假即将结束,又要投入到工作中了。虽然七天假上了四天的班,但还是很爽的。
近日,溜达时发现了一款DLL劫持检测的源码,仔细地看了下,还是很有创意的,源码在下面附上。当时咋一看时,有点懵,DLL劫持的很多东西都想不起来了,虽然以前也研究过。正好有点时间,就找到了当年“论剑”大会上讲课的PPT,时间显示是十年前的东西了,满满的记忆。印象中当年研究还是蛮深的,截几张:
一、源码下载
https://github.com/cyberark/dllspy
二、编译好的下载
链接:https://pan.baidu.com/s/1PATSJQKo26MvmOLcB7x0uw
提取码:jl05
三、用法
DllSpy.exe -d -s -o result.csv -r 2
参数解释如下:
-d 动态,在所有正在运行的进程和服务中发现DLL劫持。
-s 静态,在当前运行的进程和服务的二进制文件中搜索DLL引用。
-o 输出的文件名。
-r 2 递归,搜索DLL引用在发现的DLL文件privous扫描。2是两层,可以是<5的层数。
四、实现原理
动态——首先,通过迭代进程加载的模块列表来扫描加载的模块。然后检查这些模块中是否有可能被劫持,方法是尝试写入它们在磁盘上的文件位置,并检查它们是否可以被覆盖。这是在复制explorer.exe的访问令牌之后完成的,这是一个弱令牌。我们这样做是为了测试我们作为普通用户是否具有对DLL位置和DLL本身的写权限。
静态——在运行进程的二进制文件中查找所有包含DLL名称或DLL路径的字符串。
递归——静态地扫描前面检查过的进程的所有dll。目标是找到由这些dll加载的更多dll,并查看它们是否容易被劫持。