Die Dekompilierung Möglichkeiten in iOS und wie Sie Sie vermeiden
Vor kurzem Las ich über die Dekompilierung von iOS-apps, und ich bin jetzt wirklich besorgt. Wie bereits in den folgenden Beiträgen (#1 und #2) ist es möglich, zu dekompilieren, einem iOS, die verteilt wird, um den App Store. Diese kann getan werden, mit jailbreak, und ich denke, dass mit dem kopieren der app aus dem Arbeitsspeicher auf die Festplatte. Mit einigen tools ist es möglich,
- Lesen aus strings (Zeichenketten tools)
- dump der header-Dateien
- reverse engineer assembly-code
Scheint es NICHT möglich zu sein, um reverse Engineering zu Kakao-code.
Als Sicherheit ist eine Funktion der software, die ich erstellen, ich möchte, um zu verhindern, dass schlechte Benutzer aus der Rekonstruktion meines Sicherheits-Funktionen (Verschlüsselung mit Schlüssel oder loggen Sie sich in websites). So kam ich auf die folgenden Fragen:
- Kann jemand rekonstruieren meinen Speicherung und Verschlüsselung oder login-Methoden mit der Montage? Ich meine, kann er verstehen, was genau Los ist (was gespeichert wird, welcher Pfad zu welcher Zeit, welcher Schlüssel verwendet wird, etc., mit welchen Anmeldeinformationen ist ein login auf die Webseite durchgeführt)? Ich habe keine Versammlung verstehen, es sieht aus wie die matrix für mich...
- Wie kann ich sicher verwenden
NSStrings
die nicht ausgelesen werden mit strings oder Lesen Sie in der Montage? Ich weiß, was man tun kann, Verschleierung von strings - aber das ist noch nicht sicher, ist es nicht?
- keine Notwendigkeit jailbreak zu tun, reverse engineering, und ja, jede Methode, die Sie schreiben in Ihrem code verstanden werden könnte, von jemand mit genügend Zeit, dies zu tun. Verwenden Sie Methoden, die das SDK, als deren sourcecode nicht direkt in Ihre Anwendung, aber Träume nicht zu viel, es ist keine 100% sichere Weise ALLES, was gelesen werden kann, kann kopiert werden, und alles, was kopiert werden kann, kann auch geknackt werden.
- Also wenn ich mit SDK-Klasse-Methoden (z.B.
[NSString stringWithFormat:...]
oder für die Speicherung von Dateien, diese wären nicht sichtbar in der Montage direkt? Ich meine jede app enthält das foundation framework... - wenn Sie [NSString stringWithFormat:...], was sichtbar ist, ist der Aufruf von stringWithFormat, was nicht sichtbar ist, was hinter dieser Methode => wir wissen, was genannt wird, und nicht, wie es gemacht wird dahinter
- ok. aber ich denke, dass eine person, die in der Lage ist, ein reverse Engineering auch weiß, was hinter SDK-Methoden (oder er findet sich mit der Dokumentation). Es wäre fast unmöglich, eine SDK-Methode aufrufen, wo nur der Entwickler kennt das Ergebnis?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein problem, dass Menschen wurden Jagd für die Jahre, und jede hinreichend motivierte person mit Fähigkeiten in der Lage sein, Wege zu finden, um herauszufinden, was auch immer Informationen, die Sie nicht wollen, dass Sie, um herauszufinden, wenn diese Informationen immer auf einem Gerät gespeichert.
Ohne Jailbreak, es ist möglich, zerlegen apps mit, die gekauft oder heruntergeladen werden binären. Dies ist die statische Kontrolle und erleichtert mit standard-Demontage-Werkzeuge. Obwohl, benötigen Sie ein Werkzeug, das gut genug ist, fügen Sie Symbole aus dem linker und verstehen Methodenaufrufe ausreichend, um in der Lage sein, um herauszufinden, was Los ist. Wenn Sie möchten, bekommen ein Gefühl dafür, wie dies funktioniert, überprüfen Sie heraus hopper, es ist eine wirklich gute Demontage - /reverse-engineering-Werkzeug.
Speziell auf Ihre sichere log-in Frage, Sie haben ein größeres problem, wenn man einen motivierten Angreifer: system-basierte man-in-the-middle-Angriffe. In diesem Fall kann der Angreifer shim aus der Netzwerk-code verwendet, durch die Sie Ihr system und sehen Sie alles, was gesendet wird über standard-Netzwerke. Daher können Sie sich nicht darauf verlassen zu können, senden Sie jegliche form von unverschlüsselten Daten in einem "secure" - Rohr an der OS oder der Bibliothek auf und erwarten, dass es nicht zu sehen. Mindestens müssen Sie verschlüsseln, bevor man die Daten in die pipe (d.h. Sie können nicht davon abhängen, senden von nur-text-standard-SSL-Bibliotheken). Kompilieren Sie Ihre eigenen SSL-Bibliotheken und verlinken Sie direkt zu Ihrer App, was bedeutet, dass Sie nicht bekommen, alle system-performance-und Sicherheits-Verbesserungen über die Zeit, aber Sie können Sie manuell aktualisieren Sie Ihre SSL-Bibliotheken wie nötig. Sie konnte auch Ihre eigene Verschlüsselung, aber das ist voll mit potenziellen Probleme, da motivierte Hacker finden es möglicherweise einfacher, einen Angriff auf Ihren wire-Protokoll an diesem Punkt (öffentlich-getestet Protokolle wie SSL sind in der Regel sicherer als das, was Sie können, werfen selbst zusammen, es sei denn, Sie sind besonders begabte Entwickler mit Jahren von security/encryption-Erfahrung).
Doch all dies setzt Voraus, dass der Angreifer ausreichend motiviert. Wenn Sie entfernen die niedrig hängende Frucht, können Sie in der Lage sein, um zu verhindern, dass ein casual-hacker einen einfachen Versuch, um herauszufinden, Ihre system. Einige Dinge zu vermeiden:
serverkey.text
oder einen gespeicherten Schlüssel in einer plist mit einem Namen, der enthältkey
sind sowohl Klassiker)Aber am wichtigsten ist die Schaffung von Systemen, in denen die Schlüssel (falls vorhanden), gespeichert in der Anwendung selbst sind nutzlos, ohne die Informationen, die der Benutzer eingeben, die sich (direkt oder indirekt über Systeme wie OAUTH). Der server sollte nicht das Vertrauen der client für alle wichtigen Betrieb, ohne dass eine Interaktion mit einem Benutzer, der vertraut werden kann.
Apple Keychain bietet einen guten Platz zum speichern von tokens, wie diejenigen abgerufen, die während eines OAUTH-Sequenz. Die API ist ein bisschen hart, mit zu arbeiten, aber das system ist solide.
In das Ende, das problem ist, dass egal was Sie tun, Sie sind einfach upping die ante auf die Menge der Arbeit, die es braucht, um die Niederlage Ihrer Maßnahmen. Der Angreifer erhält die Kontrolle aller wichtigen Teile der Gleichung, so werden Sie schließlich zu besiegen, alles auf das Gerät. Sie gehen zu müssen, um zu entscheiden, wie viel Aufwand in die Sicherung der client, vs Sicherung der server und die überwachung von Missbrauch. Da der Angreifer hält alle Karten auf dem Gerät sind der bessere Ansatz sein wird, Methoden, die implementiert werden können, die auf dem server zu erhöhen, Ihre Ziele zu erreichen.