COM Hijacking测试异常:Win10跨主机激活Wscript.Shell失败求助
COM Hijacking 部署失败(0x8007007E)排查方案
针对你遇到的主机B上COM组件激活失败报错(0x8007007E,指定模块未找到),结合操作场景,可从以下方向逐一排查:
编译架构与系统/Shell位数不匹配
检查主机A、B的系统位数(32/64位),以及编译的DLL位数。若主机B是64位系统,但用32位PowerShell执行New-Object命令,系统会优先读取HKCU\Software\Classes\Wow6432Node\CLSID下的注册表项,而非你添加的默认CLSID路径;反之亦然。验证方法:- 使用对应位数的PowerShell(64位路径:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe,32位路径:C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe)重新执行命令。 - 确认DLL编译时的目标平台(x86/x64)与主机B的系统位数匹配。
- 使用对应位数的PowerShell(64位路径:
注册表路径错误
64位系统中,32位和64位COM组件的注册表路径分离:- 64位COM组件对应路径:
HKCU:\Software\Classes\CLSID\{GUID}\Inproc32 - 32位COM组件对应路径:
HKCU:\Software\Classes\Wow6432Node\CLSID\{GUID}\Inproc32
你在主机A添加的路径可能仅适配当前系统位数,到主机B后需根据系统位数调整注册表项位置。
- 64位COM组件对应路径:
DLL路径配置问题
检查Inproc32键的默认值是否为DLL的绝对路径,如果是相对路径,需确保执行PowerShell命令时的工作目录与DLL所在目录一致。比如主机A上DLL放在C:\test\,主机B上DLL放在D:\payload\,注册表中的路径必须同步修改为D:\payload\your.dll。动态依赖库缺失/版本不兼容
CFF Explorer仅能检测静态链接的依赖,无法覆盖动态加载的库(如通过LoadLibrary动态调用的DLL)。排查方法:- 使用Process Monitor跟踪PowerShell进程的文件操作,筛选
Result为NAME NOT FOUND或PATH NOT FOUND的记录,定位具体缺失的模块。 - 检查主机B是否安装了与主机A一致的VC++运行时库(如VS Redistributable),部分编译的DLL依赖特定版本的运行时。
- 使用Process Monitor跟踪PowerShell进程的文件操作,筛选
DLL完整性与拦截问题
- 对比主机A、B上DLL的文件大小、哈希值,确认传输过程中未损坏。
- 检查主机B的杀毒软件/EDR是否拦截了该DLL,可临时关闭防护后重试,或查看防护日志是否有相关拦截记录。
注册表权限异常
虽然HKCU属于当前用户,但如果注册表项的权限被修改(如继承权限被取消),可能导致PowerShell无法读取该键值。可右键注册表项→权限,确认当前用户拥有读取权限。
内容的提问来源于stack exchange,提问作者CChris75325
相关产品推荐
相关产品推荐

