Wie öffne ich APK und wie bearbeite ich es? Verwenden von apktool Ein Programm zum Zerlegen und Zusammenstellen einer APK-Datei

Manchmal passen einige Anwendungen auf Android in irgendeiner Weise nicht zum Benutzer. Ein Beispiel ist aufdringliche Werbung. Und es kommt auch vor, dass das Programm für alle gut ist, aber die Übersetzung darin entweder schief ist oder ganz fehlt. Oder das Programm ist beispielsweise eine Testversion, es gibt jedoch keine Möglichkeit, die Vollversion zu erhalten. Wie kann man die Situation ändern?

Einführung

In diesem Artikel werden wir darüber sprechen, wie man ein APK-Paket mit einer Anwendung zerlegt, seine interne Struktur betrachtet, den Bytecode zerlegt und dekompiliert und auch versucht, verschiedene Änderungen an den Anwendungen vorzunehmen, die uns den einen oder anderen Vorteil bringen können.

Um das alles selbst zu erledigen, benötigen Sie mindestens Grundkenntnisse der Java-Sprache, in der Android-Anwendungen geschrieben werden, und der XML-Sprache, die überall in Android verwendet wird – von der Beschreibung der Anwendung selbst und ihrer Zugriffsrechte bis hin zur Speicherung von Zeichenfolgen wird auf dem Bildschirm angezeigt. Sie benötigen außerdem die Fähigkeit, spezielle Konsolensoftware zu verwenden.

Was ist also ein APK-Paket, in dem absolut die gesamte Android-Software verteilt ist?

Dekompilierung der Anwendung

In diesem Artikel haben wir nur mit disassembliertem Anwendungscode gearbeitet, aber wenn größere Änderungen an großen Anwendungen vorgenommen werden, wird das Verständnis des Smali-Codes viel schwieriger. Glücklicherweise können wir den Dex-Code in Java-Code dekompilieren, der zwar nicht original ist und nicht zurückkompiliert wird, aber viel einfacher zu lesen und die Logik der Anwendung zu verstehen ist. Dazu benötigen wir zwei Werkzeuge:

  • dex2jar ist ein Übersetzer von Dalvik-Bytecode in JVM-Bytecode, auf dessen Grundlage wir Code in der Java-Sprache erhalten können;
  • jd-gui ist selbst ein Dekompiler, der es Ihnen ermöglicht, lesbaren Java-Code aus JVM-Bytecode zu erhalten. Alternativ können Sie Jad (www.varaneckas.com/jad) verwenden. Obwohl es ziemlich alt ist, generiert es in einigen Fällen besser lesbaren Code als JD-GUI.

So sollten sie genutzt werden. Zuerst starten wir dex2jar und geben als Argument den Pfad zum APK-Paket an:

% dex2jar.sh mail.apk

Dadurch erscheint im aktuellen Verzeichnis das Java-Paket mail.jar, das bereits in jd-gui geöffnet werden kann, um den Java-Code anzuzeigen.

Zusammenstellung und Empfang von APK-Paketen

Ein Android-App-Paket ist im Wesentlichen eine normale ZIP-Datei, für deren Anzeige oder Extrahierung keine speziellen Tools erforderlich sind. Es reicht aus, einen Archivierer zu haben – 7zip für Windows oder die Konsole zum Entpacken unter Linux. Aber das ist schon die Hülle. Was ist da drin? Im Allgemeinen haben wir die folgende Struktur im Inneren:

  • META-INF/- enthält ein digitales Zertifikat der Anwendung, das ihren Ersteller identifiziert, sowie Prüfsummen der Paketdateien;
  • res/ – verschiedene Ressourcen, die die Anwendung bei ihrer Arbeit verwendet, wie z. B. Bilder, deklarative Beschreibung der Schnittstelle sowie andere Daten;
  • AndroidManifest.xml- Beschreibung der Anwendung. Dazu gehört beispielsweise eine Liste der erforderlichen Berechtigungen, der erforderlichen Android-Version und der erforderlichen Bildschirmauflösung;
  • class.dex- kompilierter Anwendungsbytecode für die virtuelle Dalvik-Maschine;
  • resources.arsc- ebenfalls Ressourcen, aber anderer Art - insbesondere Strings (ja, diese Datei kann zur Russifizierung verwendet werden!).

Die aufgelisteten Dateien und Verzeichnisse befinden sich, wenn nicht in allen, dann vielleicht in der überwiegenden Mehrheit der APKs. Es gibt jedoch noch ein paar weitere nicht so häufige Dateien/Verzeichnisse, die es wert sind, erwähnt zu werden:

  • Vermögenswerte- Analogon von Ressourcen. Der Hauptunterschied besteht darin, dass Sie für den Zugriff auf eine Ressource deren Kennung kennen müssen. Die Liste der Assets kann jedoch dynamisch mithilfe der Methode AssetManager.list() im Anwendungscode abgerufen werden.
  • lib- Native Linux-Bibliotheken, die mit NDK (Native Development Kit) geschrieben wurden.

Dieses Verzeichnis wird von Spieleherstellern verwendet, die dort ihre in C/C++ geschriebenen Spiel-Engines ablegen, sowie von Entwicklern von Hochleistungsanwendungen (z. B. Google Chrome). Wir haben das Gerät herausgefunden. Aber wie erhalten Sie die Paketdatei der Anwendung, an der Sie interessiert sind? Da es ohne Root nicht möglich ist, APK-Dateien vom Gerät abzurufen (sie befinden sich im Verzeichnis /data/app) und Rooten nicht immer ratsam ist, gibt es mindestens drei Möglichkeiten, die Anwendungsdatei auf Ihren Computer zu übertragen:

  • APK-Downloader-Erweiterung für Chrome;
  • Echte APK-Leecher-App;
  • verschiedene File-Hosting- und Varezniks.

Welches man verwendet, ist Geschmackssache; Wir bevorzugen die Verwendung separater Anwendungen und beschreiben daher die Verwendung von Real APK Leecher, insbesondere da es in Java geschrieben ist und dementsprechend sowohl unter Windows als auch unter Nix funktioniert.

Nach dem Start des Programms müssen Sie drei Felder ausfüllen: E-Mail, Passwort und Geräte-ID – und eine Sprache auswählen. Die ersten beiden sind die E-Mail-Adresse und das Passwort Ihres Google-Kontos, das Sie auf dem Gerät verwenden. Der dritte ist die Gerätekennung und kann durch Eingabe des Codes auf dem Wählgerät abgerufen werden # #8255## und dann die Geräte-ID-Zeile finden. Beim Ausfüllen müssen Sie lediglich die ID ohne das Android-Präfix eingeben.

Nach dem Ausfüllen und Speichern erscheint häufig die Meldung „Fehler beim Herstellen einer Verbindung zum Server“. Es hat nichts mit Google Play zu tun, also ignorieren Sie es ruhig und suchen Sie nach Paketen, die Sie interessieren.

Anzeigen und Ändern

Nehmen wir an, Sie haben ein Paket gefunden, das Sie interessiert, haben es heruntergeladen, entpackt ... und als Sie versucht haben, eine XML-Datei anzuzeigen, waren Sie überrascht, dass es sich bei der Datei nicht um Text handelte. Wie dekompiliert man es und wie arbeitet man mit Paketen im Allgemeinen? Ist es wirklich notwendig, das SDK zu installieren? Nein, es ist überhaupt nicht notwendig, das SDK zu installieren. Tatsächlich erfordern alle Schritte zum Extrahieren, Ändern und Verpacken von APK-Paketen die folgenden Tools:

  • ZIP-Archiver zum Aus- und Einpacken;
  • klein- Bytecode-Assembler/Disassembler für die virtuelle Dalvik-Maschine (code.google.com/p/smali);
  • aapt- ein Tool zum Packen von Ressourcen (standardmäßig werden Ressourcen in binärer Form gespeichert, um die Anwendungsleistung zu optimieren). Im Android SDK enthalten, kann aber separat erworben werden;
  • Unterzeichner- ein Tool zum digitalen Signieren eines geänderten Pakets (bit.ly/Rmrv4M).

Sie können alle diese Tools separat verwenden, dies ist jedoch unpraktisch. Daher ist es besser, auf ihnen basierende Software auf höherer Ebene zu verwenden. Wenn Sie Linux oder Mac OS X verwenden, gibt es ein Tool namens apktool. Es ermöglicht Ihnen, Ressourcen in ihrer ursprünglichen Form zu entpacken (einschließlich binärer XML- und ASC-Dateien) und ein Paket mit geänderten Ressourcen neu zu erstellen. Es weiß jedoch nicht, wie Pakete signiert werden, sodass Sie das Signer-Dienstprogramm manuell ausführen müssen. Obwohl das Dienstprogramm in Java geschrieben ist, ist seine Installation ziemlich ungewöhnlich. Zuerst müssen Sie die JAR-Datei selbst abrufen:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ export PATH=~/bin:$PATH

Wenn Sie unter Windows arbeiten, gibt es dafür ein hervorragendes Tool namens Virtuous Ten Studio, das auch alle diese Tools (einschließlich apktool selbst) bündelt, dem Benutzer jedoch anstelle einer CLI-Schnittstelle eine intuitive grafische Oberfläche bietet, mit der Sie können Führen Sie Vorgänge zum Entpacken, Disassemblieren und Dekompilieren mit wenigen Klicks aus. Dieses Tool ist Donation-ware, d. h. manchmal erscheinen Fenster, in denen Sie aufgefordert werden, eine Lizenz zu erwerben, aber am Ende kann dies toleriert werden. Es hat keinen Sinn, es zu beschreiben, da Sie die Benutzeroberfläche in wenigen Minuten verstehen können. Aber apktool sollte aufgrund seines Konsolencharakters ausführlicher besprochen werden.


Schauen wir uns die Apktool-Optionen an. Kurz gesagt, es gibt drei grundlegende Befehle: d (Dekodieren), b (Build) und if (Framework installieren). Wenn mit den ersten beiden Befehlen alles klar ist, was macht dann die dritte, bedingte Anweisung? Es entpackt das angegebene UI-Framework, was in Fällen erforderlich ist, in denen Sie ein Systempaket zerlegen.

Schauen wir uns die interessantesten Optionen des ersten Befehls an:

  • -S- Dex-Dateien nicht disassemblieren;
  • -R- Ressourcen nicht auspacken;
  • -B- Fügen Sie keine Debugging-Informationen in die Ergebnisse der Disassemblierung der Dex-Datei ein.
  • --frame-pfad- Verwenden Sie das angegebene UI-Framework anstelle des in apktool integrierten. Schauen wir uns nun einige Optionen für den b-Befehl an:
  • -F- Zwangsmontage ohne Überprüfung der Änderungen;
  • -A- Geben Sie den Pfad zu aapt (einem Tool zum Erstellen eines APK-Archivs) an, wenn Sie es aus irgendeinem Grund von einer anderen Quelle verwenden möchten.

Die Verwendung von apktool ist sehr einfach. Geben Sie dazu einfach einen der Befehle und den Pfad zum APK an, zum Beispiel:

$ apktool d mail.apk

Danach erscheinen alle extrahierten und disassemblierten Dateien des Pakets im Mail-Verzeichnis.

Vorbereitung. Werbung deaktivieren

Die Theorie ist natürlich gut, aber warum ist sie nötig, wenn wir nicht wissen, was wir mit dem ausgepackten Paket machen sollen? Versuchen wir, die Theorie zu unserem Vorteil anzuwenden, nämlich eine Software so zu modifizieren, dass sie uns keine Werbung anzeigt. Lassen Sie es zum Beispiel Virtual Torch sein – eine virtuelle Fackel. Für uns ist diese Software ideal, denn sie ist vollgestopft mit lästiger Werbung und zudem einfach genug, um sich nicht im Code-Dschungel zu verlieren.


Laden Sie die Anwendung also mit einer der oben genannten Methoden vom Markt herunter. Wenn Sie sich für die Verwendung von Virtuous Ten Studio entscheiden, öffnen Sie einfach die APK-Datei in der Anwendung und entpacken Sie sie, erstellen Sie ein Projekt (Datei -> Neues Projekt) und wählen Sie dann Datei importieren im Projektkontextmenü. Wenn Sie sich für apktool entschieden haben, führen Sie einfach einen Befehl aus:

$ apktool d com.kauf.particle.virtualtorch.apk

Danach erscheint im Verzeichnis com.kauf.particle.virtualtorch ein Dateibaum ähnlich dem im vorherigen Abschnitt beschriebenen, jedoch mit einem zusätzlichen Smali-Verzeichnis anstelle von Dex-Dateien und einer Datei apktool.yml. Der erste enthält zerlegten Code der ausführbaren Dex-Datei der Anwendung, der zweite enthält Serviceinformationen, die apktool benötigt, um das Paket wieder zusammenzusetzen.

Der erste Ort, an dem wir suchen sollten, ist natürlich AndroidManifest.xml. Und hier stoßen wir sofort auf folgende Zeile:

Es ist nicht schwer zu erraten, dass es dafür verantwortlich ist, der Anwendung Berechtigungen zur Nutzung der Internetverbindung zu erteilen. Wenn wir nur die Werbung loswerden wollen, müssen wir höchstwahrscheinlich nur die Anwendung aus dem Internet blockieren. Versuchen wir es. Wir löschen die angegebene Zeile und versuchen, die Software mit apktool zu erstellen:

$ apktool b com.kauf.particle.virtualtorch

Die resultierende APK-Datei erscheint im Verzeichnis com.kauf.particle.virtualtorch/build/. Es wird jedoch nicht möglich sein, es zu installieren, da es weder über eine digitale Signatur noch über Dateiprüfsummen verfügt (es verfügt lediglich über kein META-INF/-Verzeichnis). Wir müssen das Paket mit dem Dienstprogramm apk-signer signieren. Gestartet. Die Benutzeroberfläche besteht aus zwei Registerkarten – auf der ersten (Key Generator) erstellen wir Schlüssel, auf der zweiten (APK Signer) signieren wir. Um unseren privaten Schlüssel zu erstellen, füllen Sie die folgenden Felder aus:

  • Zieldatei- Keystore-Ausgabedatei; es speichert normalerweise ein Schlüsselpaar;
  • Passwort Und Bestätigen- Passwort für die Speicherung;
  • Alias- Name des Schlüssels im Speicher;
  • Alias-Passwort Und Bestätigen- Geheimschlüssel-Passwort;
  • Gültigkeit- Gültigkeitsdauer (in Jahren). Der Standardwert ist optimal.

Die übrigen Felder sind grundsätzlich optional – mindestens eines muss jedoch ausgefüllt werden.


WARNUNG

Um eine Anwendung mit apk-signer zu signieren, müssen Sie das Android SDK installieren und in den Anwendungseinstellungen den vollständigen Pfad dazu angeben.

Alle Informationen dienen ausschließlich Informationszwecken. Weder die Herausgeber noch der Autor sind für mögliche Schäden verantwortlich, die durch die Materialien dieses Artikels verursacht werden.

Jetzt können Sie die APK mit diesem Schlüssel signieren. Wählen Sie auf der Registerkarte „APK Signer“ die neu generierte Datei aus, geben Sie das Passwort, den Schlüsselalias und das Passwort ein, suchen Sie dann die APK-Datei und klicken Sie mutig auf die Schaltfläche „Signieren“. Wenn alles gut geht, wird das Paket signiert.

DIE INFO

Da wir das Paket mit unserem eigenen Schlüssel signiert haben, kommt es zu Konflikten mit der Originalanwendung. Wenn wir also versuchen, die Software über den Markt zu aktualisieren, erhalten wir eine Fehlermeldung.

Eine digitale Signatur ist nur für Software von Drittanbietern erforderlich. Wenn Sie also installierte Systemanwendungen ändern, indem Sie sie in das Verzeichnis /system/app/ kopieren, müssen Sie sie nicht signieren.

Laden Sie anschließend das Paket auf Ihr Smartphone herunter, installieren Sie es und starten Sie es. Voila, die Anzeige ist weg! Stattdessen erschien jedoch die Meldung, dass wir kein Internet haben oder nicht über die entsprechenden Berechtigungen verfügen. Theoretisch könnte das ausreichen, aber die Meldung sieht nervig aus, und um ehrlich zu sein, hatten wir einfach Glück mit einer dummen Anwendung. Normalerweise klärt geschriebene Software höchstwahrscheinlich ihre Anmeldeinformationen oder prüft, ob eine Internetverbindung besteht, und verweigert andernfalls einfach den Start. Wie soll es in diesem Fall sein? Bearbeiten Sie natürlich den Code.

Typischerweise erstellen Anwendungsautoren spezielle Klassen zum Anzeigen von Werbung und rufen Methoden dieser Klassen auf, wenn die Anwendung oder eine ihrer „Aktivitäten“ (einfach ausgedrückt: Anwendungsbildschirme) gestartet wird. Versuchen wir, diese Klassen zu finden. Wir gehen in das smali-Verzeichnis, dann com (org enthält nur die offene Grafikbibliothek cocos2d), dann kauf (hier ist es, weil dies der Name des Entwicklers ist und sein gesamter Code dort ist) – und hier ist es, das Marketingverzeichnis. Darin finden wir eine Reihe von Dateien mit der Erweiterung smali. Dabei handelt es sich um Klassen, und die bemerkenswerteste unter ihnen ist die Klasse Ad.smali, aus deren Namen man leicht erraten kann, dass es sich um die Klasse handelt, die Werbung anzeigt.

Wir könnten die Logik seiner Funktionsweise ändern, aber es wäre viel einfacher, Aufrufe einer seiner Methoden einfach aus der Anwendung selbst zu entfernen. Daher verlassen wir das Marketingverzeichnis und gehen zum angrenzenden Partikelverzeichnis und dann zu Virtualtorch. Besondere Aufmerksamkeit verdient hier die Datei MainActivity.smali. Dabei handelt es sich um eine Standard-Android-Klasse, die vom Android SDK erstellt und als Einstiegspunkt in die Anwendung installiert wird (analog zur Hauptfunktion in C). Öffnen Sie die Datei zum Bearbeiten.

Darin befindet sich Smali-Code (lokaler Assembler). Es ist ziemlich verwirrend und aufgrund seines Low-Level-Charakters schwer zu lesen, daher werden wir es nicht studieren, sondern einfach alle Verweise auf die Ad-Klasse im Code finden und sie auskommentieren. Wir geben in der Suche die Zeile „Anzeige“ ein und gelangen zu Zeile 25:

Feld Privatanzeige:Lcom/kauf/marketing/Ad;

Hier wird ein Anzeigenfeld erstellt, um ein Anzeigenklassenobjekt zu speichern. Wir kommentieren, indem wir ein ###-Zeichen vor die Zeile setzen. Wir setzen die Suche fort. Zeile 423:

Neuinstanz v3, Lcom/kauf/marketing/Ad;

Hier erfolgt die Objekterstellung. Kommentieren wir. Wir setzen die Suche fort und finden in den Zeilen 433, 435, 466, 468, 738, 740, 800 und 802 Aufrufe von Methoden der Ad-Klasse. Kommentieren wir. Sieht so aus, als wäre es das. Speichern. Nun muss die Verpackung wieder zusammengesetzt und auf Funktionalität und das Vorhandensein von Werbung überprüft werden. Für die Reinheit des Experiments geben wir die aus AndroidManifest.xml entfernte Zeile zurück, stellen das Paket zusammen, signieren es und installieren es.

Unser Meerschweinchen. Werbung sichtbar

Hoppla! Die Werbung verschwand nur, während die Anwendung lief, blieb aber im Hauptmenü, das wir sehen, wenn wir die Software starten. Also, warten Sie, aber der Einstiegspunkt ist die MainActivity-Klasse, und die Werbung verschwand, während die Anwendung ausgeführt wurde, blieb aber im Hauptmenü, also ist der Einstiegspunkt ein anderer? Um den wahren Einstiegspunkt zu identifizieren, öffnen Sie die Datei AndroidManifest.xml erneut. Und ja, es enthält die folgenden Zeilen:

Sie sagen uns (und, was noch wichtiger ist, dem Android), dass eine Aktivität namens Start als Reaktion auf die Generierung einer Absicht (Ereignis) android.intent.action.MAIN aus der Kategorie android.intent.category.LAUNCHER gestartet werden soll. Dieses Ereignis wird generiert, wenn Sie im Launcher auf das Anwendungssymbol tippen, und bestimmt somit den Einstiegspunkt, nämlich die Startklasse. Höchstwahrscheinlich hat der Programmierer zunächst eine Anwendung ohne Hauptmenü geschrieben, deren Einstiegspunkt die Standardklasse MainActivity war, und dann ein neues Fenster (Aktivität) hinzugefügt, das das Menü enthält und in der Startklasse beschrieben wird, und es manuell zum Eintrag gemacht Punkt.

Öffnen Sie die Datei Start.smali und suchen Sie erneut nach der Zeile „Ad“. In den Zeilen 153 und 155 finden wir eine Erwähnung der FirstAd-Klasse. Es befindet sich auch im Quellcode und ist, dem Namen nach zu urteilen, für die Anzeige von Anzeigen auf dem Hauptbildschirm verantwortlich. Schauen wir weiter, es gibt die Erstellung einer Instanz der FirstAd-Klasse und einer Absicht, die sich je nach Kontext auf diese Instanz bezieht, und dann das Label cond_10, dessen bedingter Übergang genau vor der Erstellung einer Instanz ausgeführt wird der Klasse:

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

Höchstwahrscheinlich berechnet das Programm zufällig, ob Werbung auf dem Hauptbildschirm angezeigt werden soll, und springt, wenn nicht, direkt zu cond_10. Ok, vereinfachen wir ihre Aufgabe und ersetzen den bedingten Übergang durch einen unbedingten:

#if-ne p1, v0, :cond_10 goto:cond_10

Da FirstAd im Code nicht mehr erwähnt wird, schließen wir die Datei und setzen unsere virtuelle Taschenlampe mit apktool wieder zusammen. Kopieren Sie es auf Ihr Smartphone, installieren Sie es und starten Sie es. Voila, alle Werbung ist verschwunden, wozu wir uns allen gratulieren.

Ergebnisse

Dieser Artikel ist nur eine kurze Einführung in die Methoden zum Hacken und Ändern von Android-Anwendungen. Viele Probleme blieben im Verborgenen, etwa das Entfernen des Schutzes, das Parsen von verschleiertem Code, das Übersetzen und Ersetzen von Anwendungsressourcen sowie das Ändern von Anwendungen, die mit dem Android NDK geschrieben wurden. Mit Grundkenntnissen ist es jedoch nur eine Frage der Zeit, alles herauszufinden.

In diesem Artikel erfahren Sie, woraus die Android-Anwendung besteht, wie Sie eine APK-Datei öffnen und mit welchen Programmen.

Was ist eine APK-Datei?

APK ist ein Format des Android-Betriebssystems, das für archivierte ausführbare Anwendungsdateien verwendet wird. Der Name der Datei selbst kann beliebig sein, die Erweiterung sollte jedoch nur wie folgt aussehen: this.apk. APK-Analoga in anderen Betriebssystemen sind .msi in Windows, .sis in Symbian, .rpm oder .deb in Linux.

Mal sehen, was drin ist
Tatsächlich handelt es sich bei .apk um ein ZIP-Archiv, sodass Sie das interne Gerät mit jedem Dateimanager oder Archivierungsprogramm anzeigen können, beispielsweise WinRAR oder der mobilen Anwendung X-plore.




Beachten Sie, dass die Bearbeitungsmöglichkeiten für interne Ressourcen nur äußerst begrenzt sind.

Schauen wir uns die Struktur an
In der APK-Datei sehen wir eine Reihe von Dateien und Ordnern. Lassen Sie uns herausfinden, wozu sie dienen:

  • AndroidManifest.xml ist eine Art „Pass“ der Anwendung, aus dem Sie alle wichtigen Punkte, Anforderungen, Version, Berechtigungen usw. erfahren können.
  • META-INF Diese Datei enthält Metadaten, also Daten über Daten, Prüfsummen, Pfade zu Daten, Pfade und Prüfsummen von Ressourcen, Zertifikate. Sie können diese Datei mit jedem Texteditor öffnen, es wird jedoch empfohlen, Notepad++ zu verwenden.
  • Der res-Ordner enthält alle Programmressourcen, Grafiken wie Symbole, Bilder, Text und grafische Oberflächenelemente. Sie können auch problemlos auf den Ordner zugreifen.
  • „classes.dex“ ist der direkte Anwendungsprogrammcode, der von der virtuellen Maschine Dalvik VM ausgeführt wird. Sie können sehen, was in dieser Datei enthalten ist, indem Sie die .apk-Datei dekompilieren. Darüber werden wir in anderen Artikeln sprechen. resources.arsc – kompilierte XML-Datei. Diese Datei enthält Daten über alle am Programm beteiligten Ressourcen.
  • lib – ein Ordner mit nativen Bibliotheken, auf deren Ressourcen nur mit speziellen Programmen zugegriffen werden kann. Auch in der APK gibt es möglicherweise Dateien und Ordner wie com, org, udk, aber nicht immer.

Schauen wir uns nun den internen Aufbau genauer an; dazu benötigen wir ein Dekompilierungsprogramm, Java und eine APK-Datei. Das Hauptwerkzeug zum Zerlegen von .apk ist Apktool, aber dieses Programm funktioniert nur über die Zeile, was nicht sehr praktisch ist. Für eine schnellere und bequemere Analyse können Sie APKing verwenden. Dies ist immer noch dasselbe Apktool, jedoch mit der Möglichkeit, über das Kontextmenü zu arbeiten.


Und so installieren wir APKing wie jede Anwendung für Windows und klicken, nachdem wir .apk ausgewählt haben, mit der rechten Maustaste und gleichzeitig der Umschalttaste darauf, woraufhin wir Folgendes sehen:



Und wählen Sie die gewünschte Aktion aus, zum Beispiel vollständig dekompilieren, dann schließt das Programm den Vorgang ab und erstellt einen Ordner mit demselben Namen.



Durch Öffnen des Ordners haben wir Zugriff auf alle Ressourcen der APK-Datei.



Jetzt können alle Textdateien bearbeitet werden. Unter Beachtung der Grundregeln können Sie beispielsweise das beliebte Programm Notepad++ verwenden, z. B. AndroidManifest.xml

Ich habe die SmartAPKTool-Anwendung erwähnt. Es kann geänderte APK-Dateien extrahieren, komprimieren und signieren. Sein Vorteil ist das Vorhandensein einer grafischen Oberfläche. Es gibt jedoch einen gravierenden Nachteil. SmartAPKTool wurde schon lange nicht mehr aktualisiert und das Programm entpackt und packt Anwendungen für die neuesten Android-Versionen nicht korrekt. Daher werde ich hier versuchen zu erklären, wie die Anwendung für diese Zwecke verwendet wird apktool.

Anmerkung 1.
Das SmartAPKTool-Programm lässt sich weiterhin bequem zum Signieren gesammelter APK-Dateien verwenden.
Anmerkung 2.
Links zu den im Artikel erwähnten Programmen sind ↓

Programm apktool verfügt über keine grafische Oberfläche. Dies ist ein Nachteil für diejenigen, die es nicht gewohnt sind, mit der Befehlszeile zu arbeiten. Aber es gibt auch ein Plus: Im Gegensatz zu SmartAPKTool sehen wir alle Fehler und wissen, was wir beheben müssen.

Laden wir zwei Archive herunter: eines für alle Systeme, das andere für unser System (im Beispiel Windows):

Entpacken wir beide Archive in denselben leeren Ordner (in unserem Beispiel C:\apktool\). Der Inhalt sollte so aussehen:

Ab sofort können wir das Programm nutzen apktool.

Notiz 3.
Benutzer von 64-Bit-Versionen von Linux müssen das Paket ia32-libs installieren:

sudo apt-get install ia32-libs

Im selben Ordner legen wir die Datei ab, die wir entpacken müssen. Lassen Sie es beispielsweise orig.apk heißen
Halten Sie die Umschalttaste gedrückt und klicken Sie mit der rechten Maustaste auf eine beliebige leere Stelle im Ordner (klicken Sie nicht auf Dateien!). Wählen Sie anschließend „Befehlsfenster öffnen“. Geben Sie in der angezeigten Konsole Folgendes ein:

apktool dekodieren orig.apk

Die Datei wird entpackt:

Jetzt haben wir einen Ordner mit der entpackten Anwendung im Verzeichnis C:\apktool\. Der Name entspricht dem der Quelldatei, jedoch mit der Erweiterung: C:\apktool\orig\ . Wir können die Quelldateien ändern, wie im Artikel Android: So installieren Sie zwei identische Anwendungen auf einem Telefon beschrieben. Nachdem wir die Änderungen vorgenommen haben, erstellen wir eine Kopie der Anwendung, indem wir die Quelldateien in eine APK packen:

apktool build orig result.apk

Hier ist „result.apk“ der Dateiname, den wir für den Kopieraufbau erstellt haben. Wenn keine Fehler vorliegen, wird die Datei zusammengestellt:

Der Rest würde den Rahmen des Artikels sprengen:

  1. Treten bei der Montage Fehler auf, gilt es deren Ursache zu finden und zu beheben.
  2. Es bleibt nur noch, die resultierende Datei result.apk zu signieren. Dies kann wie oben erwähnt mit SmartAPKTool erfolgen; Alles daran ist intuitiv. Es gibt auch andere Möglichkeiten, eine APK-Datei zu signieren.
  3. Auch bei der Installation einer Kopie, beim Start oder Betrieb können Fehler auftreten. Sie müssen mit dem im Android SDK enthaltenen adb-Dienstprogramm abgefangen werden.

Sie müssen die Anwendung signieren, andernfalls wird sie nicht installiert. Fehler kommen nicht so häufig vor und die häufigsten Probleme, die sie verursachen, werden im Artikel beschrieben

Bei der Verwendung verschiedener Firmware für Android-Geräte ist es manchmal erforderlich, die im Betriebssystem integrierten Systemanwendungen auf die eine oder andere Weise zu ändern. In diesem Material werden wir dieses Problem im Detail betrachten.

Natürlich müssen Sie die System-APK-Datei zerlegen und wieder zusammensetzen, damit sie ordnungsgemäß und stabil funktioniert. Lassen Sie uns Schritt für Schritt herausfinden, was dafür getan werden muss.

Zuerst müssen Sie den Prozess der Deodexierung der System-APK-Dateien durchführen. Wie das geht, verraten wir Ihnen in.

Daher wurde die APK-Datei deodexiert und dekompiliert. Lassen Sie uns die Anwendung analysieren, an der wir interessiert sind. Geben Sie ihr zur Verdeutlichung des Beispiels den Namen: Rahmen- res. apk. Wir erinnern uns daran, dass es sich um die ursprüngliche Anwendung handelte.

Nehmen wir an, wir haben alle notwendigen Änderungen an der Anwendung vorgenommen. Wir werden mehr über alle Aspekte von APK-Dateien sprechen. Jetzt müssen Sie es wieder einpacken. Erinnern wir uns an die fertig verpackte Anwendung als modifizierte Anwendung 2.

Jetzt erklären wir, warum es notwendig war, sich die Anwendungen im Geiste als ursprünglich und geändert zu merken. 2. Die mit dem ApkTool-Programm (oder mit einer grafischen Benutzeroberflächenerweiterung wie SmartApkTool) kompilierte Anwendung wird nicht funktionieren, aber das ist kein Problem. Wir führen folgende Aktionen durch:

Solche Dateien wieder in APK zu sammeln ist ganz einfach. Dazu müssen Sie apktool mit dem entsprechenden Build-Flag ausführen und ihm den Pfad zum Ordner mit der dekompilierten Anwendung darin übergeben. Wenn wir beispielsweise einen App-Ordner haben, der sich im selben Verzeichnis wie apktool befindet, würde der Befehl so aussehen:

Hülse

java -jar apktool.jar b app

Java - jar apktool .jar b app

Nach dem Zusammenbau befindet sich die fertige APK-Datei im Verzeichnis App/Build. Als nächstes müssen Sie die APK signieren. Dies geschieht, um sicherzustellen, dass die Anwendung auf Geräten funktioniert, auf denen das Debuggen verboten ist. Das heißt, das Starten nicht signierter Anwendungen auf solchen Geräten ist verboten. Weitere Informationen zu digitalen Zertifikaten und dem Dateisignierungsverfahren finden Sie hier.

Das Signieren einer Datei ist sehr einfach: Dafür gibt es ein spezielles Dienstprogramm namens signapk. Es muss gestartet werden, indem zunächst die Zertifikate als Argumente übergeben werden, dann der Pfad zur Anwendung und schließlich der Pfad für die signierte Anwendung (das Ergebnis, wo sie gespeichert werden soll). Es sieht ungefähr so ​​aus:

Hülse

java -jar signapk.jar testkey.x509.pem testkey.pk8 *.apk apk_signed.apk

Java - jar signapk .jar testkey .x509 .pem testkey .pk8 * .apk apk_signed .apk

Wo kann man so ein Zertifikat bekommen, fragen Sie? Zertifikate finden Sie im Internet. Oder generieren Sie es selbst. Eine ausführliche Anleitung zum Einrichten und Generieren aller notwendigen Dateien finden Sie beispielsweise unter .

Abschluss

Wie Sie sehen, ist das Dekompilieren und Zusammenstellen von APK-Dateien ein recht einfacher Vorgang, der darüber hinaus automatisiert werden kann, was die Arbeit des Forschers erleichtert. Auch die virtuelle Dalvik-Maschine selbst ist leicht zu erlernen und zu öffnen, was einerseits die Eintrittsbarriere für Entwickler verringert, andererseits der Hauptgrund für einen so hohen Prozentsatz an Piraterie auf der Android-Plattform ist. Dies ist zum Teil der Grund, warum Spieleentwickler beispielsweise generell kein Interesse daran haben, interessante Spiele mit Handlung zu veröffentlichen. Angesichts der aktuellen Einstellung der Nutzer ist es viel profitabler, Farmen mit Spenden zu fesseln, die einander auffallend ähnlich sind. Deshalb kaufen wir Anwendungen, unterstützen Entwickler und erhalten dadurch interessante Inhalte. Aber es besteht absolut keine Notwendigkeit zu spenden!

Vielen Dank euch allen, wir sehen uns wieder.