Es scheint keinen Code-Verschleierer für Objective-C zu geben. Aber nehmen wir für einen Moment an, dass es einen gibt.
Apple wird eine verschleierte App wahrscheinlich nicht ablehnen, solange sie nicht abstürzt. Die Hauptfrage ist: Was ist der Punkt der Verschleierung? Normalerweise möchten Sie Code verschleiern, um Ihr Wissen zu schützen. Wenn Ihr Programm beispielsweise einen Kopierschutz verwendet, den Sie einem potenziellen Cracker erschweren möchten, oder wenn Sie einen erweiterten Algorithmus verwenden, möchten Sie nicht, dass die Geschäftskonkurrenten dies tun in der Lage, es zu dekompilieren.
Der Kopierschutz ist unter iOS bereits erledigt. Obwohl durch Jailbreaking eine normale App kopiert und ausgeführt werden kann, würde ich sagen, dass die tatsächliche Anzahl der Benutzer, die dies tun, ziemlich gering ist (zumindest viel geringer als auf "normalen" Computern wie PC und Mac). Erwarten Sie, dass Piraterie ein so großes Problem darstellt, dass Sie es verschleiern müssen?
Wenn Sie wichtige Kenntnisse zum Schutz haben, kann sich eine Verschleierung lohnen. Die Verschleierung hat ihre Nachteile: Sie können Ihre verschleierte App nicht mehr debuggen. Absturzberichte sind nutzlos.
Vielleicht möchten Sie auch den Artikel Verschleierung von Kakao lesen .
Zurück zu der Tatsache, dass es keinen Verschleierer zu geben scheint: Was Sie tun können , ist dieser Trick: Angenommen, Sie haben einen Header wie diesen:
@interface MyClass : NSObject {
}
- (void)myMethod;
Sie könnten eine billige Verschleierung wie diese machen:
#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif
@interface MyClass : NSObject {
}
- (void)myMethod;
Auf diese Weise können Sie weiterhin aussagekräftige Symbole in Ihrer Quelle verwenden, aber der Compiler würde sie in "Müll" verwandeln, wenn er nicht zum Debuggen kompiliert wird.
myMethod
es in mehreren Klassen vorhanden ist, kann dies zu wirklich interessanten Kompilierungsfehlern führen. Es ist eine clevere Idee, und ich liebe die Einfachheit, aber ich kann mir nicht vorstellen, dass es die Kosten in einem praktischen System wert ist.quelle
Zusätzlich zu den früheren Antworten gibt es jetzt mehrere Tools von Drittanbietern, die ein gewisses Maß an Verschleierung und Integritätsschutz bieten, darunter:
Sie unterscheiden sich in ihren Fähigkeiten und umfassen:
Alle diese Tools sind sehr teuer und nicht ohne Probleme. Sie benötigen also wirklich eine Anwendung, die ein hohes Maß an Integrität erfordert, um sie zu berücksichtigen, z. B. Bankgeschäfte oder Bereiche, in denen DRM sehr wichtig ist.
Für diese Art von App benötigen Sie auch qualifizierte Penetrationstester, um sicherzustellen, dass Ihre App nicht auf andere Weise verfügbar gemacht wird, da diese Tools oft nur so gut sind wie die Benutzer, und es gibt noch andere Betriebssystem-Schwachstellen, die gemindert werden müssen nicht ansprechen.
quelle
Die ausführbare Datei einer App ist bereits von Apple verschlüsselt, und das ausführbare Codesegment der App-Sandbox ist nicht beschreibbar. Sie können daher keine zusätzliche Verschlüsselung durchführen, die eine Änderung des Laufzeit-Armcodes erfordert. Und der Optimierungsdurchlauf des Objective C / C-Compilers erzeugt bereits etwas ganz anderes als der ursprüngliche Quellcode. Wenn Sie mehr C und weniger verwenden, zeigt Objective C weniger Ihrer Funktionsnamen an, da Methodennamen in sichtbaren Klartext eingebettet sind, C-Funktionsnamen jedoch nicht. Daher sollte jeder Geschäftsgeheimnis-Typcode wahrscheinlich in einfachem C codiert und mit dem Optimierer kompiliert werden, der vollständig aufgedreht ist. Sie können jedes im App-Bundle eingebettete WebKit-Javascript oder jeden anderen eingebetteten VM-Code verschleiern (solange der interpretierte Code nicht heruntergeladen wird).
quelle
Wahrscheinlich nicht, weil Objective-C nach Prozessoranweisungen kompiliert wird, anstatt interpretiert oder nach Bytecode kompiliert zu werden. Das Dekompilieren des Codes führt also bereits zu ziemlich undurchsichtigen Ergebnissen. Verschleierung ist etwas, das Sie normalerweise nur benötigen, wenn Sie die Quelle Ihres Codes wie in interpretierten Sprachen wie JavaScript verteilen müssen, damit er auch dann ausgeführt werden kann, wenn der Code geheim bleiben soll.
quelle