In diesem Artikel, den ersten 5 Aufgaben, lernen wir die Grundlagen der Demontage, lösen die Probleme der anfänglichen umgekehrten Ebene und dekompilieren auch die dotNet-Anwendung.
OrganisationsinformationenSpeziell für diejenigen, die etwas Neues lernen und sich in einem der Bereiche Informations- und Computersicherheit entwickeln möchten, werde ich über die folgenden Kategorien schreiben und sprechen:
- PWN;
- Kryptographie (Krypto);
- Netzwerktechnologien (Netzwerk);
- Reverse (Reverse Engineering);
- Steganographie (Stegano);
- Suche und Ausnutzung von WEB-Schwachstellen.
Darüber hinaus werde ich meine Erfahrungen in den Bereichen Computerforensik, Analyse von Malware und Firmware, Angriffe auf drahtlose Netzwerke und lokale Netzwerke, Durchführung von Pentests und Schreiben von Exploits teilen.
Damit Sie sich über neue Artikel, Software und andere Informationen informieren können, habe ich
in Telegram einen
Kanal und eine
Gruppe eingerichtet, um alle Probleme im Bereich ICD
zu diskutieren . Außerdem werde ich Ihre persönlichen Anfragen, Fragen, Vorschläge und Empfehlungen
persönlich prüfen
und alle beantworten .
Alle Informationen werden nur zu Bildungszwecken bereitgestellt. Der Autor dieses Dokuments übernimmt keine Verantwortung für Schäden, die jemandem durch die Verwendung von Kenntnissen und Methoden entstehen, die durch das Studium dieses Dokuments erworben wurden.
C, GCC32
Betrachten Sie den einfachsten Fall. Dies ist die erste umgekehrte Quest.

Wenn das Kennwort in Aufgaben dieses Typs als Zeichenfolge gespeichert wird, kann es ohne Verwendung eines speziellen Tools gefunden werden. Lassen Sie uns das Programm ausführen und sehen, was es anzeigt.

Großartig. Wir haben eine Einladung und eine Nachricht über das falsche Passwort. Wir sehen uns die Zeilen in der Programmdatei an und finden unter ihnen eine Einladung und eine Nachricht über das falsche Passwort. In der Nähe sollte sich ein Passwort befinden.

Aus den Zeilen nebeneinander ergibt sich also eine, die wie ein Passwort aussieht. Lass es uns versuchen.

Die Aufgabe ist abgeschlossen. Wir geben das Passwort, wir bekommen 5 Punkte.

ELFx86, Basic
Wir werden gebeten, ein Passwort zu finden.

Wir laden das Programm in den IDA Pro-Debugger (ich verwende Version 7.0) und drücken F5, um das Programm zu dekompilieren.

Somit wird der eingegebene Name mit dem String John verglichen und das Passwort mit dem Ripper verglichen.

Somit haben wir die Aufgabe richtig gelöst und unser Passwort erhalten. Wir vermieten es und verdienen 5 weitere Punkte.

PEx86, 0 Schutz
Diesmal bekommen wir einen Exe-Shnik.

Laden Sie es in IDA Pro herunter.

Das Programm speichert keine Debugging-Informationen, daher werden die üblichen Funktionsnamen wie main nicht angezeigt. Schauen wir uns die Zeilen im Programm an. Drücken Sie dazu + F12.

Wir sehen Meldungen zur Eingabe der richtigen und falschen Passwörter. Jetzt können wir den Block mit dieser Zeile im Code finden und sehen, welche Bedingung davor steht. Doppelklicken Sie auf die Zeile.

Wir befinden uns im Bereich rdata. Lassen Sie uns alle Links im Code für diese Adresse finden. Drücken Sie dazu X.

Somit gibt es im Programmcode nur einen Aufruf unserer Leitung. Wir doppelklicken und gehen zum Code.

Wir sind im Hauptprogrammcode. Wir dekompilieren.

Hier findet eine Überprüfung einer Nummer a2 und einer Zeile a1 statt. Lassen Sie uns eine Zahl in ein Zeichen übersetzen.

Drücken Sie dazu R. auf die Nummer. Und unser Code hat sich geändert.

Wir kennen jetzt die Linie, es bleibt herauszufinden, wie die Zahl a2 ist. Sehen wir uns alle Links zu dieser Funktion an.

Es wird nur einmal aufgerufen.

Wie Sie sehen können, wird die Länge der Zeichenfolge als zweiter Parameter übergeben. Überprüfen Sie das gefundene Passwort.

Wir geben nach und bekommen 5 Punkte.

ELF-C ++, 0 Schutz
Es wird uns angeboten, ein Programm in C ++ zu lösen.

Wir öffnen in IDA Pro und gehen mit dem richtigen Passwort an den Ort, an dem die Nachricht angerufen wird. Lassen Sie es uns grün färben.

Lassen Sie uns das Diagramm verkleinern.

Wir müssen also zwei Bedingungen durchlaufen. Lassen Sie uns sie analysieren. In der ersten Bedingung wird die Anzahl der Argumente mit 1 verglichen. Das heißt, das Programm muss mehr als ein Argument haben (das erste ist der Name des Programms).

Wir analysieren die zweite Bedingung.

Die eingegebene Zeichenfolge wird mit der Zeichenfolge verglichen, die als Parameter an die Funktion plouf übergeben wird. Wir dekompilieren es.

Analysieren Sie den Code. Eigentlich ist a2 - eine Zeichenfolge. Somit läuft der Zyklus von i = 0, bis das i-te Element der Linie a2 0 ist (dh bis es das Ende der Linie erreicht).
V3 = a2 [i]
V5 = Länge (a3)
V6 = a3 [i% v5]
Das heißt, die Leitung an der Adresse a1 ist gleich den beiden Proxy-Leitungen a2 und a3. Kehren wir zur Hauptfunktion zurück und suchen diese Zeilen.

Wir müssen also die Parameter var_C und var_10 definieren. Wir werden sie etwas höher finden. Dies sind die Zeichenfolgen unk_8048BC4 bzw. unk_8048DCC.

Finden Sie den Wert der Zeichenfolgen.

Nun, wir werden einen Code schreiben, um sie zu vertreten.

Wir bekommen das Passwort.

PE-DotNet, 0 Schutz
In dieser Aufgabe wird uns angeboten, die .NET-Anwendung umzukehren.

Sie können es mit dem Dateidienstprogramm ermitteln.

C # ist eine dekompilierte Sprache, sodass wir das ursprüngliche Projekt erhalten können. Dies kann mit
dnSpy erfolgen .

Öffnen wir das CrackMe-Projekt und suchen nach Funktionen und Methoden.

Die Button1_Click-Methode überprüft das Kennwort auf Knopfdruck.

Im Quellcode finden wir das Passwort. Schau es dir an.

Wir übergeben es.

Das ist alles für jetzt. Fortsetzung folgt ... Sie können sich uns per
Telegramm anschließen . Dort können Sie Ihre eigenen Themen vorschlagen und über die Themenauswahl für die folgenden Artikel abstimmen.