Confuser DeConfused
Ein kleines Update zum aktuellen Projekt, dem schreiben eines Unpackers für den Confuser 1.7.0.0 und 1.8.0.0. Es wird vorallem um das Proxy-System und die raffinierte Object-Verschlüsselung gehen. Hard stuff, aber richtig cool wenn man es mal kapiert hat.
Original bin ich auf den Confuser durch Malware gestossen, diese war mit 1.7.0.0 geschützt. Die Malware war der Inbegriff von Unübersichtlichkeit. Wie sollte man dort abstrahieren um einen DeObfuscator zu schreiben? Daher wurde ein simples Hello-World-Programm erstellt (mit 1.8.0.0) und dieses für weitere Analysen verwendet. Diese Hello-World Programm wird auch im folgenden für die Erklärungen verwendet.
Das Proxy-System ist einfach und genial zugleich. Anstatt direkte Methodenaufrufe wie System.Console.WriteLine(String) zu verwenden, wird ein Wrapper um den gesamten Call gepackt. Ein Delegate wird dann mit der richtigen Funktion (WriteLine) verknüpft und im Wrapper dieses verknüpfte Delegate aufgerufen. Dabei errechnet sich das Token (eine Art MethodenID) dem Namen der Delegate-Funktion. Soweit verstanden? In der Praxis sieht das so aus: