该工具用于查找已加载某个特定二进制文件的进程,或未加载该二进制文件的进程。这在以下场景中非常有用:
你也许能发现该工具的其他有价值的用法。以上结果的获取无需遍历系统中的所有进程,且噪音更低。
该工具通过使用 FileProcessIdsUsingFileInformation 标志调用 NtQueryInformationFile 来获取所有加载了特定二进制文件的进程。然后,仅在需要时才调用 EnumProcesses 获取所有进程的 PID,最后将两者的结果进行比较,以得出最终的 PID 列表。如果工具未以安静模式运行,最终的 PID 会被转换为进程主模块的完整路径。
如果你想减少跨进程活动,请使用安静模式(--quiet 或 -q)。在此模式下不会打开任何进程句柄,但工具只能获取 PID,而无法获取完整路径。
该工具完全兼容 Win10 及更高版本,以及 Windows Server 2016 及更高版本。对于更旧的操作系统版本,调用 OpenProcess(src::main.rs:108 行)时需要 PROCESS_QUERY_INFORMATION 和 PROCESS_VM_READ,而不仅仅是 PROCESS_QUERY_LIMITED_INFORMATION(或者你也可以直接使用安静模式,该模式不会打开任何进程句柄)。
由于我们使用 LITCRYPT 插件来混淆字符串字面量,因此在编译代码之前,需要设置环境变量 LITCRYPT_ENCRYPT_KEY:
C:\Users\User\Desktop\bin_finder\bin_finder> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
之后,直接编译代码并运行该工具即可:
C:\Users\User\Desktop\Bin-Finder> cargo build --release
C:\Users\User\Desktop\Bin-Finder\target\release> bin_finder.exe -h
Bin-finder 有两种不同的使用模式。默认模式会查找所有未加载指定二进制文件的进程。例如,我们可以搜索所有未加载 CrowdStrike DLL 的进程:

当你需要查找 EDR 例外列表中的目录/进程时,这非常有用。
如果你想减少跨进程活动,可以使用安静模式来仅获取 PID:

此外,如果你不知道要查找的 DLL 的名称或路径,可以尝试使用 -l 或 --list 标志列出常规进程中已加载的模块(这也有助于判断系统中是否存在 EDR):

第二种使用模式是反向查找(-r 或 --reverse 标志),它会查找所有当前已加载指定二进制文件的进程。例如,你可能想获取正在运行 StorSvc 服务的进程的 PID。在这种情况下,只需对实现该服务所用 RPC 服务器的 DLL 进行反向查找即可:

这种反向查找还可以用于直接获取进程的 PID:只需指定其主模块的完整路径(通常是 .exe 文件),而无需遍历系统中的所有进程。下面就是获取所有正在运行的 chrome.exe 的 PID 的方法:
