Hack-IT: Reverse Engineering – Aktivierungscode (.NET)

2018-05-06 von Mario

Auf der leider nicht mehr verfügbaren Plattform “CanYouHack.it” gab es die Challenge “I’m sure you’ve just lost the key”. Dabei handelte es sich um eine EXE-Datei (Crack1.exe), welche nach dem Starten einen Aktivierungscode verlangte.

1. Analyse der Datei

Mit dem Befehl “strings” habe ich die EXE-Datei etwas näher untersucht. Dadurch sind folgende interessante Zeichenketten zum Vorschein gekommen.

WindowsFormsApplication1.exe
WindowsFormsApplication1.Properties
System.Windows.Forms
.NETFramework,Version=v4.5

D.h., die EXE-Datei wurde mit großer Wahrscheinlichkeit mit .NET erstellt.

2. Quellcode dekompilieren

Da es sich bei .NET um eine Common Intermediate Language handelt, ist eine Rückumwandlung des Quellcodes relativ leicht umsetzbar. Es existieren dafür verschiedene Tools. In dem Beispiel wurde ILSpy verwendet.

3. Quellcode untersuchen

Aus dem Code geht hervor, dass auf eine Seite zugegriffen und der eingegebene Aktivierungscode als Parameter übergeben wird. Daraufhin erhält man den Antworttext “Valid” zurück und das gesuchte Passwort wird erstellt und ausgegeben.

Der erste Teil kann ignoriert werden, da dieser nur Mittel zum Zweck ist. Der Wert “Valid” kann einfach vorausgesetzt werden. Interessant ist hingegen folgender Abschnitt:

Es ist ein Array gegeben, welches die Buchstaben “a” bis “z” beinhaltet. Über die Inhalte des Arrays wird iteriert und jeder Index wird durch 7 geteilt (Modulo). Ergibt der Rest 0, dann wird der entsprechende Buchstabe in der Variable “text2” gespeichert. Dadurch entsteht das begehrte Passwort.

4. Script erstellen

Die Lösung kann in dem Fall auch per Hand ermittelt werden, jedoch wo bleibt da der Spaß. ;) Hier das erstellte Python Script:

#!/usr/bin/python3

for i in range(97,123,1):
	if ((i-97) % 7 == 0):
		print(str(chr(i)))

 

Zeile Beschreibung
1 Shebang
3 Eine Schleife über die ASCII Werte a bis z.
4 If Abfrage ob die Division (Modulo) den Rest 0 ergibt.
Der Kniff “i-97” erspart die Deklaration eines Arrays mit den Buchstaben “a” bis “z”.
5 Ausgabe des Buchstabens

 

Das Passwort lautet “ahov”.

Kategorie: IT-Security Schlagwörter: , , , ,

Hack-IT: Reverse Engineering einer Android App

2017-09-28 von Mario

Bei diesem Hack-IT geht es um eine Android App, welche im Google Play Store erhältlich ist. Die Aufgabe besteht darin, dass einzugebende Passwort in der App herauszufinden.

Link zur App: https://play.google.com

 

Schritt 1

Für eine Analyse der App muss diese heruntergeladen werden. Dafür gibt es zahlreiche Tools, ich habe die Website apkpure.com verwendet. Im Suchfeld auf der Seite die Adresse der App eingeben und danach den “Download” Button betätigen. Daraufhin steht die APK Datei zur Verfügung.

 

Schritt 2

Mit der Software dex2jar können DEX Dateien in JAR Dateien umgewandelt werden. Nach dem Download der Software sourceforge.net/projects/dex2jar/ wird das Archiv noch entpackt

unzip dex2jar-2.0.zip

und Rechte vergeben.

chmod -R +x dex2jar-2.0/

Schritt 3

Jetzt kann die APK Datei umgewandelt werden.

./dex2jar-2.0/d2j-dex2jar.sh CanYouHack.apk

Danach steht die Datei “CanYouHack-dex2jar.jar” zur Verfügung.

Schritt 4

Als nächstes das Programm JD-GUI (jd.benow.ca) herunterladen, mit welchem der Inhalt der JAR Datei ganz einfach angeschaut werden kann.

Daraufhin heißt es suchen, in der Klasse “Mobile1” wird der hilfreiche Text “… right password!” aufgeführt.

Die IF-Anweisung darüber verrät uns das gesuchte Passwort:

if (paramAnonymousView.getText().toString().equals("1337"))

Das gesuchte Passwort lautet: 1337 und das Hack-IT ist gelöst.

Kategorie: IT-Security Schlagwörter: , , , , ,

Hack-IT: Reverse Engineering – Geheimzahl

2016-11-12 von Mario

Bei diesem Hack-IT liegt eine Binärdatei vor, welche unter Linux ausführbar ist und mit der Programmiersprache C erstellt wurde.

Nach der Ausführung soll eine Geheimzahl eingegeben werden. Wird die falsche Zahl eingegeben, so erscheint die Meldung “Falsch!”.

re01

Eine Möglichkeit, die richtige Zahl herauszufinden, wäre es, einfach ein Skript zu erstellen, welches alle Möglichkeiten durchprobiert. An dieser Stelle soll ein anderer eleganterer Weg dargestellt werden.

Mit dem GNU Debugger (GDB) kann das Programm in Maschinencode umgewandelt bzw. angezeigt werden. Dafür in der Konsole folgenden Befehl verwenden:

gdb hackme.o

Als nächstes im gdb folgende Einstellung setzen:

set disassembly-flavor intel

Dadurch wird eine bessere “Lesbarkeit” der Speicheradressen gewährleistet.

re02

Als nächstes mit dem Befehl

disass main

die Main Methode des Programms disassemblieren. Daraufhin erscheint der Inhalt der Methode in Maschinencode.

re03

In C werden Eingaben durch den User klassisch durch die Funktion “scanf” realisiert. Die Verwendung der Funktion

ist unter “call 0x4004f0 <__isoc99_scanf@plt>” zu finden.

re04

Nach der Eingabe muss der eingegebene Wert in einen Speicherbereich verschoben werden (die nachfolgende Zeile). An dieser Stelle wird es spannend, da als nächstes ein Vergleich folgt. Ist der Vergleich richtig, erhalten wir eine Erfolgs- oder Fehlermeldung.

Es wird die Speicheradresse mit dem Wert “0x539” verglichen. Dabei handelt es sich um einen Hexadezimalwert. Einfach mit einem Taschenrechner umwandeln und die Lösung ist gefunden.

re05

 

Download: Geheimzahl.zip

Kategorie: IT-Security Schlagwörter: , , ,