live_helium_693c23ae
liblzma.so.5.6.0 | 319feb5a9cddd81955d915b5632b4a5f8f9080281fb46e2f6d69d53f693c23ae
247.80 KB
ELF Executable

Natural Language Summary

Suspicious

Verdict: Suspicious

Evidence for benign intent:

  • The majority of the binary implements well-known, benign compression and hashing functionality. Many symbols and functions align with liblzma APIs (e.g., lzma_index_init, lzma_index_iter_next, lzma_lzip_decoder).
  • Build quality and algorithmic optimizations (SHA-256, CRC SIMD) match legitimate, performance-oriented code.

Evidence for suspicion:

  • The IFUNC resolver chain performs a transient GOT patch and executes a heavy initializer (sub_421f50/sub_422a90) during IFUNC resolution. This save->patch->call->restore pattern is highly unusual and executes before typical constructors, enabling early in-process interposition.
  • The heavy initializer conducts program-image scanning and populates opaque function-pointer tables, which could persistently modify runtime behavior in ways that evade normal instrumentation.

Lacking evidence of network C2, credential theft, or destructive payloads, the binary cannot be definitively categorized as malicious based on the provided analysis. However, the covert, nonstandard early initializer and GOT manipulation introduce a supply-chain or in-process compromise risk. Therefore the appropriate classification is suspicious.


Summary

The binary is primarily an LZMA/XZ compression library implementing index creation/iteration, block encoding/decoding, filter-chain handling, and multi-threaded worker pools. It contains performance-oriented primitives including a SHA-256 compression core (sub_42a230) and CRC32/CRC64 implementations with runtime CPU-feature-driven selection via IFUNCs.

The most noteworthy and atypical behavior is the IFUNC resolver chain that performs a transient GOT patch to execute a heavy initializer early in process startup. The resolver flow (sub_4047f0 -> sub_404710 -> sub_404784 -> transient GOT patch -> sub_421f50 -> sub_422a90) implements a save->patch->call->restore pattern which runs a large initializer that inspects the process image (PT_LOAD segments), builds many in-memory structures and interface tables, and populates function-pointer dispatch surfaces prior to .init_array execution. This one-shot early initializer is unnecessary for simple CRC selection and is unusual for a standard compression library. While the rest of the codebase is consistent with legitimate liblzma functionality, this covert early initialization represents a significant deviation from normal library behavior.

Orchestration

The binary is organized as an LZMA/XZ compression and indexing pipeline with multiple higher-order control flows. Key orchestration elements include:

  • IFUNC-based runtime selection for CRC primitives: the lzma_crc32 and lzma_crc64 IFUNC resolvers detect CPU features and select between table-based and SIMD-accelerated implementations.
  • A one-shot, early initializer invoked during IFUNC resolution by a transient GOT patch: the resolver chain (sub_4047f0 -> sub_404710 -> sub_404784 -> transient GOT patch -> sub_421f50 -> sub_422a90) performs a save->patch->call->restore sequence for a GOT slot. The helper sub_421f50 drives a heavy initialization that builds a large context and interface tables prior to usual .init_array execution.
  • Producer/consumer threading: worker thread main loop sub_42b6a0 (lzma_worker_thread_main) uses pthread_mutex_* and pthread_cond_* primitives to wait for work and process LZMA blocks via callback indirection.
  • Indexing and iterator state machine orchestration: functions such as lzma_index_init, lzma_index_iter_locate, and lzma_index_iter_next manage index objects, iteration, and serialized emit pathways.
  • Central dispatch surfaces: a global runtime handle referenced by many routines (data_43c020) and tables returned by sub_418200(...) supply multiple indirect call targets used extensively by the heavy initializer. These become central dispatch points used throughout the library.

Installation

There is no direct evidence in the analyzed code of writing to persistent system configuration (no Registry/plist/cron/systemd artifacts). Observed installation-like behaviors are process-local only:

  • Extensive in-process allocation and construction of internal structures via allocation wrappers (sub_40ce50/sub_40ce90) and refcounted descriptors.
  • The heavy initializer (sub_421f50 -> sub_422a90) locates program headers and PT_LOAD ranges in the current process image and builds in-memory tables and descriptors. While this does not create persistent on-disk artifacts, it demonstrates in-process configuration and potential for in-memory interposition.

Persistence

No evidence was found of creating persistent autostart entries, services, scheduled tasks, or other on-disk persistence mechanisms. However, the heavy initializer's transient GOT write and subsequent population of function-pointer tables and global handles can create persistent in-memory hooks for the lifetime of the process. That in-process persistence may persist across many host contexts if the library is embedded in multiple processes (supply-chain risk).

Code Protection

The code employs obfuscation-by-indirection rather than standard packing:

  • Heavy use of function-pointer tables and callback indirection hides control-flow behind runtime-resolved tables.
  • The initializer performs program-image introspection and creates many indirections that shift important logic from static code to runtime-resolved tables.
  • No explicit string encryption or packer signatures were observed in the provided extracts, but indirect calling and custom allocator indirections reduce static readability.

Environment Awareness

The binary demonstrates strong environment-awareness:

  • CPUID probing is used by IFUNC resolvers to choose optimized implementations.
  • The IFUNC chain performs a transient GOT patch to execute a heavy initializer early, exploiting the writable GOT state available during IFUNC resolution.
  • The heavy initializer scans program headers and PT_LOAD segments, and performs page-by-page scanning (sub_425eb0) until a sentinel, indicating detailed knowledge of the process memory layout.
  • No explicit ptrace or VM checks were found in the provided analysis, but the early-time GOT patch and image-scanning behavior may frustrate instrumentation that starts after ordinary constructors.

Runtime Behaviors

Primary runtime behaviors are consistent with a full-featured LZMA/XZ compression library:

  • Compression/decompression pipeline: block encoding/decoding, filter chain handling, match-finder and probability/model tables, and index serialization/deserialization. Evidence: functions such as lzma_index_init, lzma_block_header_size, lzma_block_uncomp_encode, lzma_block_buffer_encode, lzma_stream_encoder, lzma_lzip_decoder, lzma_lzma_preset.
  • Multi-threaded worker pool: sub_42b6a0 implements a condition-variable-driven worker loop that processes compression/decompression tasks using callback indirection.
  • Cryptographic/hash primitives: a SHA-256 compression core (sub_42a230) and CRC32/CRC64 implementations with both baseline and PCLMULQDQ-accelerated variants.
  • Early one-shot initialization: an IFUNC driven transient GOT patch calls sub_421f50 which runs sub_422a90 and builds large context structures and interface tables before normal initializers run.

Network Communication

No network APIs (sockets, getaddrinfo, connect, send, recv) or network-related strings (URLs, domains) were observed in the provided analysis. The analyzed code acts on in-process buffers and callbacks; no evidence of built-in network exfiltration or C2 exists in the inspected segments.

Data Handling

The binary processes arbitrary binary buffers for compression and indexing. Observable behaviors include:

  • Searching for compressed blocks and parsing index streams.
  • Decompressing blocks and calling user-provided callbacks for I/O.
  • Computing checksums (CRC32/CRC64) and cryptographic hashes (SHA-256).

No evidence of privileged data access (other processes' memory or credential stores) is present in the provided extracts; the heavy initializer limits its inspection to the running process image.

Cryptography

Cryptographic primitives include:

  • SHA-256 compression core implemented in sub_42a230 (presence of SHA-256 K constants such as 0x428a2f98, 0x71374491).
  • CRC implementations: table-driven CRC and PCLMULQDQ-accelerated variants, selected via IFUNC resolvers lzma_crc32 and lzma_crc64 based on CPUID-probed features.

No asymmetric cryptography (RSA/ECC) or obvious symmetric encryption implementations were identified in the supplied analysis.

Credential Access

No evidence of credential access or dumping (no LSASS/keychain logic, no use of OS credential APIs) was observed in the provided analysis.

Destructive Actions

No destructive behavior was observed. There were no calls or behaviors indicative of file deletion, MBR/VSS tampering, disabling backups, or mass-destruction routines. The code focuses on compression, hashing, threading, and in-memory initialization.

Build Quality

The code appears to be compiled C/C++ with high-quality, performance-oriented implementations:

  • Optimized algorithm implementations (SHA-256, CRC with SIMD acceleration).
  • Robust error handling and consistent use of numeric error codes.
  • Carefully implemented threading with condition variables and clock-aware waits.
  • Custom allocator hooks and API-friendly wrappers indicate design for embedding.

However, the IFUNC/GOT transient-patch pattern reflects an unusual and risky engineering choice inconsistent with standard library practice.

Platform Specific Notes

The binary targets POSIX/Linux and x86-64 specifics:

  • Uses pthread_create, pthread_mutex_*, pthread_cond_*, sched_getaffinity, clock_gettime, and sysconf.
  • Performs ELF/PIE-friendly position-independent computations and parses ELF program headers, including PT_LOAD segments.
  • SIMD optimizations use x86 instructions such as PCLMULQDQ and intrinsics like _mm_shuffle_epi8 and _mm_clmulepi64_si128, indicating x86-64 builds with SSE/AVX support.

Indicators

Type

Library Component

Value

libsdwGlslCommon.a (0.30%)

Referenced By

top-level component list

Indication

Link-time component found in the binary; low percentage suggests a small embedded library reference.

Type

Imported Function (Symbols)

Value

many lzma_* functions (e.g., lzma_index_iter_rewind, lzma_block_buffer_encode, lzma_stream_encoder, lzma_block_header_size, lzma_vli_encode/size)

Referenced By

import table listing at top

Indication

Strong evidence the binary embeds or implements liblzma/XZ functionality.

Type

Imported Function (OS/APIs)

Value

pthread_create, pthread_mutex_lock/unlock, pthread_cond_wait/signal/init/destroy, pthread_join, sched_getaffinity, clock_gettime

Referenced By

import table

Indication

Multi-threaded design and use of POSIX threading APIs.

Type

Symbol/Function

Value

sub_4046f0 / sub_404710 / sub_404784 / sub_421f50

Referenced By

IFUNC Resolver analysis

Indication

Unusual early-time initialization flow used to temporarily patch GOT during IFUNC resolution.

Type

Constant/Address

Value

.got base 0x43bce8; target GOT slot 0x43bfd8; patched helper address 0x421f50; original pointer 0x4046f0

Referenced By

IFUNC Resolver details

Indication

Concrete evidence of transient GOT write (save->patch->call->restore) executed during IFUNC resolution.

Type

Algorithmic fingerprints (strings/constants)

Value

SHA-256 K constants (0x428a2f98, 0x71374491, ...), CRC table usage, SIMD instructions (PCLMULQDQ, _mm_shuffle_epi8, _mm_clmulepi64_si128)

Referenced By

sub_42a230 and CRC analysis

Indication

Presence of SHA-256 primitive and optimized CRC implementations (baseline and PCLMULQDQ variants).

Type

Function Name / Behavioral

Value

lzma_crc32/lzma_crc64 IFUNC resolvers

Referenced By

IFUNC analysis and many function analyses

Indication

Runtime CPU-feature-based selection, but with suspicious side effects in resolver chain.

Delphos Labs may make errors. Manual verification is recommended.