Frage

Ein Entwicklungs Konsens in der Gemeinschaft iPhone-Entwicklers ist, dass Apple vor kurzem begonnen hat, ein statisches Code-Analyse-Tool Verwendung von undokumentierten API-Aufrufen zu erkennen.

Nur um des Arguments, frage ich mich, ob es möglich wäre, durch Erzeugen der Aufruf zur Laufzeit wie dieser, um dieses Tool zu arbeiten:

NSString *const aMethod = @"doStuff:withStuff:";
SEL aSelector = NSSelectorFromString(aMethod);
NSMethodSignature *aSignature = [targetObject methodSignatureForSelector:aSelector];
NSInvokation *anInvokation = [NSInvokation invocationWithMethodSignature:aSignature];
[anInvokation setTarget:targetObject];
[anInvokation setSelector:aSelector];
[anInvokation setArgument:&firstArg atIndex:2];
[anInvokation setArgument:&secondArg atIndex:3];
[anInvokation invoke];

Dies scheint fast zu einfach, so frage ich mich - was bin ich dabei? Wie Apple kann möglicherweise diese mit statischer Code-Analyse ermitteln auf der Baugruppe?

Ein paar Punkte:

  1. Ich bin mir bewusst, dass der Methodenname wird in den binären als statischen gespeichert werden String. Es wäre jedoch trivial die Methodennamen zu erzeugen, bei Laufzeit als auch mit string: oder eine andere Art von leichte Verschleierung (genug, um Verwechseln Sie den statischen Analysator).
  2. Ich weiß, dass dieser Trick von selbst die banalsten Laufzeitanalyse enthüllt werden würde mit GDB - mein Verständnis ist, dass Apple die binäre selbst analysiert, und vielleicht bin ich völlig falsch, dass
  3. .
War es hilfreich?

Lösung

Warum Pflege? Sie sind nicht verwenden private API für einen guten Grund soll. Apple-Anwendung jederzeit leicht brechen könnte, Ihre Nutzer zu stören

Wie gesagt, die Verwendung von NSInvocation, -performSelector. Oder andere ähnliche Technik wahrscheinlich genug ist Erkennung durch einen statischen Analysator zu vermeiden

Andere Tipps

Ich nehme an, dass Sie gelesen haben, dieser Artikel . Interessant ist auch dieses . Meine Interpretation ist, dass Apples statische Analysator Fehlalarme nur generiert, weil einige Leute Methoden verwenden, die den gleichen Namen wie private Methoden haben. Das wäre nicht passiert, wenn der Analysator entweder eine Laufzeitanalyse oder gründliche Überprüfung, welche Klassen Selektor genannt wurde getan hatte. So scheint es, als wären sie in erster Linie auf der Suche nach Zeichenketten oder Selektoren in Ihrem binären übereinstimmen. Ich denke, dass NSInvocation mit einigen Zeichenfolge Verschleierungs kombiniert verwendet, wird Sie durch. Ich würde noch empfehlen, nicht auf den privaten APIs zu verlassen, though.

Es gibt einen einfachen Weg, um herauszufinden!

Erstellen Sie eine Anwendung, die bewusst eine versteckte api durch die Methode in Frage verwendet und es sieht, wenn angenommen wird!

Sam

PS: Wenn Sie herausfinden, tun, stellen Sie sicher, dass Sie uns sagen; wir würden alle gerne sicher sicher und Apple wissen, wird es uns nicht sagen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top