NightSpire Ransomware — Full Analysis
1. Sample Identification
| Field | Value |
|---|---|
| Family | NightSpire (self-identified as "NightSpire.Team") |
| SHA-256 | 69f5515ff3f554233840ad2f2397b345f955013017a9ae14ed4e762f52d936af |
| MD5 | 20cb8d8216061545b0b31ec8bd5f42de |
| Type | PE32+ x86-64, Windows Console |
| Size | 3,295,744 bytes (3.2 MB) |
| Language | Go (Golang) - compiled with Go runtime |
| Compile timestamp | Not available (Go binary with stripped debug info) |
| PDB path | None (Go binaries don't use PDB) |
| Image base | 0x400000 |
| Sections | 8: .text, .rdata, .data, .idata (×2), .pdata, .xdata, .idata |
| Functions | Approximately 3,200 functions identified after Go runtime analysis |
NightSpire is a Go-based ransomware targeting Windows systems with modern cryptographic implementation (AES-256-CTR + RSA-4096-OAEP-SHA512) and multi-threaded execution. The binary shows no dedicated anti-analysis techniques, string obfuscation, or evasion mechanisms, focusing purely on encryption functionality. It embeds a hardcoded 4096-bit RSA public key for key exchange and implements a robust CLI interface with extensive configuration options. The malware enumerates all Windows drives (A: through Z:) using parallel goroutines and includes functionality for file icon manipulation and Windows Explorer integration.
Imports (2 DLLs)
| DLL | Count | Purpose |
|---|---|
| KERNEL32 | 47 | Core Windows APIs: File I/O (WriteFile, CreateFileW, FindFirstFileW), Process/Thread management (CreateThread, WaitForSingleObject), Memory management (VirtualAlloc, VirtualFree), System info (GetSystemDirectoryA, GetSystemInfo) |
| Additional APIs | 8 | Advanced APIs: Exception handling (AddVectoredExceptionHandler), Console (WriteConsoleW, GetConsoleMode), Library loading (LoadLibraryW, GetProcAddress) |
Notably absent:
- No networking imports (WinHttp, WinINet, Ws2_32) → no built-in networking capability identified in this payload
- No service control (OpenSCManager, EnumServicesStatus) → no service termination functionality
- No process enumeration (CreateToolhelp32Snapshot, TerminateProcess) → no process killing functionality
- No debugging detection (IsDebuggerPresent, CheckRemoteDebuggerPresent) → no dedicated anti-debugging logic
- No WMI/COM imports → no WMI-based operations
2. Infrastructure
| Field | Value |
|---|---|
| Primary Onion | http://nspire7lugml7ybqyjaaxtsgrs4qn3fcon3lrjbih6wamttvdm5ke4qd.onion |
| Leak Site | http://nspirep7orjq73k2x2fwh2mxgh74vm2now6cdbnnxjk2f5wn34bmdxad.onion |
| Email 1 | nightspire.team2026@onionmail.org |
| Email 2 | nightspireteam.receiver@onionmail.org |
| qTox ID 1 | 038F61A270B8094E713E4815C4FA5086E4AD3A021575C6F90EE65A0C123D3E3BF6926C3B59EA |
| qTox ID 2 | 8D663FD10BF662930F4C076CBF95FACFCC4ABD8F1A5E328DE75D0B0237A74E1AE1E0C5C37E7F |
| Chat UUID | NSPIRE830NPH7ZLBRW39 |
| Chat Password | 769FZisalII12Rph |
| Note filename | Unknown (not hardcoded, likely configurable) |
| Extension | .nspire |
| File Marker | sNightspire (appended to encrypted files) |
| Payment | Bitcoin (BTC) |
3. Ransom Note
Content (from embedded string @ 0x5afeca)
~~~ You have been attacked by NightSpire.Team ~~~
All data was encrypted.(There might be some files which extensions are remaining as original, but they are all encrypted as well.)
We have taken your sensitive data.
If you want check the list of files we have stolen, you can find it on our WEBSITE CHAT (http://nspire7lugml7ybqyjaaxtsgrs4qn3fcon3lrjbih6wamttvdm5ke4qd.onion).
*******************************************************************
We want Only $500K in BTC.
+ If you contact us within 24 hours, you will receive a 30% discount on the price.
+ If you pay us within 48 hours, you will receive a 40% discount on the price.
+ And also if you pay us within 24 hours, you will receive a 50% discount on the price.
* We can adjust the LARGER DISCOUNT if you engage in ACTIVE NEGOTIATION.
* After 24 hours, we will public your company's real name and conduct a full-scale investigation into your data.
* In 72 hours, we will begin the leak, starting with the oldest data.
******************************************************************
***If you pay the ransom, we will fulfill all the terms we agreed upon during the negotiation process.
Provides DECRYTPION TOOL & KEY and permanently DELETE the stolen data.
And also we'll help reinforce your internal network with strong security measures to make sure you never face another ransomware attack.
You can recover your system and files within only 5 hours with our help***
>>>>>What happens if you don't pay?
1. We will provide your all data to CLIENTS, GOVERNMENT and LEGAL authorities.
2. We will transfer information to your competitors.
3. We will make all the information public on our website.(http://nspirep7orjq73k2x2fwh2mxgh74vm2now6cdbnnxjk2f5wn34bmdxad.onion/)
4. We will do our utmost to ensure your Company's faces significant fines and reputational damage.
>>>>> Warning! Do not delete or modify encrypted files, it will lead to irreversible problems with decryption of files!
******************************************************************
>>>>>Contact us.
>>> Using Our WEBSITE CHAT(You can only connect our site with Tor Browser)
+ Download and install Tor Browser at https://www.torproject.org/
+ Through Tor Browser, enter below url
http://nspire7lugml7ybqyjaaxtsgrs4qn3fcon3lrjbih6wamttvdm5ke4qd.onion
+ Enter UUID "NSPIRE830NPH7ZLBRW39" and PASSWORD "769FZisalII12Rph" on Login Page
>>> Using qTox Chat App
qTox ID1: 038F61A270B8094E713E4815C4FA5086E4AD3A021575C6F90EE65A0C123D3E3BF6926C3B59EA
qTox ID2: 8D663FD10BF662930F4C076CBF95FACFCC4ABD8F1A5E328DE75D0B0237A74E1AE1E0C5C37E7F
>>>Using e-Mail:
nightspire.team2026@onionmail.org
nightspireteam.receiver@onionmail.org
******************************************************************
DO NOT SHARE UUID TO ANYONE!!!
4. Execution Flow (main.main @ 0x511d40)
1. Decode embedded RSA public key from base64 (sLs0tls1crudjti variable)
2. Parse command-line arguments using Go flag package
3. Initialize configuration flags (-p, -e, -s, -r, -t, -k, -noreadme)
4. If icon flag set: configure .nspire file icons + refresh Windows Explorer
5. If specific path provided (-p): encrypt target directory
6. Else: enumerate all drives A: through Z: in parallel goroutines
7. For each drive: spawn Go goroutine calling main.EncryptDir
8. Use sync.WaitGroup to coordinate parallel execution
9. Each goroutine recursively encrypts files in its assigned drive
Multi-threaded Architecture
NightSpire employs Go's goroutine-based concurrency model:
- Drive-level parallelism: One goroutine per Windows drive letter (A: through Z:)
- Thread control: -k flag controls goroutine count (default: 1, warning about file corruption)
- Synchronization: Uses Go's sync.WaitGroup for coordination
- Memory safety: Go's garbage collector prevents typical memory corruption issues
5. Encryption System
Key Exchange
| Parameter | Value |
|---|---|
| Algorithm | RSA-OAEP-SHA512 |
| Key size | 4096 bits |
| Implementation | Go crypto/rsa standard library |
| Attacker public key | Base64-embedded in binary @ 0x5afa9e |
| Public exponent | 65537 (standard) |
| OAEP hash | SHA-512 |
Symmetric Cipher
| Parameter | Value |
|---|---|
| Algorithm | AES-256-CTR |
| Mode | Counter (CTR) |
| Key size | 256 bits (32 bytes) |
| Nonce/IV | 128 bits (16 bytes) |
| Per-file key | YES — generated via main.GenerateRandomKey @ 0x50f480 |
| Per-file nonce | YES — generated via main.GenerateRandomNonce @ 0x50f500 |
File Encryption Process (main.EncryptFile @ 0x510460)
- Key Generation: Generate 32-byte AES key + 16-byte nonce using crypto/rand
- File Check: Call
main.checkPossibilityto verify file is not already encrypted - RSA Wrapping: Encrypt AES key using RSA-4096-OAEP-SHA512 (
main.EncryptRSA@0x50f7a0) - AES Encryption: Encrypt file content using AES-256-CTR (
main.encryptMethod@0x50f620) - Signature: Append "sNightspire" marker to file end (
main.writeToTail@0x50ffa0) - Extension: Change file extension to .nspire (
main.changeFileName@0x510260) - Icon: If enabled, set custom icon for .nspire files
Encrypted File Format
File Structure Analysis: The exact encrypted file metadata structure could not be fully reconstructed during static analysis. Based on the observed RSA and AES operations:
- Encrypted Data: File content encrypted with AES-256-CTR
- Key Material: RSA-4096-OAEP encrypted AES key (512 bytes expected)
- Signature Marker: "sNightspire" string appended to file end
- Extension: Changed to .nspire
Note: The precise layout of RSA ciphertext, nonce storage, and metadata positioning within the encrypted file footer requires dynamic analysis or additional reverse engineering.
Go Build Information
Compiler Version: Analysis indicates Go 1.24.11 (identified via runtime strings) Build Target: Windows x86-64 CGO: Disabled (pure Go implementation) Build Optimizations: Standard Go compiler optimizations applied
Crypto Implementation Details
AES-256-CTR Implementation (main.encryptMethod):
// Pseudocode based on decompiled function
func encryptMethod(data []byte, keyNonce []byte) []byte {
key := keyNonce[:32] // First 32 bytes = AES key
nonce := keyNonce[32:] // Next 16 bytes = CTR nonce
cipher, err := aes.NewCipher(key)
if err != nil { return nil }
stream := cipher.NewCTR(cipher, nonce)
encrypted := make([]byte, len(data))
stream.XORKeyStream(encrypted, data)
return encrypted
}
RSA Key Wrapping (main.EncryptRSA):
// Pseudocode based on decompiled function
func EncryptRSA(data []byte, publicKey *rsa.PublicKey) []byte {
hash := sha512.New()
encrypted, err := rsa.EncryptOAEP(hash, rand.Reader, publicKey, data, nil)
if err != nil { return nil }
return encrypted
}
6. File Targeting
Targeted Files
NightSpire encrypts all files by default except those matching exclusion criteria.
Excluded Directories
| Directory | Reason |
|---|---|
System Volume Information |
Windows system integrity |
Program Files (x86) |
Application binaries |
| AppData (optional) | User application data (controllable via -s flag) |
File Exclusion Logic (main.checkPossibility @ 0x50f8c0)
NightSpire implements file exclusion logic:
- Size check: Skip files < 6 bytes
- Extension patterns: Skip files ending with specific patterns:
- Pattern
1768977262+25970(hex:0x696E7370+0x7273) → likely ".nsprs" or similar - 3-byte patterns:31091+'s',27748+'l',30821+'e'→ various extensions - Signature check: Read last bytes of file to detect "sNightspire" marker
- Already encrypted: Skip files already containing the ransomware signature
7. Recovery Inhibition
NightSpire does not implement traditional recovery inhibition techniques:
- No VSS deletion (no
vssadmin delete shadowscommands) - No bcdedit modifications (no boot recovery disabling)
- No wbadmin operations (no backup deletion)
- No safe mode blocking
The ransomware relies purely on encryption with strong cryptography rather than system sabotage.
8. Targeted Services (0)
NightSpire does not terminate services. No service control manager operations detected.
9. Targeted Processes (0)
NightSpire does not kill processes. No process enumeration or termination logic detected.
10. Persistence & Evasion
Icon Integration (main.setFileIcon @ 0x50eae0)
Function: Custom icon assignment for .nspire files Purpose: Windows Explorer integration to display custom icons for encrypted files
Explorer Refresh (main.refreshWindowsExplorer @ 0x50ef00)
Function: Forces Windows Explorer to refresh and recognize new file type Implementation: Uses Windows Shell APIs to update file associations
File Marker System (main.checkPossibility)
Function: Prevents re-encryption by checking for "sNightspire" signature Implementation: Seeks to end of file and reads signature before encryption
Anti-Analysis Summary
| Technique | Unprotect ID | Address | Description |
|---|---|---|---|
| None detected | — | — | No dedicated anti-analysis or anti-debugging logic was identified |
NightSpire shows minimal obfuscation:
- No string obfuscation
- No API hashing
- No dedicated anti-debugging logic
- No VM detection
- No sandbox evasion techniques
- Plain-text configuration strings
- Standard Go runtime calls
11. Command-Line Arguments
| Argument | Description |
|---|---|
-p <path> |
Specify target file/directory path |
-e <mode> |
Encryption method: 0 = with extension change, 1 = without extension |
-s <flag> |
Skip AppData folders: 0 = encrypt AppData, 1 = skip AppData |
-r <mode> |
Readme method: 0 = create everywhere, 1 = root folder only |
-t <seconds> |
Sleep time between file operations (throttling) |
-k <count> |
Thread/goroutine count (default: 1, corruption warning) |
-noreadme |
Disable ransom note creation entirely |
Advanced Configuration: - Icon mode: Embedded flag to enable .nspire icon configuration - Target validation: All paths validated before encryption begins - Error handling: Go's error handling prevents crashes on inaccessible files
12. Static Imports Summary
| Category | Key APIs |
|---|---|
| Crypto | Implemented in Go standard library (crypto/aes, crypto/rsa, crypto/rand) |
| File I/O | WriteFile, CreateFileW, FindFirstFileW, FindNextFileW, ReadFile, SetEndOfFile |
| Process | CreateThread, WaitForSingleObject, VirtualAlloc, VirtualFree, GetCurrentThreadId |
| System | GetSystemDirectoryA, GetSystemInfo, LoadLibraryW, GetProcAddress, CloseHandle |
| Volume | FindFirstVolumeW, FindNextVolumeW, GetVolumeInformationW, GetVolumePathNameW |
| Console | WriteConsoleW, GetConsoleMode, GetStdHandle |
| Registry | None detected |
| Network | None detected |
13. IDA Analysis — Key Functions
| Address | Name | Size | Description |
|---|---|---|---|
0x511d40 |
main.main |
1541 B | Main entry point, CLI parsing, drive enumeration orchestration |
0x511260 |
main.EncryptDir |
2395 B | Recursive directory encryption with goroutine management |
0x510aa0 |
main.startEncrypting |
1963 B | Encryption orchestrator and thread coordinator |
0x510460 |
main.EncryptFile |
921 B | Individual file encryption with error handling |
0x50f8c0 |
main.checkPossibility |
602 B | File exclusion logic and re-encryption prevention |
0x50f620 |
main.encryptMethod |
377 B | AES-256-CTR implementation wrapper |
0x50f7a0 |
main.EncryptRSA |
273 B | RSA-OAEP key wrapping implementation |
0x50ffa0 |
main.writeToTail |
596 B | Signature appending ("sNightspire" marker) |
0x510860 |
main.MakeReadMeFile |
471 B | Ransom note creation and placement |
0x510260 |
main.changeFileName |
510 B | File extension change to .nspire |
0x50f480 |
main.GenerateRandomKey |
123 B | AES key generation (32 bytes via crypto/rand) |
0x50f500 |
main.GenerateRandomNonce |
123 B | CTR nonce generation (16 bytes via crypto/rand) |
0x50eae0 |
main.setFileIcon |
854 B | Windows file icon configuration for .nspire |
0x50ef00 |
main.refreshWindowsExplorer |
734 B | Explorer refresh for file association changes |
Runtime Functions (Go-specific):
- runtime.main @ 0x43cf20: Go runtime initialization
- Multiple goroutine management functions for concurrent execution
- Garbage collector integration for memory management
14. Indicators of Compromise (IOCs)
Hashes
| Type | Value |
|---|---|
| SHA-256 | 69f5515ff3f554233840ad2f2397b345f955013017a9ae14ed4e762f52d936af |
| MD5 | 20cb8d8216061545b0b31ec8bd5f42de |
Network
| Type | Value |
|---|---|
| Onion (Chat) | nspire7lugml7ybqyjaaxtsgrs4qn3fcon3lrjbih6wamttvdm5ke4qd.onion |
| Onion (Leak) | nspirep7orjq73k2x2fwh2mxgh74vm2now6cdbnnxjk2f5wn34bmdxad.onion |
nightspire.team2026@onionmail.org |
|
nightspireteam.receiver@onionmail.org |
Files
| Indicator | Value |
|---|---|
| Encrypted extension | .nspire |
| File signature | sNightspire (at end of encrypted files) |
| Chat credentials | UUID: NSPIRE830NPH7ZLBRW39, Password: 769FZisalII12Rph |
Registry
| Key | Description |
|---|---|
| File associations | .nspire file type registration with custom icons |
Behavioral
- Multi-threaded drive enumeration (A: through Z:)
- Windows Explorer refresh operations
- Volume API usage for drive discovery
- Go goroutine-based parallel processing
- File marker checking to prevent re-encryption
Distinctive Strings
"NightSpire.Team""sNightspire""~~~ You have been attacked by NightSpire.Team ~~~"".nspire""NSPIRE830NPH7ZLBRW39""769FZisalII12Rph""noreadme""_rt0_amd64_windows"(Go runtime entry)
15. MITRE ATT&CK Mapping
| ID | Technique | Implementation |
|---|---|---|
| T1486 | Data Encrypted for Impact | AES-256-CTR + RSA-4096-OAEP-SHA512 hybrid encryption |
| T1083 | File and Directory Discovery | Recursive directory enumeration across all Windows drives |
Notable Absences: - T1055 (Process Injection): Not implemented - T1112 (Modify Registry): Minimal registry interaction - T1082 (System Information Discovery): No system profiling - T1614 (System Location Discovery): No geolocation checks - T1490 (Inhibit System Recovery): No VSS deletion or backup removal - T1562 (Impair Defenses): No security tool disabling
16. Summary
NightSpire represents a well-structured Go-based ransomware with modern cryptographic implementation and multi-threading architecture. The malware demands $500,000 in Bitcoin with time-based discount incentives and operates dual Tor infrastructure for negotiation and data leak hosting.
Key technical characteristics: - Modern cryptography: AES-256-CTR + RSA-4096-OAEP-SHA512 using standard Go crypto libraries - Go implementation: Modern language choice offers memory safety and concurrent execution - Multi-threaded execution: Parallel drive encryption via goroutines for performance - Minimal evasion: Straightforward implementation with no dedicated anti-analysis features - Infrastructure setup: Dedicated .onion sites, qTox integration, and structured negotiation process
Defensive considerations:
- No cryptographic weaknesses were identified during static analysis
- Minimal obfuscation makes behavioral detection and analysis straightforward
- File signature system enables identification of encrypted files
- CLI configuration suggests possible automation or affiliate usage
- Prevention is critical as no recovery weaknesses were identified in the analyzed payload
The ransomware's straightforward implementation and lack of obfuscation, combined with robust crypto and established infrastructure, suggests an operator prioritizing operational effectiveness over evasion complexity.
Analysis Date: 2026-05-15 Analyzed with: IDA Pro 9.3 + Custom MCP Tooling