Schützen string-Konstante vor reverse-engineering
Habe ich android-Anwendung, die hart codiert (statische string-Konstanten) - Anmeldeinformationen (user/pass) für das senden von E-Mails via SMTP.
Das problem ist, dass .dex-Datei in .apk kann leicht reverse-engineered und jeder kann sehen, wie mein Passwort.
Gibt es einen Weg, diese Informationen zu schützen, während ich noch in der Lage sein, um Sie in meinem Unterricht?
- Warum Sie nicht auch hash Sie?
- H, ich denke, wenn er hat, um die Wiederverwendung der Berechtigung, hashing nicht möglich?
- Wenn er Hasch Ihnen, wie kann er unhash login/pass, um es zu senden SMTP-server? Wenn es sein würde, zwei-Wege-Funktion wäre es ganz einfach entschlüsseln. Wenn es wäre, hash, reqire Salz - /Schlüssel, den er brauchen würde, um hash zu. DORT's auch thread über die Dekompilierung DEX sourcecode.
- ja sorry ich habe nicht zu schätzen wissen, dass zwei-Wege-Verschlüsselung erforderlich war.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wir verwenden können "jni-Modul", um die "Sensiblen Saiten" in der app. wenn wir versuchen, reverse Engineering APK-Datei Holen wir uns den lib-Ordner und .also Dateien die in den jeweiligen Prozess-Ordner. die nicht entschlüsseln kann.
Ich denke, Sie können versuchen, einen code obfuscator, aber das ist wirklich nicht Ihr Passwort zu 100% sicher und ich weiß nicht, wie gut es geht zusammen mit der android-compiler. Warum nicht einen sicheren web-Authentifizierung , wie Google?
Speichern können Sie Ihre string verdeckt AES.
Lizenzierung Prüfung-Bibliothek finden Sie
AESObfuscator
. In LVL es wird verwendet, um zu verschleiern zwischengespeichert Lizenz-info, die gelesen wird, anstatt zu Fragen, Android-Markt, um herauszufinden, Anwendung lizenziert ist oder nicht. LVL kann heruntergeladen werden als Bestandteil des SDK.Die einzige Möglichkeit, die ich glaube, arbeiten würde, in einem Ausmaß, wäre die Gastgeber die Anmeldeinformationen auf einem server, die nur Ihre Anwendung zugreifen kann über eine web-service-Aufruf durch eine separate Authentifizierung für einige Art - ähnlich wie FB ' s hash-Schlüssel. Wenn es für Sie funktioniert, es sollte für uns arbeiten.
Ich war auf der Suche in einem ähnlichen problem und bin auf diesen nützlichen thread:
http://www.dreamincode.net/forums/topic/208159-protect-plain-string-from-decompilers/
Ich bin nicht allzu vertraut mit Android-Entwicklung, aber die gleichen Ideen gelten sollten.
Wenn Sie nicht die Mittel haben, zu tun, eine web-Autorisierung, werden Sie brauchen, um den Dritten Entschlüsselung mit application.
Dies ist, was Sie versuchen könnte
1) Schreiben Sie ein eigenständiges Programm nur zum erstellen einer Kennwort-hash einer Zeit. (Sollte dieses Programm nicht ein Teil der app). Notieren Sie sich die hash erzeugt wurde.
http://www.mindrot.org/projects/jBCrypt/
2) bewahren Sie dieses Passwort-hash als String Konstante in Sie APK.
3) Dann jedes mal, wenn Sie benötigen, um das Passwort zu prüfen, zu vergleichen mit dem Hash-Passwort mit bcrypt.
jBCrypt ist eine einzelne java-Datei und kann es direkt in der Anwendung enthalten. Es gilt als eines der stärksten Verschlüsselungs-algorithmen für Passwörter.
Auch durch die Entschlüsselung Algorithmus ist in Ihnen, APK, versucht zu brechen, das ist sehr zeitaufwendig details Lesen Sie im Artikel unten.
Lesen Sie diesen Artikel für weitere details und Sicherheit von bcrypt.
http://codahale.com/how-to-safely-store-a-password/
Wieder, verwenden Sie diese nur, wenn Sie nicht die Mittel haben, zu tun, web-basierte Authentifizierung.
candidate
string? Oder bin ich etwas fehlt, oder diese Antwort ist nutzlos.Verwenden irgendeine Art von trivial-Verschlüsselung oder die Ziffer, die nur Sie (und Ihr code) zu verstehen. Umkehren der Zeichenfolge, speichern Sie es als array von ganzen zahlen, wo Sie brauchen, um die mod-217 oder etwas dummes zu finden, das echte Passwort.
Einer Weise können Sie 100% sicher Sie hart-codierten string.
Erstens benutzen nicht die pro-guard verwenden, allatori
Link: http://www.allatori.com/
Und zweitens nicht nehmen, Sie hart codierten string in eine variable benutzen Sie einfach die Zeichenfolge wie diese:
"abc"
ist exampled hart codierten string.Allatori voll verschleiern alle Strings, die im code verwendet wie oben.
Hoffe, es wird für Sie zu helfen.
tun, diese würde hilfreich sein:
1 - können Sie diese verschlüsseln und verschleiern der Verschlüsselung-Algorithmus. jede Verschlüsselung zusammen mit Vernebelung (progaurd in Adnroid) ist nützlich.
2 - Sie besser zu fest Ihre strings als byte-array im code. viele reverse engineering-Anwendungen können Sie eine Liste der Saiten und erraten, was Sie sind. aber wenn Sie in form von byte-array sind Sie nicht lesbar. aber wieder Proguard notwendig ist. (es werden nur Häute von RAM string-Konstante Suche und Sie sind immer noch durchsuchbar aus .class-Datei)
3 - Verwendung von C++ - code zu hosten Ihre Konstante ist nicht eine schlechte Idee, wenn Sie verschlüsselt werden, bevor hardcoding und entschlüsseln Sie mithilfe von C++ - code.
es ist auch ein großer Artikel hier :
https://rammic.github.io/2015/07/28/hiding-secrets-in-android-apps/