白文件扫描器 非公开
windows pe 白文件利用扫描器 版本 2.4 (2021 08 17)
版本V2.1之后更新频率将不会频繁,因为已经累计扫描到过百白文件,短时间内不会再扫描测试来解决遇到的问题。
支持x86 x64程序、支持cui gui程序、支持定义扫描文件的最大大小、支持定义等待进程时间、支持选择只扫描带签名的PE程序、支持选择可与system目录dll同名。
help : This tool scans files that could be used for hijacking.
选项 | 说明 | 参数 | 默认 |
---|---|---|---|
-p | scan path user in or all | "user input D:\" or "all" | —— |
-w | scan software x86 or x64 | “w32”、"w64" or "w32w64" | w32/64 |
-ui | scan software cui or gui | "cui"、"gui" or "cuigui" | cuigui |
-st | only scan signature | “on” or ”off“ | on |
-sd | scan system dir dll | "on" or "off" | on |
-ms | set scan file max size | ms < 100 ( Mb ) | 10 |
-wt | set wait for proc time | 4999 < wt < 1000001 ( ms ) | 5000 |
-s | only scan no check file | —— | —— |
For example : HijackScan.exe -p c:\test
1 扫描时会将符合条件的程序添加到列表最后统一检测是否可能利用
2 检测阶段部分程序会报错弹窗卡住进程,需要手动处理弹窗
3 测试成功的程序会输出到当前success目录下,目录下的程序大部分情况是可以利用的,但并不是100%,需要最后人工审核
4 程序执行时,创建的进程或其他进程弹窗UAC时,会造成无法关闭错误弹窗 因为他们不是一个会话或桌面 hscan 不能捕捉或没有权限 来关闭窗口
5 程序执行时,其他进程弹窗UAC时,会造成无法关闭错误弹窗 因为他们不是一个会话或桌面 hscan 不能捕捉或没有权限来关闭窗口
6 尽管已经做出了尽可能的窗口判断、进程判断,避免影响程序执行对计算机产生的影响,但是可能仍然会有无法预计的情况,因此建议再计算机使用-s先收集,再将temp目录中收集到的文件放在纯净的虚拟机中进行非-s操作 , 这样做不仅主机不会受到影响,而且能从虚拟机的环境中验证不需要太多依赖的程序。
7 程序在注入劫持阶段会遍历所有#32770类名、标题名除空和系统等窗口进行关闭,当有程序符合条件窗口可能会被关闭。
8 由于注入平台不同的原因, X64的HScan只能测试x64程序,X86的HScan只能测试x86程序 (暂时的,未来可能会支持非相同平台注入)
8 X64的HScan只能测试x64程序,X86的HScan可以测试x86、x64程序(X86交叉注入目前仅在x64 windows 10上测试过,其他系统没有测试,稳定性未知)
支持X86和X64交叉注入,x86和x64都可以扫描x64和x86的白文件
注入路径改为绝对路径
其他小的修改
支持x86交叉注入 现在x86的HScan可以将X64的hook.dll注入到X64的程序当中了,这意味着x86可以扫描x64和x86的白文件
创建进程时将目标路径环境为参数传给CreateProess,修复判断程序自行组合的路径不再测试范围内。
同步X86
阻止ShellExecuteExW程序测试
阻止createprocess创建子进程
新增路径参数-p all支持扫描所有盘符文件
更准确的判断,为程序LoadLibrary的每一个符合条件DLL都创建单独的文件夹进行测试,不会像以前一样所有的dll放在一起进行测试,这样结果会更加准确,但是扫描时间会相对变得更久
默认只扫描带数字签名的文件
默认-w参数跟随 hsacn 的平台,X86默认w32、 X64默认w64
hijackdll第一次劫持永久等待改为等待12s 确保进程会被结束
窗口名为空或属性将不再发送关闭消息
windows、回收站目录不再扫描 因为文件过多扫描时间过长且无收获
判断类名为#32770的可见窗口都将关闭,因为子进程的窗口名称无法获取到
劫持创建的hijacklog文件更改为绝对路径 避免白程序更改目录环境导致判断hijacklog文件失败
打印输出添加锁修复颜色不正确问题、修复结束进程成功 打印结束失败的问题
拦截注入进程(Abort/Initiate)SystemShutdown(A/W/ExA/ExW)的调用,避免计算机重启或关闭
尝试阻止注入程序调用SetSystemPowerState暂停或休眠
在创建劫持文件前,劫持进程在第一次freelibrary常见的系统DLL时进行WaitForSingleObject,增加劫持成功概率,尽可能获取更多的可利用程序
更详细的打印输出
"应用程序错误"弹窗不再需要手动关闭
修复判断MD5时 文件读取失败 打印信息造成崩溃的问题
全局同时判断消息窗口进行关闭
添加自动关闭"无法找到入口点"消息窗口
阻止注入进程调用句柄为NULL的messagebox弹窗,劫持进程MessageBox由hijackScan注入时获取的窗口名称进行关闭
阻止注入进程调用ExitWindowsEx,不会劫持测试这个程序因为他可能会关机、重启或注销影响执行
扫描记录文件MD5,重复的文件不再加入注入劫持任务
添加-s选项 只收集到temp目录 不进行下一步创建进程注入判断白文件步骤
创建的进程如有调用创建管理员权限进程前,将被阻止,避免弹窗UAC
扫描时排出自身创建的success目录和temp目录 避免二次扫描
修复 1.5 bug
修改输出信息格式 添加扫描结果
避免遗留子进程 尝试结束进程所创建的子进程
shellcode删除了创建注册表动作,改为调试打印输出
程序兼容性助手(Program Compatibility Assistant)弹窗不再需要手动关闭
windows features窗口(.NET Framework升级提示)不再需要手动关闭
更改消息码来关闭消息窗口
x86 增加申请内存创建新的线程执行shellcode创建注册表
整理项目依赖 直接生成 顺序relese x86 -> relese x64
添加-sd 选项 支持选择是否可与system32目录下DLL重名
修复得到的字符串中含有不可见字符导致程序创建资源文件失败的问题
修复路径中含有“../”时导致结果与预期不符的问题
创建进程时 错误弹窗 "计算机类型不匹配" 不再需要手动关闭
注入进程后 错误弹窗 "系统错误 找不到dll 无法继续执行... " 不再需要手动关闭
PE文件添加Driver判断,不再尝试驱动类型的PE进程的创建
增加部分某些原因利用率极低的DLL到排出项目 减少success文件夹中不能利用的程序
判断成功的条件增加,减少success文件夹中不能利用的程序
修复LoadLibraryExA flag 为 0x800时 仍然尝试创建劫持 (0x800 值load system目录 不能用于劫持)
文件查询函数添加了更多判断,减少了无意义的尝试
x64 增加申请内存创建新的线程执行shellcode创建注册表 (x86 需要读取文件到内存)
扫描 64 32 gui cui 带签名可被劫持的白文件。