In diesem Video werfen wir einen Blick auf Chad und Trey, die Schule.
Beide sind in der Lage, eine ganze APK-Datei zu verarbeiten und können diese Ressourcen auch
neu kompilieren, was bedeutet, dass wir Zugang zum Android Manifest, XML und Java-Quellcode erhalten.
Sie haben natürlich auch ihre Nachteile, und wir werden sie
mit dem Text-to-Char-Ansatz vergleichen, den wir bereits früher verwendet haben.
Aber im Großen und Ganzen sind diese beiden Werkzeuge erstaunlich und sollten unbedingt in Ihrem Werkzeugkasten vorhanden sein.
Jetzt können wir mit der Installation beginnen.
Anschließend sehen wir uns die Parameter an, die sie liefern,
denn einige davon sind bei unserem Reverse-Engineering-Prozess sehr nützlich.
Ich würde also sagen: Los geht's, wechseln wir zur Ubuntu-VM.
So, da haben wir sie, unsere Ubuntu-VM.
Ich öffne also meinen Webbrowser und suche nach
ADCs und GitHub, da dies kein GitHub-Projekt ist.
Dann benutzen wir das vom Dachfenster dort drüben.
Und dann können wir diese Versionen verwenden oder wir können einfach das Repository klonen, was ich auch tue.
Also kopiere ich diesen und füge ihn ein, dann gehe ich in die
Werkzeuge und sage einfach: "get clone", und dann klonen wir das gesamte Repository.
Wenn Sie git nicht installiert haben, können Sie einfach sorry.
Sie können es einfach über suru installieren.
Installieren Sie git.
Anschließend können Sie dieses Repository klonen.
Dann bekommen wir dieses Verzeichnis hier drüben.
Diese hier.
Tut mir leid, Shade.
Das wird das Ganze noch ein wenig vergrößern.
Und dann sagen wir, Gradle, das ist das Build-System.
Wenn wir das sagen, holt es alle notwendigen Binärdateien
und kompiliert auch den Code, der darin gespeichert ist.
Lassen Sie uns eine Weile warten, und ich komme wieder, wenn dieser Prozess abgeschlossen ist.
Genau hier können wir sehen, wie erfolgreich gebaut wird.
Der Build-Prozess ist nun abgeschlossen und wir haben
ein neues Verzeichnis mit dem Namen Build.
Und wir gehen in diese, in die X, in BIM und hier haben
wir kein Handwerk und keine Berufsschule und auch die Windows-Version mit der Bat-Erweiterung.
Jetzt fügen wir dieses Verzeichnis der Pfadvariable hinzu, damit wir einfach shade x
und shade x von hier aus starten können, wo immer wir wollen.
Deshalb hole ich das Verzeichnis hierher und erweitere einfach die Pfadvariable, wie wir
es in der Vergangenheit bei der Android-Einrichtung oder bei anderen Tools getan haben.
Also habe ich das hier geöffnet.
Und dann.
Und hier hängen wir einfach dieses Verzeichnis an, fügen diesen Doppelpunkt hinzu, und schon sind wir startklar.
Wenn wir zurückgehen und dann können wir den X-Befehl nicht finden, weil wir
unseren Satz h Umgebung aktualisieren müssen und jetzt können wir die X.
Wir müssen eine Eingabedatei bereitstellen.
Also gut.
Bis jetzt funktioniert es.
Der Installationsvorgang ist damit abgeschlossen.
Werfen wir nun einen Blick auf die Optionen von Handel X.
Wir haben zwei Werkzeuge.
Wir haben das x und sagen, das x, chui, j8x
ist die Kommandozeilenversion und das X bietet eine grafische Benutzeroberfläche.
Aber wir beginnen mit der Kommandozeilenversion, also geben wir H für Hilfe ein.
Die erste Zeile sagt uns also, dass Child X neben Java Compiler zu stehen scheint.
Dann verwenden wir check X, indem wir Optionen und eine Eingabedatei angeben, die eine APK und x, eine char-Klasse
und smiley zip und einige andere Dateien sein kann. Wir können ein Ausgabeverzeichnis definieren, das unsere Ressourcen und
unsere Java-Quellen speichert, und wie im APK-Tool können wir auch festlegen, dass wir Ressourcen oder Quellen nicht dekodieren.
Und das könnte sich als nützlich erweisen.
Wenn es einige Fehler in den Dekodierungsressourcen oder -quellen gibt, können wir den x-Teil überspringen.
Wir können auch sagen, dass Decompile in einem Klassennamen oder einer Klassendatei enthalten ist, was ebenfalls sehr praktisch ist.
Also gut.
Was haben wir sonst noch? Und dann
ist die nette Funktion der Verschleierungsteil.
Was ist also nicht die Verschleierung? Nehmen wir an,
wir haben den Klassennamen main class, und dieser
Klassenname wird nun auf einen einzigen Buchstaben reduziert.
Zum Beispiel, eine Klasse.
Und dieser Klassenname enthält nun Methoden wie B, C, D und E, und das passiert
bei allen Klassendateien, und dennoch muss der Algorithmus darauf achten, dass er nicht überschreibt.
Zum Beispiel.
Ja, benennen Sie beide Klassen in dieselbe um.
Wenn dies aber nicht geschieht, dann haben wir am Ende des gesamten Quellcodes einen Haufen von Zeichen.
Dann haben wir also Methoden wie 8.3.3. A, B, C, und dennoch ist es nicht einfach, diese zurückzuentwickeln.
Deshalb versucht JD X, dem Ganzen einen etwas besseren Namen zu geben.
Natürlich kann Radix nicht zaubern und den ursprünglichen Namen wiederherstellen,
aber es kann versuchen, einige erkennbare Muster zu erstellen.
Und genau das tut Radix, und dieser Ansatz hilft ein wenig.
Aber wenn man es mit einer stark verschleierten Anwendung zu tun
hat, kann ich mir nur vorstellen, diese Anwendung zu debuggen.
Wir haben einen Abschnitt darüber später in yeah, wo wir über das Debuggen von Anwendungen sprechen.
Die nächsten beiden Parameter beziehen sich auf die minimale und maximale Länge dieser Verschleierungstechnik.
Und das hat auch einige Nebeneffekte, die ich Ihnen später noch zeigen werde.
Also gut.
Die letzte nützliche Option könnte diese Punktdatei sein, aber hier werde ich Ihnen
eine andere Anwendung zeigen, die diese Aufgabe meiner Meinung nach etwas besser erledigt.
Und was macht der Parameter? Er speichert einen Aufrufgraph
in einer Dot-Datei, und ein Aufrufgraph ist einfach ein
Graph einer Ansicht über die Aufrufhierarchie dieser Anwendung.
Diese Klasse öffnet also diese Methode und diese Methode ruft diese Klasse auf und diese Klasse ruft diese Methode auf.
Es zeigt dies in einer schönen Übersicht, und das ist super praktisch, denn ich
habe dies einmal benutzt, um eine sehr schwierige Reverse-Engineering-Herausforderung einer Android-App zu lösen.
Auch diesen Ansatz werde ich Ihnen später im Spezialteil zeigen.
In Ordnung, dann haben wir die Ausführlichkeit und eine Protokollstufe.
Zum Beispiel, Pfeil ist wirklich nützlich, weil KDE ein wenig
häufiger als Text zu versuchen, meiner Meinung nach scheitert.
Anhand dieses Fehlers können wir sehen, wo es fehlschlägt,
z. B. an welchem Klassennamen oder der Baumquelle.
Und mit diesen Informationen können wir die Entscheidung für uns selbst treffen.
Wenn wir das jetzt brauchen, dekompilieren Sie es, oder wenn Sie nicht brauchen, kompiliert zu bleiben.
Wenn Sie dies zum Kompilieren nicht benötigen, können wir einfach weitermachen.
Aber wenn dies das wichtigste Stück ist, dann muss ich verschiedene Werkzeuge ausprobieren.
Zum Beispiel Text in Zeichen oder das spezielle Werkzeug, das ich Ihnen nachher zeigen werde.
Und schließlich haben wir die Thread-Anzahl hier und das ist auch super nett und in Radix,
weil Radix ist in der Lage, Multi-Thread diesen ganzen Tag Kompilierungsprozess und das kommt super praktisch,
wenn Sie zu tun haben oder dekompilieren eine Menge apk oder wenn Sie zu dekompilieren
eine riesige apk Multithreading bedeutet, dass wir unsere Aufgabe zu dritten und CPU-Kerne verteilen können.
Und ich habe Ihnen im Spickzettel auch eine grundlegende Berechnung zur Verfügung gestellt, wie Sie
herausfinden können, wie viele Kosten Sie Radix für diesen Multithreading-Teil zur Verfügung stellen können.
In Ordnung, jetzt kompilieren wir unsere Space-Ping-Anwendung und sehen uns das Ergebnis an.
Ich gehe also zu EPS über.
Wir erstellen ein neues Verzeichnis und nennen dieses Verzeichnis pang Jade.
Dann fügen Sie dies von hier aus ein.
Ja.
Dann öffne ich das Terminal hier drüben und wir sagen Kind x, dann den Namen und wir sagen LOC Level ist Pfeil.
Ich werde dies vergrößern.
Also, schauen wir mal.
Jetzt legt Lady X ein neues Verzeichnis an und verarbeitet auch diese Dateien.
Und schon haben wir unseren ersten Fehler.
Aber in dieser Klasse hier scheint der Jason-Reader-Pass nicht korrekt kompiliert zu werden.
Und wir haben auch dieses hier, das sich auf einen
Namen einer Kompressionsklasse bezieht, die ebenfalls nicht kompiliert werden kann.
Wir erhalten dies am Ende mit zwei Pfeilen.
Also gut.
Zwei Pfeile sind, um ehrlich zu sein, für diese Anwendung gar nicht so schlecht.
Werfen wir nun einen Blick auf diese einzelnen Dateien hier.
Wir haben diese Ressourcen und Quellen.
Wenn Sie auf die Ressourcen klicken, sind wir mit diesem Thema vertraut.
Dies ist unsere Anwendungsstruktur.
Wir haben diese Klasse speichern Steuer, aber wir haben auch dieses Android-Manifest Beispiel, das jetzt dekodiert wird.
Child X ist also in der Lage, diese Ressourcendateien zu verarbeiten.
Es gibt also im Moment nichts Besonderes hier.
Wir sind damit ziemlich vertraut, aber wir interessieren uns mehr für den Java-Code, und dieser ist hier
drüben, und jetzt haben wir die Struktur in Bezug auf den Paketnamen der Java-Klassen, zum Beispiel.
Wir haben das hier, das E, dann den Namen des
anderen Space-Pings und hier haben wir jetzt den Java-Quellcode.
Werfen wir einen Blick in das Alien-Verhaltenssystem eines Systems, und hier sehen wir,
ja, das ist der Decompile-Java-Code, und das sieht soweit ganz gut aus.
Ja.
Werfen wir einen Blick auf den Klassennamen, der nicht kompiliert werden kann.
Und hier können wir das hier sehen.
Dies sollte also der Klassenname sein.
Und es ist einfacher, nach dem Klassennamen zu suchen, um diese Datei zu erhalten,
anstatt all diese Verzeichnisse zu durchsuchen, weil wir diese Punkte durch Schrägstriche ersetzen müssen.
Nun, ich habe diesen Fall abgeschlossen, aber das ist nicht wichtig.
Bei den Quellen müssen wir jetzt also in die Com und so weiter gehen.
Aber ich suche hier nach dieser Klasse.
Dann werde ich sie öffnen.
Und hier können wir sehen, ja, wir haben dies mit Text, die auch so Text
zu haben, war in der Lage, diese Klasse und auch diese Methode zu behandeln gesehen.
Bei anderen Klassen kann dies jedoch fehlschlagen, so dass wir diesen Ansatz für beide Klassen anwenden können.
Also dekompilieren wir unsere Anwendung mit trade x und next to char und dann können wir diese Ergebnisse zusammenführen
und sehen, wer in welcher Funktion bessere Arbeit geleistet hat und dann können wir die Ergebnisse anschließend zusammenführen.
So funktioniert also Handel X.
Werfen wir nun einen Blick auf den exklusiven Handel.
Gehen Sie zum Verzeichnis der Anwendungen.
Wieder zurück.
Leertaste ping.
Ups.
Und dann verwenden wir den Handel zui und wir können auch ein h anbieten.
Aber es sind dieselben Parameter.
So können wir zum Beispiel die Fehlermethode hier drüben verwenden, um Fehler auf Sperrebene zu beheben.
Dann können wir dort den Handel sehen.
Wir konnten diese Dateien auch nicht dekompilieren, aber JD schloss aus, dass es
die gleichen Verzögerungen gibt, aber danach gibt es einen Weg, dies zu erreichen.
Das ist also unser und dann verwenden wir den Ausschluss für diese Datei.
Und hier haben wir nun unseren Editor und das sieht hier ziemlich ähnlich aus
wie der Handelsteil, aber wir haben jetzt diese Ressourcendateien hier und auch diese APK-Signatur.
Radix ist also auch in der Lage, diese Ressourcendateien hier zu dekodieren.
Ja.
Wir können nun die Android-Manifest-XML öffnen und sie hier durchblättern.
Und ja, eine Sache, die ich Ihnen hier zeigen möchte, ist die Verschleierungstechnik.
So, jetzt haben wir die Nachnamen.
Und das hier ist eine Schnittstelle mit dem großen I hier drüben.
Sie können dies hier sehen.
Und wenn Sie auf das Symbol hier klicken, das für
die Entschleierung steht, wird versucht, diese Anwendung zu entschleiern.
Aber wir können sehen, dass diese App nicht verschleiert wurde.
Aber ich drücke trotzdem jetzt diese Taste.
Und jetzt können wir sehen, dass sich etwas geändert hat.
Wir können den Schnitt sehen, damit wir.
Und wenn Sie auf die Schaltfläche "Verschleiern" klicken, denkt das Programm, dass dieser Text verschleiert ist und versucht, ihn zu verschleiern.
Ja, sie haben die Sache verschleiert, indem sie p005 vorangestellt haben.
Das macht das Pedal also ein bisschen erkennbar.
Und das gilt auch für das R, das ich nicht mehr finde.
Ich bin mir also nicht sicher, wo das R im Moment steht.
Also ja, wenn die App nicht obfuscated ist, dann sollte man
auch diese Option nutzen, denn man macht es, glaube ich, schlimmer.
Auf diese Weise.
Ich drücke jetzt noch einmal auf diese Schaltfläche und wir können jetzt sehen, okay, diese hier,
ich weiß nicht, ob diese Klasse kompiliert oder umbenannt wurde, aber ich konnte sie nicht finden.
Vielleicht habe ich das Verzeichnis dort nicht erweitert.
Oh ja, ich habe das Verzeichnis nicht erweitert.
Deshalb konnte ich sie nicht finden.
Entschuldigung.
Hier können wir sehen, dass das r jetzt dieses erkennbare Muster bekommt.
c0256r In Ordnung.
Und das ist es, was die Option D obfuscation bewirkt.
Das Einzige, was ich an dieser Stelle erwähnen möchte, ist dies.
Wenn Sie nach Klassen, Variablen, Attributen, was auch immer suchen, verwenden Sie bitte diese
statt dieser Suchoption, da dies nur eine Klassensuche ist und dies eine Textsuche ist.
Und hier können wir auch alle diese Parameter definieren.
Und unten können Sie sehen, dass die Indizierung eine Weile dauert, aber jetzt können wir
suchen und sehen, dass wir diese Fragmente erhalten, was in meinem Fall ein wenig
verdrahtet ist, oder meiner Meinung nach ist der beste Weg, diese Java-Klassen zu speichern.
Sie können dies beim Kompilieren tun oder Sie können diese Schaltfläche hier drücken, alles
speichern und dann einen Verzeichnisnamen angeben und Eclipse verwenden, um sie wieder zu importieren.
Ich zeige Ihnen das mal ganz kurz.
Mit Taye Diggs müssen wir also diese mit der Client-Version hier drüben kompilieren, die Quellen, und
jetzt laden wir herunter, installieren, eclipse und erstellen dann ein neues Projekt und importieren sie.
Also beschleunige ich die Sache ein wenig.
Ja.
Hier haben wir nun das Projekt und wir ziehen unsere
Verzeichnisse einfach per Drag & Drop in das dortige Quellverzeichnis.
Wir können diesen Punkt auch streichen, da er nicht notwendig ist.
Wir gehen also in den EPS-Bereich und handeln mit Quellen, die wir hierher ziehen und ablegen.
Kopieren von Dateien und Ordnern.
Und jetzt werden sie alle verfügbar sein.
Und wir können auch eine Reihe von Fehlern sehen.
Das ist auch der Grund, warum wir diese Anwendung nicht einfach dekompilieren, in diese
Anwendung einfügen und diese Anwendung wieder kompilieren können, weil wir dann bei 6000 Fehlern
landen, und dieser Wert kann sogar noch steigen, nachdem sie importiert worden sind.
Wir können einfach auf eine Suche gehen, wir klicken auf Datei, wir können hier nach Java suchen,
aber wir können auch diese Datei verwenden, hier drüben suchen und diesen Blatt-Parameter jetzt genau hier angeben.
Und dann werden alle Dateien durchgesehen.
Und wenn wir das tun, können wir das vergrößern und los geht's.
Wir können nun einen Doppelklick darauf machen.
Und ja, wir haben dort all diese Klassen, in denen sie auftritt.
Deshalb gefällt mir auch dieser Ansatz.
Sie kompilieren diese Anwendung mit CD X und laden
dann die Quellen in Eclipse, um diese Anwendung zurückzuentwickeln.
Gut, kommen wir zurück zur Präsentation.
Hier haben wir also die Kommandozeilenversion von CD, und die ist sehr praktisch.
Wenn Sie die Kompilierung von Android-Apps beherrschen wollen, können wir damit
eine Reihe von Anwendungen in g x laden und automatisch dekompilieren.
Dieser Ansatz würde folgendermaßen aussehen.
Wenn Sie z.B. eine API benutzen oder viele Apks geholt haben, dann können wir
CD X benutzen, um sie zu dekompilieren und in einzelnen Verzeichnissen zu speichern.
Und danach können wir es durchstöbern.
Und zum Beispiel die Suche im Android-Manifest nach exportierten
Inhaltsanbietern oder exportierten Aktivitäten, statischen Schlüsseln, API-Endpunkten und dergleichen.
Und um diesen ganzen Prozess zu automatisieren, können Sie find verwenden, das in diesem Befehl oben gezeigt wird.
Sie können also mit find diesen Namen verwenden, um alle Apks auf Ihrem System oder in diesem Verzeichnis zu finden.
Und dann können Sie x, Ei CD X und Sie können diese Klammern, die der
APK-Name ist, und dann einfach ein Ausgabeverzeichnis und sie kompilieren sie alle in diesem Ausgabeverzeichnis.
Ich zeige Ihnen das mal ganz kurz, weil das eine super nette Funktion ist.
In Ordnung, hier sind wir wieder bei unserer Ubuntu VM und mal sehen, ich habe es vergessen, sorry.
Ich denke, in unserem Download-Verzeichnis.
Ja, wir haben hier ein paar APK-Dateien, und jetzt
erstellen wir ein Ausgabeverzeichnis und verwenden dann dieses Find.
Und was find macht, ist, dass es jetzt alle Apks in diesem Verzeichnis nimmt und auch tiefer in
diese Verzeichnisse geht, um diese Apks zu finden und sie in dieses alte Verzeichnis hier zu kompilieren.
Ja.
Und jetzt sind wir fertig.
Werfen wir einen Blick in das Ausgabeverzeichnis.
Und hier haben wir nun alle diese Quelldateien.
Ja.
Wir können nun diese Dateien durchsuchen und nach Schwachstellen oder anderen Dingen suchen.
Dann haben wir den Ausschluss, der für eine einzelne Anwendungsdatei verwendet werden kann, und schließlich
haben wir die kompilierten Ressourcen und auch die kompilierten Quelldateien, die hier gezeigt werden.
Schließlich gibt er einen Überblick über die wichtigsten Parameter, aber darüber haben wir bereits gesprochen.
Also gut.
Und schließlich, ja, der Kampf zwischen Shady Gooey und Shady Gooey.
In diesem Fall ist es mehr wie Text zu chatten und dann
shady gooey, weil shady goo ist nicht dekompilieren in dieser Anwendung.
Aber hier auf der linken Seite können wir sehen, okay, Schatten x verblasst meiner Meinung nach ein bisschen häufiger als
Dexter Zeichen und deshalb verwende ich gerne Text zu Zeichen mehr als Schatten x, aber das ist meine persönliche Vorliebe.
Im Falle von Text zu Entwürfen können Sie es natürlich mit schattigen Ausschlüssen ausprobieren
und sehen, ob dies besser funktioniert, und anschließend können Sie die Ergebnisse zusammenführen.
Und ja und ja, vielleicht haben Sie dort einen vollständigeren Java-Quellcode.
Also gut.
Das ist alles für den Moment.
Ich freue mich darauf, Sie in der nächsten Sektion zu sehen, in der Sie Ihre Aufgabe hier übernehmen werden.
Reverse Engineering dieser Anwendung.