Zum Inhalt springen

Goversioninfo

Goversioninfo is a Windows PE file tool for reading and embedding version information resources in binary files. It enables payload obfuscation by making malware appear as legitimate software with spoofed version strings, company names, and file descriptions.

Installation

# Install via Go
go get github.com/josephspurrier/goversioninfo

# Download precompiled binary
wget https://github.com/josephspurrier/goversioninfo/releases/download/v0.3/goversioninfo-windows-amd64.exe

# Build from source
git clone https://github.com/josephspurrier/goversioninfo
cd goversioninfo
go build -o goversioninfo.exe

Reading Version Information

Extract from Legitimate Binaries

# Read version info
goversioninfo.exe -n payload.exe

# Verbose output
goversioninfo.exe -n payload.exe -v

# Output formats
goversioninfo.exe -n legitimate.exe -j version.json
goversioninfo.exe -n legitimate.exe -x version.xml
goversioninfo.exe -n explorer.exe > explorer_version.txt

Version Information Components

ComponentPurposeExample
FileVersionBinary file version10.0.19041.1586
ProductVersionProduct version number10.0.19041.1586
CompanyNameCompany attributionMicrosoft Corporation
FileDescriptionFile purposeWindows Update
ProductNameProduct nameWindows 10
InternalNameInternal module nameupdate
OriginalFilenameExpected filenameexplorer.exe
LegalCopyrightCopyright notice© Microsoft Corporation

Creating Version JSON

{
  "FixedFileInfo": {
    "FileVersion": "10.0.19041.1586",
    "ProductVersion": "10.0.19041.1586",
    "FileDateMS": 2234128384,
    "FileDateLS": 67305472,
    "FileOS": 4,
    "FileType": 1,
    "FileSubType": 0
  },
  "StringFileInfo": {
    "ProductName": "Microsoft Windows",
    "CompanyName": "Microsoft Corporation",
    "FileDescription": "Windows Update",
    "FileVersion": "10.0.19041.1586",
    "InternalName": "update.exe",
    "LegalCopyright": "© Microsoft Corporation",
    "OriginalFilename": "explorer.exe",
    "ProductVersion": "10.0.19041.1586"
  },
  "VarFileInfo": {
    "Translation": 1033
  }
}

Embedding Version Information

Apply Version Info to Payload

# Add version information from another binary
goversioninfo.exe -n legitimate.exe > version.json

# Apply to payload
goversioninfo.exe \
  --config version.json \
  malware.exe

# Or with individual parameters
goversioninfo.exe \
  -product-version "10.0.19041.1" \
  -file-version "10.0.19041.1" \
  -product-name "Windows Update" \
  -company-name "Microsoft Corporation" \
  -file-description "Windows Update Service" \
  payload.exe

Spoofing Legitimate Software

Mimic Windows System Files

# Appear as explorer.exe
goversioninfo.exe \
  --config explorer_version.json \
  -original-filename "explorer.exe" \
  malware.exe

# Appear as svchost.exe
goversioninfo.exe \
  -product-name "Service Host Process" \
  -company-name "Microsoft Corporation" \
  -file-description "Service Host Process" \
  -original-filename "svchost.exe" \
  -product-version "10.0.19041.1586" \
  malware.exe

# Appear as SearchIndexer.exe
goversioninfo.exe \
  -product-name "Windows Search" \
  -company-name "Microsoft Corporation" \
  -file-description "Windows Search Indexer" \
  -original-filename "SearchIndexer.exe" \
  malware.exe

Mimic Third-Party Software

# Adobe Reader
goversioninfo.exe \
  -product-name "Adobe Acrobat Reader DC" \
  -company-name "Adobe Inc." \
  -file-description "Adobe Acrobat Reader DC" \
  -product-version "2021.007.20091" \
  malware.exe

# Google Chrome
goversioninfo.exe \
  -product-name "Google Chrome" \
  -company-name "Google LLC" \
  -file-description "Google Chrome" \
  -file-version "89.0.4389.90" \
  malware.exe

# Microsoft Office
goversioninfo.exe \
  -product-name "Microsoft Office 2019" \
  -company-name "Microsoft Corporation" \
  -file-description "Microsoft Word Document" \
  -original-filename "WINWORD.EXE" \
  malware.exe

Icon and Manifest Embedding

Icon Manipulation

# Extract icon from legitimate binary
goversioninfo.exe -n legitimate.exe --extract-icon output.ico

# Apply icon to payload
goversioninfo.exe \
  --icon legitimate.ico \
  malware.exe

# Use Windows Defender icon
goversioninfo.exe \
  --icon "C:\\Program Files\\Windows Defender\\MpCmdRun.exe" \
  malware.exe

Manifest Embedding

# Extract manifest
goversioninfo.exe -n legitimate.exe --extract-manifest output.xml

# Embed manifest
goversioninfo.exe \
  --manifest legitimate.xml \
  malware.exe

# Admin manifest (triggers UAC)
goversioninfo.exe \
  --manifest admin-manifest.xml \
  malware.exe

Timestamp Spoofing

File Date Manipulation

# Extract file dates from legitimate binary
FILEDATE_MS=$(goversioninfo.exe -n C:\\Windows\\System32\\explorer.exe | grep FileDateMS)
FILEDATE_LS=$(goversioninfo.exe -n C:\\Windows\\System32\\explorer.exe | grep FileDateLS)

# Apply matching timestamps
goversioninfo.exe \
  --file-date-ms "$FILEDATE_MS" \
  --file-date-ls "$FILEDATE_LS" \
  malware.exe

# Match Windows Update timestamp
goversioninfo.exe \
  --file-date-ms 2234128384 \
  --file-date-ls 67305472 \
  malware.exe

Batch Processing

Process Multiple Payloads

#!/bin/bash
# Apply version info to multiple payloads

LEGITIMATE="explorer.exe"
PAYLOAD_DIR="payloads"

# Extract version once
goversioninfo.exe -n "$LEGITIMATE" -j version.json

# Apply to all payloads
for payload in "$PAYLOAD_DIR"/*.exe; do
    echo "[*] Processing $payload"
    goversioninfo.exe --config version.json "$payload"
done

PowerShell Automation

# PowerShell script for batch version spoofing

$legitimate = "C:\Windows\System32\explorer.exe"
$payloadDir = ".\payloads"

# Extract version info
& goversioninfo.exe -n $legitimate -j version.json

# Apply to all payloads
Get-ChildItem "$payloadDir\*.exe" | ForEach-Object {
    Write-Host "Processing $($_.Name)"
    & goversioninfo.exe --config version.json $_.FullName
}

Detection Evasion Strategies

Blend with System Binaries

# Make payload indistinguishable from svchost.exe
goversioninfo.exe \
  -product-name "Service Host Process" \
  -company-name "Microsoft Corporation" \
  -file-description "Service Host Process" \
  -original-filename "svchost.exe" \
  -product-version "10.0.19041.1586" \
  payload.exe

# Result appears identical in Properties dialog

System32 Placement

# Copy to System32 with spoofed properties
copy payload.exe C:\Windows\System32\update.exe

# Apply matching version info
goversioninfo.exe \
  -product-name "Windows Update" \
  -company-name "Microsoft Corporation" \
  C:\Windows\System32\update.exe

Verification & Testing

Verify Applied Information

# Check applied version info
goversioninfo.exe -n payload.exe

# Properties dialog verification
# Right-click payload.exe → Properties → Details
# Should show spoofed information

# File command
file payload.exe

# Sigcheck (Sysinternals)
sigcheck.exe payload.exe

Code Signing Integration

Digital Signatures

# Check if payload passes signature checks
signtool verify /pa payload.exe

# Sign with certificate (requires valid cert)
signtool sign /f cert.pfx payload.exe

# Sign with timestamp
signtool sign /f cert.pfx /t http://timestamp.server payload.exe

Multi-Language Support

Language Variants

# Add language version
goversioninfo.exe \
  -language 0 \
  -product-name "Windows 10" \
  payload.exe

# Language codes
# 0 = English (US)
# 1 = English (UK)
# 7 = German
# 13 = French
# 16 = Italian
# 34 = Spanish

Advanced Techniques

Resource Section Analysis

# View resource section
objdump -R payload.exe

# View version resource
strings payload.exe | grep -i microsoft

# Check string tables
readpe --sections payload.exe

Combined Obfuscation

# Apply version info + icon + manifest
goversioninfo.exe \
  --config explorer_version.json \
  --icon explorer.ico \
  --manifest explorer.xml \
  -original-filename "explorer.exe" \
  malware.exe

# Result: Nearly indistinguishable from genuine explorer.exe

Best Practices

  • Extract legitimate binary version info for accuracy
  • Match timestamps to system binaries
  • Test modified payloads for functionality
  • Combine with code signing for maximum effect
  • Use meaningful company and product names
  • Include appropriate copyright notices
  • Test with file verification tools
  • Document all modifications

References


Last updated: 2026-03-30