Ist es wirklich unmöglich, schützen Sie Android-apps von reverse-engineering?
Wie wir wissen, Android apps werden in Java geschrieben. In Java, egal was Sie tun, ist es unmöglich, die zu schützen, die kompilierten code aus Dekompilierung oder reverse-engineering, wie die Stack-Überlauf Frage Wie lock kompilierten Java-Klassen verhindern, dass die Dekompilierung? schlägt.
Wie würde man gehen, um den Schutz einer app, die enthält algorithmischen Handel Geheimnisse von reverse-engineering?
Durch "wie" meine ich nicht nur die software-Techniken, aber auch andere kreative Ansätze.
Android-apps werden möglicherweise "geschrieben in Java" als Quelle, aber Sie sind nicht verteilte als Java-Bytecode - Sie sind so verteilt, wie DEX (Dalvik EXecutable) Dateien. Es gibt Zerleger für DEX-Dateien erzeugen "Montage-wie" - code, aber soweit ich weiß, gibt es keine Möglichkeit auf "de-kompilieren" ein DEX in Java-Quellcode.
Nate, das ist ein toller Kommentar und sehr nützliche Informationen. Wenn dies erweist sich eine richtige Lösung sein, poste dies als eine Antwort, ich werde gerne akzeptieren, es als "die Antwort". In der Zwischenzeit fand ich den folgenden thread, die vermuten, dass auch DEX-Dateien dekompiliert werden in Java-Quellcode: stackoverflow.com/questions/1249973/... - ist das wahr?
Ein weiterer relevanter Hinweis, den ich gestolpert: stackoverflow.com/questions/3122635/android-decompile-apk
Nate, das ist ein toller Kommentar und sehr nützliche Informationen. Wenn dies erweist sich eine richtige Lösung sein, poste dies als eine Antwort, ich werde gerne akzeptieren, es als "die Antwort". In der Zwischenzeit fand ich den folgenden thread, die vermuten, dass auch DEX-Dateien dekompiliert werden in Java-Quellcode: stackoverflow.com/questions/1249973/... - ist das wahr?
Ein weiterer relevanter Hinweis, den ich gestolpert: stackoverflow.com/questions/3122635/android-decompile-apk
InformationsquelleAutor Android Eve | 2010-12-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die erste Anlaufstelle für mich wäre, zu optimieren und zu verschleiern-code mit ProGuard von dem bekannt ist, arbeiten mit byte-code, der sich gezielt an Android - Dalvik VM (via Dex). Es ist ein wirklich tolles tool und erhöhen die Schwierigkeit, 'die Umkehrung' code, während eine Schrumpfung code-Emissionen (in einigen Fällen dramatisch: eine aktuelle applet von mir ging von etwa 600 KB bis zu etwa 50 KB).
Wie andere sagen, du bekommst nie eine 100% Sicherheit Ihres Algorithmus auf die details, während seine Umsetzung wird an die clients verteilt. Für, die, würden Sie benötigen, um die code auf Ihren Servern alleine. Versuche, in der Nähe von 100% Prozent Sicherheit für client-code effektiv belaufen sich auf DRM und können Ihre client-code zerbrechlich im Angesicht der Netzwerk-Ausfälle und in der Regel nur frustrieren (berechtigten) Benutzer.
Die Android-Entwickler-blog hat einige nützlich Artikel auf die Frage von "tamper resistant" Android-apps (und Sie empfehlen den Einsatz von ProGuard als Teil des Gesamtkonzepts).
Mit Bezug auf die 'kreative' Ansätze: einige Entwickler beschäftigen debugger detection-Techniken zu verhindern run-time-Analyse und kombinieren diese mit der Verschlüsselung von teilen der Binär-code (zur Abschreckung statische Analyse), aber um ehrlich zu sein, ein bestimmt genug Angreifer kann umgehen diese, während es kann dazu führen, berechtigte frustration der Nutzer, wie dargestellt, durch die Windows-KB-Artikel Spiele: Fehlermeldung: "Ein Debugger Erkannt Wurde: entfernen Sie den Debugger und Versuchen Sie es Erneut. Meine Freundin die 'fahren Lernen' DVD-software wird nicht ausgeführt, unter VirtualBox aus diesem Grund, aber Sie wirft Linux natürlich!
OpenRCE und Wikipedia-Artikel über obfuscated code kann auch ein guter Ausgangspunkt, wenn Sie wollen, schauen in diese weitere. Aber seien Sie gewarnt, Sie verlieren mehr durch übereifrige Verwendung dieser Techniken frustrierend Ihre Benutzer, als würden Sie durch den Verlust von Geschäftsgeheimnissen durch reverse engineering. Wie Anton S sagt, vielleicht die meisten "kreativen" Ansatz liegt mit optimieren der business-Modell eher als die Technologie.
Die neueste Android - SDK-update am 6. Dezember 2010 (zeitgleich mit Android 2.3 Gingerbread release):
InformationsquelleAutor willjcroz
Wenn es eine Möglichkeit: remote procedure calls zu einem gut geschützten server (der server hat den code, den Sie schützen möchten).
+1 für diese Idee. Ein riesiger Nachteil allerdings: der Verzicht auf die Vorteile der verteilten Verarbeitung. Wenn der Algorithmus braucht, um zu dienen Hunderte Millionen Menschen sind, dann müssen Sie ernsthafte Investition in eine server-farm.
Ich würde sagen, vergessen Sie die passphrase ein, weil jemand wird extrahieren. als Sie sagte, es ist eine black box, die Leute sehen können, die Ergebnisse aber nicht auf den code, der Sie hervorgebracht hat. vielen Dank für das +1!
Die passphrase ist eine zusätzliche Ebene der Verschleierung. Sie brauchen es nicht, aber es tut nicht weh und macht es schwieriger, diesen service zu nutzen ohne die app.
wenn es das ist Ihre Präferenz. es ist schwer zu erklären, meine Philosophie in diesen kleinen Kommentar-Boxen, so werde ich es nicht versuchen.
InformationsquelleAutor jcomeau_ictx
Machen Sie es so Billig zu kümmern und nicht bauen Sie Ihr business-Modell auf der Oberseite der Geheimnisse, die ausgeführt werden, auf der client-Seite. In anderen Worten, nicht, Ihre Geheimnisse zu teilen.
Das gleiche gilt für Root-Erkennung. Sie werden versuchen, die Kontrolle "der Nutzer, dass die Kontrollen Kontrolle", einschließlich der api-Aufrufe, die Sie verlassen sich auf das wissen: "Wer hat root-Zugriff?".
InformationsquelleAutor Anton S
Ist es unmöglich, die zu schützen, die client-side-code vor reverse engineering. Sie können nur mehr oder weniger effiziente Mittel der Verschleierung von code. Und optimierte x86-assembler passiert zu sein eine ziemlich gute Verschleierung.
Also, wenn Sie Algorithmische Geheimnisse, die Sie auf der server-Seite.
Das war nur eine Allgemeine Bemerkung über x86 wird schwerer umzukehren als java-bytecode, aber immer noch möglich. Und afaik ist es möglich, Schiff nativen code mit Ihrem android-Programme(ARM Schätze ich), aber ich bin nicht sicher, es ist eine gute Idee.
Beziehen Sie sich auf das NDK? Ich würde nicht dagegen, mit meiner Muttersprache (C++) auf dem Android, aber mein Verständnis ist, dass das NDK ist nur für einen sehr spezifischen low-level-system-Programmierung.
InformationsquelleAutor CodesInChaos
Können Sie nicht. Jedes Schema kann besiegt werden, indem jemand mit genügend Fähigkeiten, Zeit und motivation.
(Übrigens, dies gilt auch für software, die kompiliert wird, mit binären. Der einzige Unterschied besteht in der Menge der Aufwand, der mit der Dekompilierung.)
Einfach nicht installieren Sie die app auf dem eigenen Telefon. Oder (sinnvoller), den code ausführen, enthält die Geschäftsgeheimnisse auf einem remote - (ordnungsgemäß gesichert) server.
InformationsquelleAutor Stephen C
Können Sie nicht davor schützen, dass Ihre Bewerbung vollständig, denn es wird immer jemand sein, der wird es knacken...
Aber könnten Sie daran hindern dies zu tun, indem Sie Ihre Applikation kostenlos oder zumindest Schmutz Billig, damit die Leute nicht belästigt werden.
Alternative, versuchen Sie, halten Sie Ihre Android-Anwendung "dumm", da halten Sie alle die geheimnisvolle business-Logik auf einem backend-server, und nur Sie app-Daten anzeigen mit irgendeiner form von service ausgesetzt.
InformationsquelleAutor Jimmy
Egal, was Sie tun, vielleicht Sie können zumindest machen es sehr schwer zu dekompilieren, aber: Wenn etwas ausgeführt/berechnet ein Programm, das Informationen über den Algorithmus hat, dort zu sein, und es wird immer eine Möglichkeit, um herauszufinden, wie zu bekommen, dass (genügend Geschick und motivation auf Sie Gegner Seite angenommen). Immer.
InformationsquelleAutor oezi
Habe ich meinen Algorithmus auf einem server und ich berufen, dass der service von meinem smartphone-app. Ein Täter kann reverse Engineering meinem smartphone-app, um zu sehen, mein Protokoll mit meinem server. Ich kann mich schützen, meinen Algorithmus, aber ich kann nicht zum Schutz vor unberechtigter Nutzung meines service. Ich habe diese Realität zu akzeptieren, ohne eine Lösung. Ich habe zum Inhalt, dass, solange ich bin Geld verdienen mit meinem eigenen Dienst, dann habe ich zu Leben, mit dem Potenzial, der andere zum absaugen mein service.
InformationsquelleAutor David
Du willst einen kreativen Ansatz, hier ist eine.
Was ist das wichtigste Programm auf Handys, die nicht dekompiliert heute? Radio firmwares. Warum? Es läuft nicht auf der ARM-Chipsatz des Telefons, sondern auf einem separaten Qualcomm Hexagon , ist mehr und mehr vorhanden in den smartphones. Es ist nicht x86, es ist nicht ARM, es verwendet einen Qualcomm proprietäre Architektur und Anweisungen.
Java Dekompilierung ist einfach.
ARM Dekompilierung erschwert (Hex-Rays Decompiler Lizenzen
Beginn bei 1129 USD... und der mix zwischen Daumen-code und die standard-ARM-code in Binärdateien ist ein Schmerz) => Sie könnten versuchen, zu kompilieren mit der Android
NDK.
Gibt es derzeit keine Sechskant decompilers! Und QDSP Spezifikationen sind nicht öffentlich zugänglich, auch raubkopierte Versionen.
Frage ist, kann eine unabhängige software-Anbieter verwenden Sie die Sechskant-firmware enthalten in den Massenmarkt-Handys? Es scheint die Richtung Qualcomm nimmt. Schauen Sie sich Ihre website und die SnapDragon-Produkte.
NB: ich bin nicht pro-Qualcomm noch pro-closed-source. Aber dieser thread reizt diese Art von Lösung.
InformationsquelleAutor KrisWebDev
Kann man nicht 100% sicher Sie android code vor reverse engineering.
Wenn Sie wollen, um einige sichere Schlüssel, dann kann man sich mit Hilfe von Integration-server, geben Sie encrypted key beim Aufruf web-service und nutzen Sie diesen Schlüssel in Ihrem code.
InformationsquelleAutor M.Noman