standardized_sulfur_b0ff1bb2
dxgi.dll | 39ba8789a0610512ce137237062417c9259b45e8a753625123dd06e1b0ff1bb2
342.02 KB
PE Executable
2024-03-11

Natural Language Summary

Suspicious

Verdict: Suspicious

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.


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, device 0x2684, 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

Type

String

Value

NVIDIA GeForce R

Referenced By

sub_1800012e0 / sub_180001400 / sub_180001520 / sub_180001640

Indication

Hard-coded GPU name used when fabricating an adapter descriptor; indicates GPU identity spoofing.

Type

Constant (Vendor ID)

Value

0x10DE

Referenced By

sub_1800012e0 / sub_180001400 / sub_180001520 / sub_180001640

Indication

PCI vendor ID for NVIDIA; written into fabricated adapter descriptor.

Type

Constant (Device ID)

Value

0x2684

Referenced By

sub_1800012e0 / sub_180001400 / sub_180001520 / sub_180001640

Indication

Specific NVIDIA device ID; part of spoofed adapter identity.

Type

String (DLL name used for probing)

Value

".\dxgi.o.dll"

Referenced By

sub_180001180

Indication

Attempt to load a co-located alternate DXGI implementation; unusual name ("dxgi.o.dll") may represent a shipped proxy or obfuscated companion.

Type

String (system fallback)

Value

"\dxgi.dll"

Referenced By

sub_180001180

Indication

Fallback to system DXGI; indicates this DLL is a proxy/forwarder for real system DXGI.

Type

Function Pointer Names / Resolved Exports

Value

CreateDXGIFactory, CreateDXGIFactory1, CreateDXGIFactory2, DXGIDeclareAdapterRemovalSupport, DXGIGetDebugInterface1

Referenced By

sub_180001180 (GetProcAddress) and proxy exports (CreateDXGIFactory, CreateDXGIFactory1, CreateDXGIFactory2)

Indication

The DLL resolves core DXGI factory functions and debug interfaces; it acts as a drop-in replacement/proxy for dxgi.dll.

Type

Data Reference (vtable patch helper)

Value

sub_180001db0

Referenced By

sub_180001af0, sub_180001c50

Indication

Patches vtable entries of returned COM objects to redirect calls to local wrappers.

Type

GUID Data

Value

data_180050e98, data_180050e68, data_180050e88, data_180050e78, data_180050ea8, data_180050ec8

Referenced By

sub_180001af0 and sub_180001c50

Indication

GUIDs used for QueryInterface calls; likely map to DXGI interfaces (IDXGIAdapter, IDXGIFactory, IDXGIOutput, etc.).

Type

vtable slot indexes

Value

8, 0xa, 0xb, 0x12, 7, 0xc, 0x1a, 0x1d

Referenced By

sub_180001af0 / sub_180001c50

Indication

Specific vtable slots overwritten to intercept adapter/factory methods; demonstrates broad hooking across interfaces/versions.

Delphos Labs may make errors. Manual verification is recommended.