Windows COM/COM+ registry inventory scanner (CLSID/AppID/Interface/TypeLib) with 32-bit vs 64-bit views, plus ETW-based RPC/COM observation.
dotnet build
dotnet run -- --out . --verbose
Optional flags:
--include-user-hkcuinclude HKCU\Software\Classes--include-typelibscan TypeLib registry--hash sha256compute SHA-256 for server binaries--verbose
dotnet run -- --observe --duration 30 --top --include-local --json rpc_capture.json --csv rpc_capture.csv
Common observe flags:
--observestart ETW capture--discover-providerslist providers vialogman--provider <name|guid>add provider (repeatable)--duration <sec>capture N seconds then stop--remote-onlyonly ncacn_ip_tcp (default)--include-localinclude ncalrpc/ncacn_np--transport <tcp|np|lpc|all>filter by transport--process <name|pid>filter by process--interface <uuid>filter by interface IID--method <name|opnum>filter by method name or opnum--binding <string>filter by binding/protocol sequence--instrument <process|pid>enable instrumented mode (repeatable, comma-separated)--ip <addr>filter by remote IP--topshow top talkers summary--top-window <sec>sliding window for top talkers (default: 60)--allow-service <name>allow list for services (repeatable)--deny-service <name>deny list for services (repeatable)--rate-limit <n>max events/sec per process+transport--sample <n>keep 1 of N events--json <path>export JSON capture--csv <path>export CSV capture
Use streaming capture for long runs with rotation and periodic flush:
dotnet run -- --observe --include-local --capture-dir .\captures --capture-format both --capture-max-mb 50 --capture-rotate 5 --capture-flush 5
Streaming options:
--capture-dir <dir>enable streaming capture with rotation--capture-format <json|csv|both>output format--capture-max-mb <n>rotate when file exceeds N MB--capture-rotate <n>keep N rotated files (0 = unlimited)--capture-flush <sec>flush every N seconds (0 = disable)
Instrumented mode injects a small hook DLL into target processes to capture
client binding details and missing opnum values. It is opt-in via --instrument.
Build the hook DLL (requires Microsoft Detours):
cd instrumentation
# Run from a Visual Studio Developer Prompt (x64 or x86)
.\build_instrumentation.ps1 -DetoursRoot "C:\path\to\detours" -Arch x64
Then run observe mode with targets:
dotnet run -- --observe --include-local --instrument lsass --instrument 1234 --duration 20
The capture directory includes:
rpc_capture_stream_*.jsonl(one JSON event per line)rpc_capture_stream_*.csvrpc_capture_meta.json(capture metadata/settings)
Inventory:
com_inventory.jsoncom_inventory_clsid.csvcom_inventory_interfaces.csvcom_inventory_appid.csvcom_inventory_report.txtcom_inventory_typelib.json(only with--include-typelib)
Observe (standard export):
rpc_capture.jsonrpc_capture.csv
Each event includes the following fields (null/empty when unavailable):
timestampproviderevent_idevent_namepidprocesstransport(tcp,np,lpc)protocol_sequence(ex:ncacn_ip_tcp,ncacn_np,ncalrpc)local_addresslocal_portremote_addressremote_portendpoint(named pipe or ncalrpc endpoint)binding_string(raw RPC string binding when available)interface_uuidinterface_nameinterface_version(major.minor)proxystub_clsidproxystub_clsid32typelib_guidtypelib_versionclsidclsid_nameappidappid_nameclient_pidclient_processserver_pidserver_processcorrelation_idservicesclient_servicesserver_services
See docs/cli_fr.md.
- Windows-only (uses registry + ETW APIs).
- ETW capture may require elevation.
- TypeLib parsing is registry-only; no IDL extraction.