2012-03-30 7 views
2

Es gibt mehrere Tools, die eine APK-Datei dekompilieren und verschiedene Hooks einfügen können. Wenn Sie den Namen des Installationspakets überprüfen möchten, müssen Sie die Funktion PackageManager.getInstallerName() aufrufen.Wie man herausfinden kann, ob eine Methode süchtig geworden ist (= 3rd-Party-Methoden, die als Layer fungieren, um Apps zu knacken)

Nun, soweit es mich betrifft, ersetzen sie die Reflexion der Methode und rufen dann entweder die echte Methode oder senden einige gefälschte Ergebnisse.

Dies hat den großen Vorteil, dass es egal ist, ob Sie die Methode nativ oder mit einer Reflektion aufrufen.

In diesem speziellen Fall würde getInstallerName() immer zurückgeben.

Einige Quellcode für einen solchen Haken ist hier zu finden: http://androidcracking.blogspot.de/2011/03/original-smalihook-java-source.html

Gibt es eine Möglichkeit, diese Haken zu erkennen?

Antwort

0

Sie könnten eine MD5-Summe gegen das laufen lassen, was Sie als Original-APK kennen, und eine vermutete Raubkopie davon, und vergleichen Sie die beiden. Dies garantiert nur, dass die mutmaßlich manipulierte Version geändert wurde, aber wie genau.
Die andere Sache, die Sie wahrscheinlich tun könnten, obwohl ich es selbst nicht versucht habe, aber es sieht vielversprechend aus, ist etwas wie this, wo Sie theoretisch nach Klassennamen wie Smailhook usw. suchen könnten und herausfinden, ob Sie existieren. Diese Ideen sollten Sie zumindest in die richtige Richtung zur Untersuchung bringen, aber sie decken möglicherweise nicht alle Grundlagen ab.

EDIT: Wenn Sie so etwas wie dies zur Laufzeit erreichen wollen (ich war nicht bewusst, würden Sie wollen this-- zu tun haben Sie eine bestimmte Kopie einer App gemeint, die Sie misstrauisch waren, offline) Sie könnten etwas wie die Class.forName() Methode versuchen. Etwas wie diese oder eine andere Klassenlader-Methode sollte helfen, nach Klassen innerhalb der gesuchten .dex-Datei zu suchen, und Sie können eine NoClassDefFoundError fangen, um zu wissen, dass alles in Ordnung ging. Wenn eine Klasse mit dem gesuchten Namen gefunden wird, können Sie damit umgehen, wie Sie es wünschen - beenden Sie das Programm, drücken Sie einen Webservice, der eine Datenbank betrügerischer Apps enthält, usw.

+0

Vielen Dank für Ihre Nachricht Antworten. Offensichtlich ist es unmöglich, die APK zu md5sum (sobald Sie die Summe speichern, ändert sich die Summe), wäre der einzige Weg, den classes.dex zu crc. Auch dex2jar wäre zur Laufzeit zu teuer. Gibt es eine Möglichkeit, einfach nach Klassen der Smali-Klasse zu suchen? Auch würde ich eine allgemeinere Weise brauchen, nicht nur für dieses eine Werkzeug. – Force

+0

Ah, habe nicht verstanden, dass du das zur Laufzeit machen wolltest :) Das ändert die Dinge ziemlich. Ich werde meine Antwort bearbeiten ... – waxspin

+0

Die 'Class.forName()' ist ein guter Ansatz, aber die Klasse ist nicht in den DEX eingefügt, sondern nur den Bytecode geändert. Das heißt, es gibt keine zusätzlichen Methoden. – Force