Hab grad mal reingeschaut,
ist die selbe 0815-Kacke wie vorher auch. Den Client-Side-Packet-Injection Kartoffel-Code von Drew copy&pasted und Themida drübergejagt. Selbst die Debugausgaben sind immernoch drin, man muss nur die Konsole anschalten (den EP ein paar Byte nach oben und CALL AllocConsole).
Runtime-Protection gibts wiedermal keine. Einmal Themida umgangen debuggts sich ganz angenehm.
Security by Obscurity ... Ein Proof of Concept
Das größte Problem ist eher, das unter Windows 10 mein geliebtes OllyDBG nicht mehr so richtig wörkt.
Inzwischen kann das Ding auch Anti-VM, d.H. man kann nicht mehr auf einer virtuellen Maschine botten. Gelöst wurde das ganze per String-Vergleich auf Device- und BIOS-Namen. Nach Auffassung der Entwickler kommt hier aber nur VirtualBox in Frage, daher sollten alle anderen VM-Platformen weiterhin funktionieren. VirtualBox wird nach minimalen Änderungen ebenfalls funktionieren, wie man gleich sieht:
- /* Pseudo-code, sitze in der Bahn ... */
- int CheckSystemName(void) {
- int hEntry = 0;
- char* cValue;
- RegOpenKeyA(hEntry, HKLM, "SYSTEM/HARDWARE/DESC/BIOS");
- RegQueryValueExA( hEntry, cValue, "ProductName", ... );
- if (strncmp("VirtualBox",cValue, sizeof("VirtualBox")))
- return 1;
- return 0;
- }
- void UserOnWndProc() {
- if (Timerbla == abgelaufen) {
- if (CheckSystemName())
- return x;
- if (CheckSystemManufacturer())
- return x;
- if (CheckVideoCard())
- return x;
- if (CheckCDROM())
- return x;
- /* ... */
- }
- }
Alles anzeigen
Die "Hardware-ID" selbst habe ich noch nicht genauer untersucht. Es findet sich im Handler des Timers ein auffällig riesiger Codeblock der entweder aus Copy&Paste oder aus Loop-unrolling (Optimierung des Compilers) entstanden ist. In meiner Boshaftigkeit unterstelle ich den Entwicklern gerne ersteres
Es sind ~ 16 Durchläufe die sich scheinbar mit einem String in 16 Byte Blöcken beschäftigen und danach nochmal einige Durchläufe auf die ich noch keine Lust hatte. Woher die Daten kommen, habe ich ebenfalls noch nicht untersucht. Aus dem VM-Check vermutlich nicht, der hat nur einen Rückgabewert über VM=true/false, alles andere scheint in den Funktionen zu bleiben.
Die kryptografische Funktion dahinter, wenn da überhaupt was krytografisch ist, zu reversen lohnt warscheinlich nur für einen Lacher
Während der DllMain erfolgt ein unbekannter Library-Call mit "C:\" als Parameter. Könnte wieder meine Lieblingsfunktion GetVolumeInformation(), die wir ja schon aus der Vorgängerversion kennen, sein.
FUNFACT: Die DLL enthält einige male den String "Electus" aber exakt 0x den String "Onyx". Meines Wissens gehört die DLL doch zu einem Paket das man auf epvpers kaufen kann ... hat da etwa einer ... Recycling betrieben?
Gruß
florian0