The observed capabilities enable identity spoofing of GPU hardware and interception of DXGI API calls via vtable patching and a drop-in proxy dxgi.dll. While there is no direct evidence of destructive behavior, the combination of side-loading capability, runtime hooking of COM method tables, and hardware identity fabrication is commonly associated with software that evades checks or modifies runtime behavior. Therefore the verdict is "suspicious". Additional analysis of the companion dxgi.o.dll (if present) and deployment context would be needed to rule out benign use cases (e.g., compatibility shims) or escalate to malicious if exfiltration or gating-bypass techniques are observed.
standardized_sulfur_b0ff1bb2
Natural Language Summary
Verdict: Suspicious
Summary
The binary is a Windows x64 DLL built with MSVC that functions as a DirectX Graphics Infrastructure (DXGI) proxy/shim. It loads a real DXGI implementation (preferring a local companion .\dxgi.o.dll if present, otherwise the system dxgi.dll), and exports standard DXGI factory functions (CreateDXGIFactory, CreateDXGIFactory1, CreateDXGIFactory2). After forwarding calls to the real implementations, it installs runtime hooks by patching vtable entries of returned COM objects (factories/adapters/outputs) to wrap their behavior with local wrappers. The wrappers fabricate adapter descriptors that mimic an NVIDIA GPU (vendor 0x10DE, device 0x2684, name beginning with NVIDIA GeForce R). This results in GPU identity spoofing for applications using DXGI, while maintaining functional proxies for the DXGI APIs. The presence of a side-loading deployment path and vtable interception techniques marks the behavior as suspicious rather than clearly malicious, since there is no evidence of data exfiltration, network activity, or destructive actions in the observed code.
Orchestration
The binary is organized as a proxy DXGI DLL. On process attach, the module initializes by loading an underlying DXGI implementation (first attempting a local companion: .\dxgi.o.dll, then falling back to the system dxgi.dll in the SystemDirectory). It resolves core DXGI entry points (e.g., CreateDXGIFactory, CreateDXGIFactory1, CreateDXGIFactory2, DXGIDeclareAdapterRemovalSupport, DXGIGetDebugInterface1) and stores their pointers for later use. The module exports proxy implementations of CreateDXGIFactory* and forwards calls to the real functions, then uses internal wrappers (sub_180001c50, sub_180001af0) to patch vtable entries on returned COM objects. The hooking installs wrappers on factory/adapter/interface objects by performing QueryInterface lookups for known DXGI COM interfaces and replacing targeted vtable slots with local wrappers. The hooks cover multiple vtable slots across interfaces and DXGI versions, enabling interception for a broad set of downstream calls.
Installation
No persistent artifacts are observed. Initialization relies on dynamic loading (LoadLibraryA, GetProcAddress) and in-memory vtable patching. It attempts to load a co-located '.\dxgi.o.dll' first; if absent, it loads the system dxgi.dll from the SystemDirectory. There is no evidence of registry keys, file writes, scheduled tasks, or service creation.
Persistence
The DLL can act as a drop-in replacement/side-loaded shim by residing in an application's directory, causing the process to load this proxy before the system dxgi.dll. This provides a per-application persistence vector without persistence mechanisms (auto-start entries, services, or registry changes) observed in the analyzed code.
Code Protection
No heavy obfuscation or string encryption is evident. The code relies on runtime GetProcAddress resolution and in-memory vtable patching to wrap and intercept COM objects. The presence of explicit hints to QueryInterface wrapper hooks and a replace_vtable_slot_with_pointer_and_return_original helper suggests a deliberate, transparent interception strategy rather than compiled anti-analysis protections.
Environment Awareness
Standard Windows runtime with no explicit anti-VM or anti-debug checks observed in the analyzed function groups. The module includes CRT initialization, security cookies, and SEH support but shows no adaptive environment checks or virtualization-evasion code paths in the provided sections. CPUID/XGETBV usage indicates ISA detection but is typical of MSVC-compiled binaries rather than anti-analysis.
Runtime Behaviors
Core behavior is to proxy DXGI operations and intercept/modify downstream calls. After forwarder calls to the real CreateDXGIFactory*, wrappers (sub_180001c50, sub_180001af0) enumerate and patch vtables of returned COM objects (factories/adapters/outputs). Specific behaviors include:
- Fabricating adapter descriptors by copying prepared structure data (vendor
0x10DE, device0x2684, and name starting with"NVIDIA GeForce R"). - Patching multiple vtable slots to redirect interface methods to local wrappers (slot indices
8,0xa,0xb,0x12,7,0xc,0x1a,0x1d). - Handling both initial factory calls and subsequent adapter/interface method invocations to ensure interception regardless of the path taken by the application.
Network Communication
None detected. The module operates locally in memory with no indicated sockets, HTTP requests, or other network I/O in the analyzed code paths.
Data Handling
The primary data manipulated comprises DXGI adapter descriptors and related COM interfaces. It fabricates adapter identity information (vendor, device, and a GPU name) and rewrites vtables to route calls to local wrappers. There is no evidence of data exfiltration, credential transmission, or logging to external channels in the observed scope.
Cryptography
No cryptographic operations, keys, or cryptographic API usage are present in the analyzed code paths.
Credential Access
No credential access routines (LSASS memory access, Windows DPAPI, etc.) observed.
Destructive Actions
No destructive actions observed (no file deletion, no disk/registry tampering, no device destruction, no VSS manipulation).
Build Quality
MSVC runtime usage is evident (CRT, exception handling, GS cookies, operator new, etc.). The code shows systematic handling of dynamic loading, vtable patching, and wrapper registration. Error handling is present for loading and function resolution. The architecture is thorough, with multiple wrappers and helper routines for vtable manipulation, indicating a polished build rather than ad-hoc code.
Platform Specific Notes
Windows x64 environment. Uses standard Windows APIs: LoadLibraryA, GetProcAddress, VirtualProtect, and COM-based DXGI interfaces. The design targets interception of IDXGIFactory/IDXGIAdapter/IDXGIOutput and related interfaces by replacing vtable slots with local wrappers to enable runtime interception and descriptor fabrication.
Indicators
String
NVIDIA GeForce R
sub_1800012e0 / sub_180001400 / sub_180001520 / sub_180001640
Hard-coded GPU name used when fabricating an adapter descriptor; indicates GPU identity spoofing.
Constant (Vendor ID)
0x10DE
sub_1800012e0 / sub_180001400 / sub_180001520 / sub_180001640
PCI vendor ID for NVIDIA; written into fabricated adapter descriptor.
Constant (Device ID)
0x2684
sub_1800012e0 / sub_180001400 / sub_180001520 / sub_180001640
Specific NVIDIA device ID; part of spoofed adapter identity.
String (DLL name used for probing)
".\dxgi.o.dll"
sub_180001180
Attempt to load a co-located alternate DXGI implementation; unusual name ("dxgi.o.dll") may represent a shipped proxy or obfuscated companion.
String (system fallback)
"\dxgi.dll"
sub_180001180
Fallback to system DXGI; indicates this DLL is a proxy/forwarder for real system DXGI.
Function Pointer Names / Resolved Exports
CreateDXGIFactory, CreateDXGIFactory1, CreateDXGIFactory2, DXGIDeclareAdapterRemovalSupport, DXGIGetDebugInterface1
sub_180001180 (GetProcAddress) and proxy exports (CreateDXGIFactory, CreateDXGIFactory1, CreateDXGIFactory2)
The DLL resolves core DXGI factory functions and debug interfaces; it acts as a drop-in replacement/proxy for dxgi.dll.
Data Reference (vtable patch helper)
sub_180001db0
sub_180001af0, sub_180001c50
Patches vtable entries of returned COM objects to redirect calls to local wrappers.
GUID Data
data_180050e98, data_180050e68, data_180050e88, data_180050e78, data_180050ea8, data_180050ec8
sub_180001af0 and sub_180001c50
GUIDs used for QueryInterface calls; likely map to DXGI interfaces (IDXGIAdapter, IDXGIFactory, IDXGIOutput, etc.).
vtable slot indexes
8, 0xa, 0xb, 0x12, 7, 0xc, 0x1a, 0x1d
sub_180001af0 / sub_180001c50
Specific vtable slots overwritten to intercept adapter/factory methods; demonstrates broad hooking across interfaces/versions.
| Type | Value | Referenced By | Indication |
|---|---|---|---|
String | NVIDIA GeForce R | sub_1800012e0 / sub_180001400 / sub_180001520 / sub_180001640 | Hard-coded GPU name used when fabricating an adapter descriptor; indicates GPU identity spoofing. |
Constant (Vendor ID) | 0x10DE | sub_1800012e0 / sub_180001400 / sub_180001520 / sub_180001640 | PCI vendor ID for NVIDIA; written into fabricated adapter descriptor. |
Constant (Device ID) | 0x2684 | sub_1800012e0 / sub_180001400 / sub_180001520 / sub_180001640 | Specific NVIDIA device ID; part of spoofed adapter identity. |
String (DLL name used for probing) | ".\dxgi.o.dll" | sub_180001180 | Attempt to load a co-located alternate DXGI implementation; unusual name ("dxgi.o.dll") may represent a shipped proxy or obfuscated companion. |
String (system fallback) | "\dxgi.dll" | sub_180001180 | Fallback to system DXGI; indicates this DLL is a proxy/forwarder for real system DXGI. |
Function Pointer Names / Resolved Exports | CreateDXGIFactory, CreateDXGIFactory1, CreateDXGIFactory2, DXGIDeclareAdapterRemovalSupport, DXGIGetDebugInterface1 | sub_180001180 (GetProcAddress) and proxy exports (CreateDXGIFactory, CreateDXGIFactory1, CreateDXGIFactory2) | The DLL resolves core DXGI factory functions and debug interfaces; it acts as a drop-in replacement/proxy for dxgi.dll. |
Data Reference (vtable patch helper) | sub_180001db0 | sub_180001af0, sub_180001c50 | Patches vtable entries of returned COM objects to redirect calls to local wrappers. |
GUID Data | data_180050e98, data_180050e68, data_180050e88, data_180050e78, data_180050ea8, data_180050ec8 | sub_180001af0 and sub_180001c50 | GUIDs used for QueryInterface calls; likely map to DXGI interfaces (IDXGIAdapter, IDXGIFactory, IDXGIOutput, etc.). |
vtable slot indexes | 8, 0xa, 0xb, 0x12, 7, 0xc, 0x1a, 0x1d | sub_180001af0 / sub_180001c50 | Specific vtable slots overwritten to intercept adapter/factory methods; demonstrates broad hooking across interfaces/versions. |
Delphos Labs may make errors. Manual verification is recommended.