So analysieren Sie eine APK-Datei. Wir öffnen, modifizieren und packen Android-Anwendungen. Was ist eine APK-Datei?

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

Was ist eine APK-Datei?

APK ist ein Android-Betriebssystemformat, das für archivierte ausführbare Dateianwendungen verwendet wird, und der Name der Datei selbst kann beliebig sein, aber die Erweiterung sollte nur so aussehen .apk. Die Analoga von APK in anderen Betriebssystemen sind in Windows .msi, in Symbian - .sis, in Linux - .rpm oder .deb.

Sehen Sie, was drin ist
Tatsächlich ist .apk ein ZIP-Archiv, sodass Sie das interne Gerät mit einem beliebigen Dateimanager oder Archivierer anzeigen können, z. B. WinRAR oder die mobile X-plore-Anwendung.




Es ist zu beachten, dass Sie nur visuellen Zugriff auf interne Ressourcen erhalten. Die Bearbeitungsoptionen sind äußerst begrenzt.

Betrachten Sie die Struktur
In .apk sehen wir eine Reihe von Dateien und Ordnern. Lassen Sie uns herausfinden, wofür sie gedacht sind:

  • AndroidManifest.xml ist eine Art "Pass" für Anwendungen, mit dem Sie alle wichtigen Punkte, Anforderungen, Versionen, Berechtigungen und mehr herausfinden können.
  • META-INF Diese Datei enthält Metadaten, dh Daten zu Daten, Prüfsummen, Datenpfaden, Ressourcenpfaden und Prüfsummen, Zertifikate. Sie können diese Datei mit jedem Texteditor öffnen, es wird jedoch empfohlen, Notepad ++ zu verwenden.
  • Der Ordner res enthält alle grafischen Programmressourcen wie Symbole, Bilder, Text und grafische Elemente der Benutzeroberfläche. Sie können auch einfach auf den Ordner zugreifen.
  • classes.dex - Der direkte Programmcode der Anwendung, der von der virtuellen Dalvik VM-Maschine ausgeführt wird. Sie können sehen, dass Sie in dieser Datei nur .apk dekompilieren können. Wir werden in anderen Artikeln darüber sprechen. resources.arsc - kompilierte XML-Datei. Diese Datei enthält Daten zu allen am Programm beteiligten Ressourcen.
  • lib - ein Ordner mit nativen Bibliotheken, auf die nur mit speziellen Programmen zugegriffen werden kann. Das APK kann auch Dateien und Ordner wie com, org, udk enthalten, jedoch nicht immer.

Schauen wir uns nun die interne Struktur 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 Leitung, was nicht sehr praktisch ist. Für eine schnellere und bequemere Analyse können Sie APKing verwenden. Dies ist das gleiche Apktool, jedoch mit der Möglichkeit, über das Kontextmenü zu arbeiten.


Und so installieren wir APKing wie jede andere Anwendung für Windows und wählen .apk aus, klicken mit der rechten Maustaste darauf und gleichzeitig Shift. Danach sehen wir Folgendes:



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



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



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

Ich habe die SmartAPKTool App erwähnt. Es kann modifizierte apk-Dateien entpacken, packen und signieren. Sein Vorteil ist das Vorhandensein einer grafischen Oberfläche. Es gibt jedoch auch einen schwerwiegenden Nachteil. SmartAPKTool wurde lange Zeit nicht aktualisiert, und das Programm entpackt und packt Anwendungen für neue Android-Versionen falsch. Daher werde ich hier versuchen zu erklären, wie die Anwendung für diese Zwecke verwendet wird. apktool.

Bemerkung 1.
SmartAPKTool ist weiterhin nützlich zum Signieren der gesammelten apk-Dateien.
Bemerkung 2.
Links zu den im Artikel genannten Programmen sind ↓

Programm apktool hat keine grafische Oberfläche. Dies ist ein Nachteil für diejenigen, die nicht daran gewöhnt sind, mit der Befehlszeile zu arbeiten. Aber es gibt auch ein Plus: Im Gegensatz zu SmartAPKTool werden alle Fehler angezeigt, was bedeutet, dass wir wissen, was zu beheben ist.

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

Entpacken Sie beide Archive in denselben leeren Ordner (in unserem Beispiel C: \\ apktool \\). Der Inhalt sollte folgendermaßen aussehen:

Ab sofort können wir das Programm verwenden apktool.

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

sudo apt-get install ia32-libs

Im selben Ordner legen wir die Datei ab, die wir entpacken müssen. Nennen wir es zum Beispiel orig.apk
Drücken Sie die Umschalttaste und halten Sie sie gedrückt. Klicken Sie mit der rechten Maustaste auf eine leere Stelle im Ordner (klicken Sie nicht auf Dateien!). Wählen Sie danach den Punkt "Befehlsfenster öffnen". Geben Sie in der angezeigten Konsole Folgendes ein:

apktool decode orig.apk

Die Datei wird entpackt:

Jetzt haben wir einen Ordner mit der entpackten Anwendung im Verzeichnis C: \\ apktool \\. Es hat den gleichen Namen wie die Originaldatei, abzüglich der Erweiterung: C: \\ apktool \\ orig \\. Wir können die Quelldateien wie im Android-Artikel beschrieben ändern: So installieren Sie zwei identische Anwendungen auf einem Telefon. Nachdem wir die Änderungen vorgenommen haben, erstellen wir eine Kopie der Anwendung, indem wir die Quelldateien in apk packen:

apktool build orig result.apk

Hier ist result.apk der Dateiname, den wir für den Copy Build erstellt haben. Wenn keine Fehler vorliegen, wird die Datei erstellt:

Der Rest geht über den Rahmen des Artikels hinaus:

  1. Wenn während der Montage Fehler auftreten, müssen Sie deren Ursache finden und beheben.
  2. Die resultierende Datei result.apk muss noch signiert werden. Dies kann wie oben erwähnt mit SmartAPKTool erfolgen. alles darin ist intuitiv. Es gibt auch andere Möglichkeiten, eine APK-Datei zu signieren.
  3. Bei der Installation einer Kopie, beim Starten oder Ausführen können ebenfalls Fehler auftreten. Sie müssen mit dem im Android SDK enthaltenen Dienstprogramm adb abgefangen werden.

Die Anwendung muss signiert werden, da sie sonst nicht installiert wird. Fehler sind nicht so häufig 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 Artikel werden wir dieses Problem ausführlich behandeln.

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 zu tun ist.

Zunächst müssen Sie den Prozess der Deodexierung der System-APK-Dateien durchführen. Wir erklären Ihnen, wie das geht.

Daher wurde die APK-Datei deodexiert und dekompiliert. Wir zerlegen die für uns interessante Anwendung, lassen sie zur Verdeutlichung des Beispiels einen Namen tragen, rahmen- res. apk... Wir erinnern uns in unserem Kopf als Originalanwendung.

Angenommen, wir haben alle erforderlichen Änderungen an der Anwendung vorgenommen. Wir werden mehr über alle Aspekte von APKs in sprechen. Jetzt müssen Sie es zurückpacken. Erinnern wir uns an die fertige verpackte Anwendung als modifizierte Anwendung 2.

Jetzt werden wir erklären, warum es notwendig war, Anwendungen mental als original und modifiziert zu speichern. 2. Die von ApkTool erstellte Anwendung (oder die Verwendung einer grafischen Benutzeroberflächenerweiterung wie SmartApkTool) funktioniert nicht, aber dies ist kein Problem. Wir führen folgende Aktionen durch:

Das Zurücksetzen dieser Dateien in die APK ist einfach genug. Dazu müssen Sie apktool mit dem entsprechenden Build-Flag ausführen und den Pfad an den Ordner mit der dekompilierten Anwendung übergeben. Wenn sich beispielsweise ein App-Ordner im selben Verzeichnis wie apktool befindet, sieht der Befehl folgendermaßen aus:

Schale

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 unterschreiben. Dies geschieht, damit die Anwendung auf Geräten funktioniert, auf denen das Debuggen verboten ist. Das heißt, das Starten von nicht signierten Anwendungen auf solchen Geräten ist verboten. Weitere Informationen zu digitalen Zertifikaten und zum Dateisignieren finden Sie hier.

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

Schale

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 ein solches Zertifikat bekommen? Die Zertifikate finden Sie im Internet. Oder generieren Sie es selbst. Detaillierte Anweisungen zum Einrichten und Generieren aller erforderlichen Dateien finden Sie beispielsweise.

Fazit

Wie Sie sehen können, ist das Dekompilieren und Zusammenstellen von APK-Dateien ein ziemlich einfacher Prozess, der automatisiert werden kann und es dem Forscher erleichtert. Die virtuelle Dalvik-Maschine selbst ist auch leicht zu erlernen und zu öffnen, was einerseits die Eintrittsschwelle für Entwickler senkt und andererseits der Hauptgrund für einen so hohen Prozentsatz an Piraterie auf der Android-Plattform ist. Dies ist teilweise der Grund, warum beispielsweise Entwickler von Spielen im Allgemeinen nicht daran interessiert sind, interessante Spiele mit einer Storyline zu veröffentlichen. Mit der gegenwärtigen Einstellung der Nutzer ist es viel rentabler, auffallend ähnliche Betriebe mit Spenden zu vernieten. Daher kaufen wir Anwendungen, unterstützen Entwickler und erhalten interessante Inhalte. Aber es besteht absolut keine Notwendigkeit zu spenden!

Vielen Dank an alle, bis bald.

Manchmal passen einige Anwendungen auf Android in keiner Weise zum Benutzer. Ein Beispiel sind nervige Anzeigen. Und es passiert auch - jeder ist gut im Programm, aber nur die Übersetzung darin ist entweder schief oder fehlt völlig. Zum Beispiel ist das Programm eine Testversion, aber es ist nicht möglich, die Vollversion zu erhalten. Wie kann die Situation geändert werden?

Einführung

In diesem Artikel werden wir darüber sprechen, wie Sie ein APK-Paket mit einer Anwendung zerlegen, die interne Struktur untersuchen, den Bytecode zerlegen und dekompilieren sowie versuchen, verschiedene Änderungen an Anwendungen vorzunehmen, die uns den einen oder anderen Vorteil bringen können.

Um dies alles selbst zu tun, benötigen Sie mindestens einige Grundkenntnisse der Java-Sprache, in der Android-Anwendungen geschrieben sind, und der XML-Sprache, die überall in Android verwendet wird - von der Beschreibung der Anwendung selbst und ihrer Zugriffsrechte bis zum Speichern der Zeichenfolgen, die auf dem Bildschirm angezeigt werden. Sie müssen auch in der Lage sein, mit spezialisierter Konsolensoftware umzugehen.

Was genau ist das APK-Paket, in dem absolut die gesamte Software für Android verteilt ist?

Anwendungen dekompilieren

In diesem Artikel haben wir nur mit zerlegtem Anwendungscode gearbeitet. Wenn Sie jedoch größere Änderungen an großen Anwendungen vornehmen, ist es viel schwieriger, den Smali-Code zu verstehen. Glücklicherweise können wir den Dex-Code in Java-Code umwandeln, der zwar nicht original und nicht zurückkompiliert ist, aber die Logik der Anwendung viel einfacher zu lesen und zu verstehen ist. Dazu benötigen wir zwei Werkzeuge:

  • dex2jar - Übersetzer des Dalvik-Bytecodes in den JVM-Bytecode, auf dessen Grundlage wir Code in der Java-Sprache erhalten können;
  • jd-gui ist der Dekompiler selbst, mit dem Sie lesbaren Java-Code aus dem JVM-Bytecode abrufen können. 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.

Sie sollten so verwendet werden. Zuerst führen wir dex2jar aus und geben den Pfad zum apk-Paket als Argument an:

% dex2jar.sh mail.apk

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

APK Paket Gerät und bekommen sie

Ein Android-App-Paket ist im Wesentlichen eine normale Zip-Datei, für deren Anzeige und Entpackung keine speziellen Tools erforderlich sind. Es reicht aus, einen Archivierer zu haben - 7zip für Windows oder Konsolenentpackung für Linux. Aber das ist ungefähr die Verpackung. Was ist drin? Im Inneren haben wir im Allgemeinen die folgende Struktur:

  • META-INF / - enthält ein digitales Zertifikat der Anwendung, das den Ersteller bestätigt, und Prüfsummen der Paketdateien;
  • res / - verschiedene Ressourcen, die die Anwendung in ihrer Arbeit verwendet, z. B. Bilder, eine deklarative Beschreibung der Schnittstelle und andere Daten;
  • AndroidManifest.xml - Anwendungsbeschreibung. Dies umfasst beispielsweise eine Liste der erforderlichen Auflösungen, der erforderlichen Android-Version und der erforderlichen Bildschirmauflösung.
  • classes.dex - kompilierter Anwendungsbytecode für die virtuelle Dalvik-Maschine;
  • resources.arsc - auch Ressourcen, aber von anderer Art - insbesondere Zeichenfolgen (ja, diese Datei kann zur Russifizierung verwendet werden!).

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

  • vermögenswerte - Analog zu Ressourcen. Der Hauptunterschied besteht darin, dass Sie für den Zugriff auf ein Asset dessen Kennung kennen müssen, während die Liste der Assets mithilfe der AssetManager.list () -Methode im Anwendungscode dynamisch abgerufen werden kann.
  • lib - Native Linux-Bibliotheken, die mit dem NDK (Native Development Kit) geschrieben wurden.

Dieses Verzeichnis wird von Spieleherstellern verwendet, um eine in C / C ++ geschriebene Spiele-Engine sowie von leistungsstarken Anwendungsherstellern (wie Google Chrome) zu hosten. Das Gerät wurde aussortiert. Aber wie erhalten Sie die eigentliche Paketdatei der gewünschten Anwendung? Da es nicht möglich ist, APK-Dateien ohne root vom Gerät abzurufen (sie befinden sich im Verzeichnis / data / app) und root nicht immer ratsam ist, gibt es mindestens drei Möglichkeiten, die Anwendungsdatei auf den Computer zu übertragen:

  • aPK Downloader-Erweiterung für Chrome;
  • echte APK Leecher Anwendung;
  • verschiedene Filesharing und Warezniki.

Welches zu verwenden ist, ist Geschmackssache; Wir bevorzugen die Verwendung separater Anwendungen, daher werden wir die Verwendung von Real APK Leecher beschreiben, insbesondere da es in Java geschrieben ist und dementsprechend auch unter Windows, sogar 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, die Sie auf Ihrem Gerät verwenden. Die dritte ist die Gerätekennung, die Sie durch Wählen des Codes auf dem Dialer erhalten können # #8255## und dann die Leitung Geräte-ID finden. Beim Ausfüllen müssen Sie nur die ID ohne das Android-Präfix eingeben.

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

Anzeigen und Ändern

Angenommen, Sie haben ein Paket gefunden, an dem Sie interessiert sind, das Sie heruntergeladen oder entpackt haben. Beim Versuch, eine XML-Datei anzuzeigen, stellte ich überrascht fest, dass es sich bei der Datei nicht um Text handelt. Wie dekompiliere ich es und wie arbeite ich mit Paketen im Allgemeinen? Ist es wirklich notwendig, das SDK zu installieren? Nein, Sie müssen das SDK nicht installieren. Für alle Schritte zum Entpacken, Ändern und Verpacken von APK-Paketen sind die folgenden Tools erforderlich:

  • zIP-Archivierer zum Auspacken und Verpacken;
  • smali - Assembler / Disassembler des Bytecodes der virtuellen 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, aber separat erhältlich;
  • 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, eine übergeordnete Software zu verwenden, die auf deren Basis erstellt wurde. Wenn Sie unter Linux oder Mac OS X arbeiten, gibt es ein Tool namens apktool. Sie können Ressourcen in ihrer ursprünglichen Form entpacken (einschließlich binärer XML- und ARSC-Dateien), ein Paket mit geänderten Ressourcen neu erstellen, jedoch keine Pakete signieren, sodass Sie das Signierdienstprogramm manuell ausführen müssen. Trotz der Tatsache, dass das Dienstprogramm in Java geschrieben ist, ist seine Installation eher nicht standardisiert. Zuerst sollten Sie die JAR-Datei selbst erhalten:

$ 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 \u003d ~ / bin: $ PATH

Wenn Sie unter Windows arbeiten, gibt es dafür ein hervorragendes Tool namens Virtual Ten Studio, das auch alle diese Tools (einschließlich Apktool selbst) sammelt. Anstelle der CLI-Oberfläche bietet es dem Benutzer jedoch eine intuitive grafische Oberfläche, mit der Sie Vorgänge ausführen können beim Auspacken, Zerlegen und Zerlegen mit wenigen Klicks. Dieses Tool ist Spendenware, das heißt, manchmal gibt es Windows-Angebote, um eine Lizenz zu erhalten, aber dies kann letztendlich toleriert werden. Es macht keinen Sinn, es zu beschreiben, da Sie die Benutzeroberfläche in wenigen Minuten verstehen können. Apktool sollte jedoch aufgrund seiner Konsolennatur ausführlicher besprochen werden.


Werfen wir einen Blick auf die Apktool-Optionen. Kurz gesagt, es gibt drei Hauptbefehle: d (Dekodieren), b (Erstellen) und if (Framework installieren). Wenn mit den ersten beiden Befehlen alles klar ist, was macht dann der dritte bedingte Operator? Es entpackt das angegebene UI-Framework, das in Fällen benötigt wird, in denen Sie ein Systempaket zerlegen.

Betrachten wir die interessantesten Optionen des ersten Befehls:

  • -s - Dex-Dateien nicht zerlegen;
  • -r - Ressourcen nicht auspacken;
  • -b - Fügen Sie keine Debug-Informationen in die Ergebnisse der Demontage 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 Befehl b an:
  • -f - erzwungene Montage ohne Überprüfung der Änderungen;
  • -ein - Wir geben den Pfad zu aapt an (ein Tool zum Erstellen eines APK-Archivs), wenn Sie ihn aus irgendeinem Grund aus einer anderen Quelle verwenden möchten.

Die Verwendung von apktool ist sehr einfach. Dazu müssen Sie nur einen der Befehle und den Pfad zur APK angeben, zum Beispiel:

$ apktool d mail.apk

Danach werden alle extrahierten und disassemblierten Paketdateien im Mail-Verzeichnis angezeigt.

Präparation. Werbungen ausschalten

Die Theorie ist natürlich gut, aber warum wird sie benötigt, wenn wir nicht wissen, was wir mit dem ausgepackten Paket tun sollen? Versuchen wir, die Theorie zu unserem eigenen Vorteil anzuwenden, indem wir einige Software so modifizieren, dass keine Anzeigen geschaltet werden. Zum Beispiel sei es Virtual Torch - eine virtuelle Fackel. Für uns ist diese Software perfekt, weil sie voller nerviger Anzeigen steckt und außerdem einfach genug ist, um sich nicht im Dschungel des Codes zu verlieren.


Laden Sie die Anwendung mit einer der oben genannten Methoden vom Markt herunter. Wenn Sie sich für Virtuous Ten Studio entscheiden, öffnen Sie einfach die APK-Datei in der Anwendung und entpacken Sie sie. Erstellen Sie ein Projekt (Datei -\u003e Neues Projekt) und wählen Sie dann Datei importieren aus dem Projektkontextmenü. Wenn Ihre Wahl auf apktool fiel, führen Sie einfach einen Befehl aus:

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

Danach wird im Verzeichnis com.kauf.particle.virtualtorch ein Dateibaum ähnlich dem im vorherigen Abschnitt beschriebenen angezeigt, jedoch mit einem zusätzlichen smali-Verzeichnis anstelle von Dex-Dateien und einer apktool.yml-Datei. Der erste enthält den zerlegten Code der ausführbaren Dex-Datei der Anwendung, der zweite enthält die Dienstinformationen, die apktool zum Zurückbauen des Pakets benötigt.

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

Wie Sie vielleicht erraten haben, ist es dafür verantwortlich, der Anwendung die Berechtigung zur Nutzung der Internetverbindung zu erteilen. Wenn wir nur Anzeigen entfernen möchten, müssen wir höchstwahrscheinlich das Internet für die Anwendung deaktivieren. Versuchen wir das mal. Wir löschen die angegebene Zeile und versuchen, die Software mit apktool zu erstellen:

$ apktool b com.kauf.particle.virtualtorch

Die resultierende APK-Datei wird im Verzeichnis com.kauf.particle.virtualtorch / build / angezeigt. Es ist jedoch nicht möglich, es zu installieren, da es keine digitale Signatur und Dateiprüfsummen hat (es hat einfach nicht das META-INF / -Verzeichnis). Wir müssen das Paket mit dem Dienstprogramm apk-signer signieren. Gestartet. Die Oberfläche besteht aus zwei Registerkarten - auf der ersten (Schlüsselgenerator) erstellen wir Schlüssel, auf der zweiten (APK Signer) signieren wir. Füllen Sie die folgenden Felder aus, um unseren privaten Schlüssel zu erstellen:

  • Zieldatei - die Ausgabedatei des Keystores; es enthält normalerweise ein Schlüsselpaar;
  • Passwort und Bestätigen - Passwort für die Speicherung;
  • Alias - den Namen des Schlüssels im Repository;
  • Alias \u200b\u200bPasswort und Bestätigen - Passwort für den geheimen Schlüssel;
  • Gültigkeit - Gültigkeitsdauer (in Jahren). Die Standardeinstellung ist optimal.

Die restlichen Felder sind in der Regel optional - es muss jedoch mindestens eines ausgefüllt werden.


WARNUNG

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

Alle Informationen werden nur zu Informationszwecken bereitgestellt. Weder die Redaktion 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 Kennwort, den Schlüsselalias und das Kennwort ein, suchen Sie die APK-Datei und klicken Sie fett auf die Schaltfläche "Signieren". Wenn alles gut geht, wird das Paket unterschrieben.

DIE INFO

Da wir das Paket mit unserem eigenen Schlüssel signiert haben, besteht ein Konflikt mit der ursprünglichen Anwendung. Wenn wir also versuchen, die Software über den Markt zu aktualisieren, wird eine Fehlermeldung angezeigt.

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.

Danach legen wir das Paket auf einem Smartphone ab, installieren es und starten es. Voila, Werbung ist weg! Stattdessen wurde jedoch die Meldung angezeigt, dass wir nicht über das Internet oder die entsprechenden Berechtigungen verfügen. Theoretisch könnte dies ausreichen, aber die Nachricht sieht nervig aus, und um ehrlich zu sein, hatten wir einfach Glück mit einer dummen App. Eine normalerweise geschriebene Software wird höchstwahrscheinlich ihre Autorität klären oder das Vorhandensein einer Internetverbindung überprüfen und sich ansonsten einfach weigern, zu starten. Wie soll man in diesem Fall sein? Bearbeiten Sie natürlich den Code.

In der Regel erstellen Anwendungsautoren spezielle Klassen für die Anzeige von Anzeigen und Aufrufmethoden dieser Klassen während des Starts der Anwendung oder einer ihrer "Aktivitäten" (um es einfach auszudrücken: Anwendungsbildschirme). Versuchen wir, diese Klassen zu finden. Wir gehen zum smali-Verzeichnis, dann com (org enthält nur die offene Grafikbibliothek cocos2d), dann kauf (genau dort, weil dies der Name des Entwicklers ist und sein gesamter Code dort ist) - und hier ist es das Marketing-Verzeichnis. Im Inneren finden wir eine Reihe von Dateien mit der Erweiterung smali. Dies sind Klassen, und die bemerkenswerteste davon ist die Ad.smali-Klasse, bei deren Namen leicht zu erraten ist, was genau Anzeigen angezeigt werden.

Wir könnten die Logik seiner Operation ändern, aber es wäre viel einfacher, Aufrufe einer seiner Methoden aus der Anwendung selbst zu entfernen. Daher verlassen wir das Marketingverzeichnis und wechseln zum benachbarten Partikelverzeichnis und dann zu virtualtorch. Die Datei MainActivity.smali verdient hier besondere Aufmerksamkeit. Dies ist eine Standard-Android-Klasse, die vom Android SDK erstellt und als Einstiegspunkt für die Anwendung festgelegt wird (analog zur Hauptfunktion in C). Öffnen Sie die Datei zur Bearbeitung.

Im Inneren befindet sich der Smali-Code (lokaler Assembler). Es ist ziemlich verwirrend und aufgrund seiner geringen Qualität schwer zu lesen, daher werden wir es nicht untersuchen, sondern einfach alle Verweise auf die Anzeigenklasse im Code finden und sie auskommentieren. Wir fahren in der Zeile "Anzeige" in der Suche und befinden uns in Zeile 25:

Feld private Anzeige: Lcom / kauf / marketing / Anzeige;

Dadurch wird ein Anzeigenfeld für ein Objekt der Klasse Ad erstellt. Wir kommentieren, indem wir das ### Zeichen vor die Zeile setzen. Wir suchen weiter. Zeile 423:

Neue Instanz v3, Lcom / kauf / marketing / Ad;

Hier wird das Objekt erstellt. Wir kommentieren. Wir suchen und finden in den Zeilen 433, 435, 466, 468, 738, 740, 800 und 802 Aufrufe von Methoden der Anzeigenklasse. Kommentieren. Sieh so aus. Wir sparen. Jetzt müssen Sie das Paket wieder zusammensetzen und die Leistung und das Vorhandensein von Anzeigen überprüfen. Für die Reinheit des Experiments geben wir die aus AndroidManifest.xml gelöschte Zeichenfolge zurück, sammeln das Paket, signieren und installieren es.

Unser Meerschweinchen. Werbung sichtbar

Hoppla! Die Werbung verschwand nur während der Ausführung der Anwendung, blieb jedoch im Hauptmenü, das wir beim Starten der Software sehen. Warten Sie also, aber der Einstiegspunkt ist die MainActivity-Klasse, und die Anzeigen sind verschwunden, während die Anwendung ausgeführt wurde, blieben jedoch im Hauptmenü, sodass der Einstiegspunkt anders ist. Öffnen Sie die Datei AndroidManifest.xml erneut, um den wahren Einstiegspunkt zu ermitteln. Und ja, es hat folgende Zeilen:

Sie teilen uns (und vor allem dem Android) mit, dass eine Aktivität mit dem Namen 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 beim Tippen auf das Anwendungssymbol im Launcher generiert, sodass der Einstiegspunkt definiert wird, nämlich die Start-Klasse. Höchstwahrscheinlich hat der Programmierer zuerst eine Anwendung ohne das Hauptmenü geschrieben, dessen Einstiegspunkt die Standard-MainActivity-Klasse war, und dann ein neues Fenster (Aktivität) hinzugefügt, das das Menü enthält und in der Start-Klasse beschrieben ist, und es manuell zum Einstiegspunkt gemacht.

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

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

Höchstwahrscheinlich berechnet das Programm zufällig, ob Anzeigen auf dem Hauptbildschirm geschaltet werden sollen, und wenn nicht, springt es direkt zu cond_10. Ok, vereinfachen wir ihre Aufgabe und ersetzen den bedingten Sprung durch einen bedingungslosen:

# if-ne p1, v0,: cond_10 gehe zu: cond_10

Der Code enthält keine Verweise mehr auf FirstAd. Schließen Sie daher die Datei und setzen Sie unsere virtuelle Taschenlampe mit apktool wieder zusammen. Auf Smartphone kopieren, installieren, starten. Voila, alle Anzeigen sind verschwunden und wir gratulieren uns allen.

Ergebnis

Dieser Artikel ist nur eine kurze Einführung in die Techniken zum Knacken und Ändern von Android-Anwendungen. Viele Probleme blieben hinter den Kulissen, wie 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, dies alles zu verstehen.