Question 1
PureLogs is obfuscated and packed to hinder static analysis. Which commercial .NET packer is used to protect the PureLogs binary?
Solution
.NET Reactor
Question 2
What is the name of the mutex created by PureLogs?
I used NetRecatorSlayer (https://github.com/SychicBoy/NETReactorSlayer) for deobfuscation of the .NET code. From there on the code was readable and suited for analysis using ILSpy.
The hypothesis for the Mutex was to find it at the beginning, which turned to be true. I went to the Entry Point of the PE and right at the beginning the corresponding code.
Solution
FQBnanyetMxSRRO
Question 3
PureLogs includes several anti-analysis checks before proceeding with execution. One of them specifically targets a well-known sandboxing tool. What process name does PureLogs check for to detect this sandbox?
Checks for a process and module that belong to the Sandboxie sandbox.
Solution
SbieCtrl.exe
Question 4
PureLogs avoids external analysis by querying a debugger-related state via a process handle. What Windows API function is used for this check?
In the same class as the check for the Sandboxie sandbox, there is also a check if a debugger is attached:
Solution
CheckRemoteDebuggerPresent
Question 5
PureLogs checks a specific registry key to know if it has already run on the system before. What is the full path of that registry key?
Solution
HKEY_CURRENT_USER\Software\IqswyHgVpagFHxu
Question 6
PureLogs modifies its process name and command-line to appear as a legitimate Windows process. What process name does it use to masquerade as a trusted system process?
Solution
explorer.exe
Is in Admin Group check, smethod_0 for Class13.
Question 7
What WMI class does PureLogs query to retrieve the system’s manufacturer and model?
Solution
Win32_ComputerSystem
Question 8
PureLogs uses a trick to bypass the “Run as Administrator” (UAC) prompt by starting a special COM object. What exact string does it add before the COM CLSID to request an elevated instance?
In this case, by misusing the COM object of the Admin API of the Microsoft Connection Manager Setup Utility (cmstplua.dll)
See: https://www.varonis.com/de/blog/alphv-blackcat-ransomware
https://gist.github.com/api0cradle/d4aaef39db0d845627d819b2b6b30512
https://strontic.github.io/xcyclopedia/library/clsid_6EDD6D74-C007-4E75-B76A-E5740995E24C.html
https://strontic.github.io/xcyclopedia/library/clsid_3E5FC7F9-9A51-4367-9063-A120244FBEC7.html
https://learn.microsoft.com/en-us/windows/win32/api/objbase/nf-objbase-cogetobject
Read the question carefully, as this string below is not the expected answer!
Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}
Solution
Elevation:Administrator!new:
Question 9
PureLogs uses COM objects to silently bypass User Account Control (UAC) and relaunch itself with elevated privileges. What ATT&CK technique does this behavior map to?
Just searching for UAC in the MITRE ATT&CK. https://attack.mitre.org/techniques/T1548/002/
Solution
T1548.002
Question 10
What regex pattern does PureLogs use to find Steam session tokens?
The malware searches the process memory of Steam for the regex pattern matching with the session token.
Solution
[A-Za-z0-9-_]{16,}\\.[A-Za-z0-9-_]{40,}\\.[A-Za-z0-9-_]{40,}
Question 11
PureLogs adds a unique tag to the stolen data before sending it to the attacker. What is the exact string it adds to identify this specific build of the malware?
Solution
test120922139213
Question 12
What port number does PureLogs use to communicate with its Command and Control (C2) server?
Solution
6561
Question 13
What mode of AES does PureLogs use to encrypt stolen data?
Solution
CBC
Question 14
What is the length (in bytes) of the derived Initialization Vector (IV) used in the encryption?
See screenshot above.
Solution
128 / 8
Question 15
What algorithm is used to derive the AES key and IV from the SHA-512 hash in PureLogs?
See screenshot above.
https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.rfc2898derivebytes
Solution
PBKDF2
Question 16
What fixed salt value is used in the PBKDF2 function in PureLogs (in hex starts as 0x)?
See screenshot above.
array2 = bytes([
117, 45, 158, 253, 184, 172, 96, 158,
239, 125, 30, 70, 145, 225, 3, 161
])
print(array2.hex())
Solution
0x752d9efdb8ac609eef7d1e4691e103a1