web-dev-qa-db-de.com

Wie mache ich apk sicher? Schutz vor Dekompilierung

Hallo Ich entwickle eine Anwendung für ein Unternehmen, und unsere Anwendung enthält eine SQLLite-Datenbank, die persönliche Informationen enthält, und wir möchten sie schützen. Wie können wir sie schützen. Weil ein Apk leicht dekompiliert werden kann, weil ich es selbst gemacht habe .. Nun also die Frage, wie man einen Apk sichert? und wie ich meine Datenbank im Telefon nach der Installation der App auf dem Telefon schützen kann.

43
Hamdullah shah

Grundsätzlich gibt es 5 Methoden zum Schutz Ihrer APK beim Cracken/Umkehren/Umpacken:

1. Java-Programm isolieren

Der einfachste Weg ist, den Benutzern den Zugriff auf das Java Class-Programm zu ermöglichen. Dies ist der grundlegendste Weg, und es gibt verschiedene spezifische Wege, um dies zu erreichen. Entwickler können beispielsweise die Java-Schlüsselklasse auf dem Server platzieren. Clients erwerben Dienste durch Zugriff auf relevante Schnittstellen des Servers und nicht direkt auf die Klassendatei. Hacker können Class-Dateien also nicht dekompilieren. Gegenwärtig gibt es immer mehr Standards- und Protokolldienste, die über Schnittstellen wie HTTP, Web Service, RPC usw. bereitgestellt werden. Es gibt jedoch viele Anwendungen, die für diesen Schutz nicht geeignet sind. Zum Beispiel können Java-Programme in eigenständigen Programmen nicht isoliert werden.

2. Klassendateien verschlüsseln

Um zu verhindern, dass Klassendateien direkt dekompiliert werden, verschlüsseln viele Entwickler einige Schlüsseldatendateien, z. B. Registrierungsnummer, Seriennummernverwaltung und andere verwandte Klassen. Vor der Verwendung dieser verschlüsselten Klassen muss das Programm diese Klassen zuerst entschlüsseln und diese Klassen anschließend in die JVM laden. Diese Klassen können durch Hardware oder Software entschlüsselt werden.

Entwickler laden häufig kryptografische Klassen über eine angepasste ClassLoader-Klasse (Applet unterstützt aus Sicherheitsgründen keinen angepassten ClassLoader). Customed ClassLoader findet zuerst kryptographische Klassen und entschlüsselt sie dann. Und schließlich die entschlüsselten Klassen in die JVM laden. Customed ClassLoader ist eine sehr wichtige Klasse in dieser Schutzmethode. Da es selbst nicht verschlüsselt ist, kann es das erste Ziel eines Hackers sein. Wenn der relevante Entschlüsselungsschlüssel und -algorithmus überwunden wurden, können die verschlüsselten Klassen leicht entschlüsselt werden.

3. Konvertieren Sie in native Codes

Das Programm in native Codes konvertieren ist auch ein wirksamer Weg, um eine Dekompilierung zu verhindern. Weil native Codes oft schwer zu dekompilieren sind. Entwickler können die gesamte Anwendung in systemeigene Codes oder nur Schlüsselmodule konvertieren. Wenn Sie nur einen wichtigen Teil der Module konvertieren, wird JNI-Technologie benötigt, um aufzurufen, wenn Java-Programme diese Module verwenden. Java hat die plattformübergreifende Funktion von Java aufgegeben, als diese Motte zum Schutz von Java-Programmen verwendet wurde. Für verschiedene Plattformen müssen verschiedene Versionen der systemeigenen Codes verwaltet werden, wodurch der Software-Support und der Wartungsaufwand erhöht werden. Bei einigen Schlüsselmodulen ist diese Lösung jedoch manchmal erforderlich. Um sicherzustellen, dass diese nativen Codes nicht geändert oder ersetzt werden, müssen Entwickler diese Codes häufig digital signieren. Bevor diese nativen Codes verwendet werden, müssen Entwickler diese lokalen Codes häufig authentifizieren, um sicherzustellen, dass diese Codes nicht von Hackern geändert wurden. Wenn die Signaturprüfung bestanden ist, können Entwickler relevante JNI-Methoden aufrufen.

4. Code-Verschleierung

Code-Verschleierung besteht darin, Class-Dateien neu zu organisieren und zu verarbeiten, sodass die behandelten Codes dieselbe Funktion (Semantik) mit den unbehandelten Codes ausführen. Es ist jedoch schwierig, die verschleierten Codes zu dekompilieren, d.h. Theoretisch können, wenn Hacker genug Zeit haben, verschleierte Codes immer noch geknackt werden. Sogar einige Leute entwickeln ein De-Verschleierungswerkzeug. Aber aufgrund der tatsächlichen Situation, seit der diversifizierten Entwicklung der Verschleierung, der ausgereiften Verschleierungstheorie, können verschleierte Java-Codes Dekompilierung gut verhindern.

5. Online-Verschlüsselung

APK Protect war eine Online-Verschlüsselungswebsite für APK, die Aktivität wurde jedoch offenbar seit etwa 2013 eingestellt. Es bot Java-Codes und C++ - Codes, um Anti-Debugging- und Decompile-Effekte zu erzielen.

Ich habe ursprünglich vorgeschlagen, dass Sie diese letzte Methode verwenden, um Zeit zu sparen. Aufgrund meiner Erfahrung war es sehr einfach zu bedienen und es würde nicht lange dauern.

30
classc_abc

Mit Jellybean ist dies nun möglich geworden.

$ openssl enc -aes-128-cbc -K 000102030405060708090A0B0C0D0E0F 
-iv 000102030405060708090A0B0C0D0E0F -in my-app.apk -out my-app-enc.apk

$ adb install --algo 'AES/CBC/PKCS5Padding' --key 000102030405060708090A0B0C0D0E0F 
--iv 000102030405060708090A0B0C0D0E0F my-app-enc.apk
        pkg: /data/local/tmp/my-app-enc.apk
Success

Bitte lesen Sie den folgenden Blogpost für weitere Details

8
Corvusoft

Wenn dies geheime Informationen sind, die nicht in die Hände Ihrer Benutzer gelangen dürfen, können Sie sie nicht sichern. Es ist grundsätzlich unmöglich, Informationen auf einem Gerät (Code oder Daten) abzulegen und mit Ihrer Anwendung darauf zuzugreifen. Personen mit dem Gerät dürfen jedoch nicht auf diese Informationen zugreifen.

Die Verschlüsselung der Informationen ist unter Sicherheitsaspekten sinnlos, da Ihre Anwendung alles enthalten muss, was zur Entschlüsselung erforderlich ist, um sie zu verwenden, und ein ausreichend motivierter Angreifer kann diese Informationen immer selbst extrahieren und entschlüsseln.

Alles, was Sie tun können, ist, den Zugriff auf diese Informationen lästiger und zeitaufwändiger zu machen. Dies ist nur hilfreich, wenn es nicht wirklich nötig ist, diese Informationen geheim zu halten. Dies ist, was Proguard verwenden kann, um Ihre .apk-Datei zu verschleiern.

5
Ben

Haben Sie die SQLite-Verschlüsselung in Betracht gezogen? Siehe diesen Thread - sqlite-Verschlüsselung für Android

Um Ihren .apk zu schützen, versuchen Sie, Ihren Code mit proguard zu verschleiern. Siehe http://developer.Android.com/guide/developing/tools/proguard.html

4
Vino

Sie können "Anti Decompiler (Android) Trial" ausprobieren.

https://play.google.com/store/apps/details?id=com.tth.AntilDecompilerTrial

Es macht etwas, was Proguard nicht tut:

  • Blenden Sie alle const-Werte (Zeichenfolge, Zeichen) aus. In Ihrer apk-Datei wird kein Klartext wie "mein Schlüssel", "mein Wert" ... angezeigt
  • Verschleiern Sie den Dateinamen, auf den in AndroidManifest.xml verwiesen wird 
  • Fügen Sie Ihrem Quellcode gefälschten Code hinzu. Event, das die mächtigen Dekompilierer mögen: dex2jar, jd-gui, ... kann Ihre apk-Datei nicht genau umkehren. Die meisten Funktionen werden mit dem Kommentar 'Fehler' angezeigt. 

=====

  • Wenn Sie nach der Transformation jemandem Ihr Quellprojekt übergeben, ist es fast unmöglich zu lesen und zu verstehen. 
  • Diese Lösung schließt Proguard nicht aus, Sie können sie miteinander kombinieren. (Funktion, Feld Verschleierung von Proguard ist besser als Verschleierungseigenschaften dieser Lösung)
3
Son tung

Sie können meinen Beitrag lesen unter: http://www.androidpit.com/de/Android/forum/thread/567093/An-Analyse-von-Android-APK-Protect-Shell-APKProtect . Die mit protect-Shell von APK Protect hinzugefügte APK scheint nicht dekompilierbar zu sein. Ich meine, die Verschlüsselungsmethode ist sehr fortgeschritten. Selbst ein Hacker braucht viel Zeit, um es zu knacken.

3
Jack Shaw

Wenn die Datenbank vertrauliche Daten enthält, können Sie die Werte mehrerer Spalten oder der gesamten Datenbank wie in der anderen Antwort angegeben verschlüsseln und sicherstellen, dass das Kennwort nicht auf dem Gerät gespeichert wird, sondern vom Benutzer beim Zugriff auf die Datenbank eingegeben werden muss Daten.

Wenn es Code-Teile gibt, die Sie schützen müssen, gibt es wirklich keine gute Möglichkeit, ihn zu sichern. Für eine begrenzte Anzahl von Anwendungsfällen können Sie lediglich eine Abhängigkeit zu einem Onlinedienst erstellen und den Server sichern. Für viele Anwendungen wäre dies jedoch keine Option.

0
Beanow