2010-03-14 5 views
5

Ich mache eine Anwendung in Kakao und wollte sehen, ob einige Strings darin leicht zugänglich waren, also habe ich OTX darauf laufen lassen und leider wurde mein gesamter Code gefunden. Gibt es eine Methode, mit der ich meinen Code "sicherer" machen oder die Strings zumindest verschlüsseln/verstecken kann? Der Grund, warum ich die Zeichenfolge verschlüsseln möchte, ist ein Passwort für einen Server. Ich würde es wirklich sicher brauchen Ich möchte nicht, dass das Passwort so einfach zu finden ist.Schreib Secure Cocoa Code

Vielen Dank für jede Hilfe

+0

Was ist das OTX-Ding, das Sie erwähnt haben und wie man es benutzt? –

Antwort

6

1. Vermeiden Sie ObjC in sicherem Code.

Da ObjCs Klassensystem stark von der Laufzeitreflexion abhängt, muss die gesamte Schnittstelle neben der ausführbaren Datei enthalten sein. Dies ermöglicht Tools wie class-dump die Quelle @interface der Binärdatei leicht wiederherzustellen.

Daher sollten die sicheren Code-Funktionen als C-Funktion und nicht als ObjC-Methode geschrieben werden.

2. Verwenden Sie strip.

Standardmäßig behält der Compiler alle privaten Symbole bei (wodurch der Stack-Trace besser lesbar ist). Sie können strip verwenden, um alle diese Symbole zu löschen.

3. Verschleierung.

Die obigen Schritte können nur die Code-Logik verbergen. Wenn das Kennwort jedoch eine konstante Zeichenfolge ist, ist es sofort mit dem Dienstprogramm strings sichtbar. Sie können dies verschleiern, indem Sie das Kennwort zur Laufzeit erstellen (z. B. das in ROT-13 codierte Kennwort in der Datei speichern.)

4. Oder ändern Sie einfach Ihr Design.

Egal, wie gut Ihr Schutzsystem ist, denn der Hacker hat die totale Kontrolle über seine Maschine, genug Zeit, sie gewinnen immer. Es ist besser, Ihr Design zu überarbeiten, zB warum das Passwort mit der ausführbaren Datei geliefert werden muss? Oder warum ein globales Passwort überhaupt benötigt wird?

+0

Danke für die Antwort. Ich bin kein sehr erfahrener Programmierer, aber wie würde ich es in eine C-Funktion ändern? – nosedive25

+1

@happy: Anstelle von '+ (NSString *) getPassword;' erstellen Sie einen 'statischen NSString * getPassword (void);' außerhalb der Klasse. – kennytm

8

Sie sollten nie ein Passwort in eine ausführbare Datei setzen.

Dies ist, als würde man das Passwort auf eine Notiz neben dem Monitor schreiben. Wenn ein böswilliger Hacker Ihre Anwendung hat, kann er das Kennwort unabhängig von der Sprache oder API, die Sie zum Schreiben verwenden, extrahieren.

Zum Beispiel, wenn ich weiß, dass Ihre Anwendung mit einem passwortgeschützten Server verbindet, aber die Anwendung nie nach einem Passwort fragt, dann weiß ich, dass Sie den Fehler gemacht haben, das Passwort einzubeziehen. Um das Passwort zu finden, muss ich nur den Betrieb des Programms überwachen, um zu sehen, welche Bereiche des Codes aktiv sind, wenn er sich mit dem Server verbindet. Dadurch weiß ich, wo Sie die Suche nach dem Passwort konzentrieren müssen, unabhängig davon, wie groß Ihre Anwendung ist. Dann ist es nur noch eine Frage der Zeit bis ich das Passwort nachverfolge. Das Verschlüsseln des Passworts ist nicht gut, da der Verschlüsselungsalgorithmus auch in der App enthalten sein muss und ich das auch entschlüsseln kann.

Denken Sie daran, dass es viele Leute gibt, die Ihren Code nur mit dem rohen Maschinencode entschlüsseln können. Für diese Leute ist es egal, welche Sprache oder API Sie verwenden, weil sie alle am Ende zum Maschinencode destillieren. Diese Leute sind die beängstigend geschickten Götter der Programmierung und sie lachen über einfache Sterbliche wie Sie oder ich.Leider sind einige von ihnen böse.

Habe ich erwähnt, dass Sie sollten nie ein Passwort in eine ausführbare Datei setzen? Wenn ich nicht, lassen Sie mich das wiederholen, sollten Sie nie ein Passwort in eine ausführbare Datei setzen.

In Ihrem speziellen Fall, als Anfänger Programmierer, haben Sie keine Hoffnung, das Passwort von jemandem mit ein bisschen mehr Erfahrung als Sie selbst zu verstecken. Dies ist ein weiterer guter Grund, warum Sie sollten nie ein Passwort in eine ausführbare Datei setzen.

+1

Danke für die Antwort. Der einzige Grund, warum es ein Passwort gibt, ist es nur für ein paar Freunde und wird nicht verteilt werden. – nosedive25

+3

Freunde? Warum willst du es dann verschlüsseln? :-) –