Wie kann man eine iPhone / Android-App so hart härten, dass es schwierig ist, sie zurückzuentwickeln?
Das Verhindern des Reverse Engineering von Software ist ein schwieriges Problem.
Es ist ein außerordentlich schwieriges Problem, das Reverse Engineering von Anwendungssoftware auf einer allgemeinen Computerplattform mit schwacher Hardwareunterstützung (PC, iPhone oder Android-Telefon) über einen längeren Zeitraum (Monate) zu verhindern.
Anstatt die gesamte Anwendung zu schützen, besteht eine übliche Alternative darin, den Schutz der von der Anwendung verwendeten kritischen Daten zu versuchen und den Schutz der gesamten Anwendung aufzugeben.
[1] Machen Sie die App schwer zu knacken, da die Binärdatei einige geheime Token enthält.
Hier wird das Konzept "Daten schützen" vorgestellt. Was die Anwendung wirklich schützen soll, sind einige wichtige Daten: die geheimen Token.
Wie schützen Sie Daten, wenn die Anwendung sich nicht selbst schützen kann?
Sie übergeben die Verantwortung zum Betriebssystem. Es gibt zwei Arten von Schutz, die Betriebssysteme bieten können: Zugriffskontrolle und Kryptografie. Die meisten Schutzmaßnahmen, die wir verwenden, wenn wir das Lesen von Daten zulassen oder verweigern oder eine bestimmte Aktion ausführen, sind Zugriffskontrollen.
Eine Zugriffssteuerung verwendet als Eingabe eine Aktion und eine Kennung, wer die Aktion ausführen möchte. Die Ausgabe ist entweder Genehmigen oder Verweigern der Berechtigung zum Ausführen der Aktion. Eine Zugriffssteuerung verwendet einen Satz oder Regeln oder eine Tabelle, um zu bestimmen, ob ein Bezeichner eine Aktion ausführen darf.
Zum Beispiel: Alice hat ein Spiel FunGame auf einem Computer. Die Zugriffskontrolle des Computers hat die Regel, dass nur Alice FunGame ausführen darf. Bob setzt sich an den Computer und versucht, FunGame auszuführen. Die Zugriffskontrolle des Computers verwendet als Eingabe 'run FunGame' und 'Bob'. Basierend auf der Regel "Nur Alice darf FunGame ausführen" wird die Ausgabe der Zugriffssteuerung verweigert.
Die Zugriffskontrolle bietet eine direkte und allgemeine Möglichkeit, Entscheidungen über das Zulassen oder Verweigern zu treffen, während die Kryptografie eine indirektere Methode zum Zulassen oder Verweigern bietet. Mit Ver- und Entschlüsselung können wir Daten so transformieren, dass die Daten sinnvoll oder nicht sinnvoll sind.
Für die Ver- und Entschlüsselung ist mindestens ein kryptografischer Schlüssel erforderlich. Der Wert des Schlüssels wird zu einer Zugriffskontrolle mit den beiden Regeln "Erlaube jedem, der den Schlüssel hat, verständliche Daten zu nehmen und sie unverständlich zu machen" und "Erlaube jedem, der den Schlüssel hat, unverständliche Daten zu nehmen und sie verständlich zu machen". Wenn Daten unverständlich gemacht werden, werden die Daten nur vor dem Verstehen geschützt. Eine Person kann die Daten möglicherweise noch lesen, sie werden jedoch nicht in der von ihnen verstandenen Form vorliegen.
Beachten Sie, dass der Schlüssel anstelle der Kennung eines Akteurs zur kritischen Komponente wird. Jeder, der den Schlüssel hat, egal wie er ihn erhält, kann auf die Daten zugreifen. Dies macht das Speichern des Schlüssels zu einem Problem. Wenn Sie den Schlüssel auf demselben System wie die Daten speichern, stellen Sie jedem die Möglichkeit zur Verfügung, auf Ihre Daten zuzugreifen. Aus diesem Grund müssen Passphrasen auswendig gelernt werden. Das Speichern einer Passphrase speichert den Schlüssel (Passpharase) in Ihrem Kopf anstatt auf dem System.
Um Ihre Token zu schützen, können Sie die Zugriffskontrollen des Betriebssystems verwenden oder die Token oder beides verschlüsseln. Wenn jemand ein Betriebssystem hat, das seine eigenen Zugriffskontrollen nicht erzwingt (iPhone mit Jailbreak oder gerootetes Android-Telefon), können Sie sich nicht auf die Zugriffskontrollen des Betriebssystems verlassen. Solange sich der zum Verschlüsseln Ihrer Token verwendete Schlüssel nicht auf demselben System befindet wie die verschlüsselten Token, bleiben Ihre Token auch dann geschützt, wenn das Betriebssystem gefährdet ist.
Behalten Sie jedoch den Schlüssel bei Aus dem fraglichen System ist ein weiteres schwieriges Problem, das als Schlüsselverwaltung bezeichnet wird.
[2] Wenn es immer noch geknackt werden kann, kann die App auf irgendeine Weise jemandem oder sich selbst mitteilen, dass es geknackt wurde (z. B. anhand einer Prüfsumme oder eines Zertifikats oder des Betriebssystems, das dies für die App tut) und nehmen etwas Action?
Die App-Binärdatei kann infiziert werden oder fehlerhafter Code kann injiziert werden, während sich das Programm im Speicher befindet. Daher sollten vorgeschlagene Methoden in der Lage sein, beide Fälle zu behandeln.
Das Konzept, ein Datenelement zu untersuchen, um festzustellen, ob es seit seiner letzten Überprüfung unverändert ist, wird als Integritätsprüfung bezeichnet. Eine effiziente Methode zur Bewertung des Status eines Datenblocks wird als kryptografisches Hashing bezeichnet. Um eine Integritätsprüfung durchzuführen, müssen Sie zuerst den kryptografischen Hash eines Datenelements berechnen und dann den resultierenden Hashwert schützen. Berechnen Sie zu einem späteren Zeitpunkt den kryptografischen Hash für dasselbe Datenelement neu. Vergleichen Sie den neu berechneten Hashwert mit dem geschützten Hashwert. Wenn die beiden Werte identisch sind, bleiben die Daten unverändert. Wenn sich die beiden Hashwerte unterscheiden, wurden die Daten geändert.
Sie können die im Speicher befindliche Anwendungsbinärdatei als Datenelement behandeln und eine Integritätsprüfung durchführen. Sie können die Anwendungsbinärdatei im Speicher auch als Datenelement behandeln und eine Integritätsprüfung durchführen.
Das Konzept, ein laufendes Programm zu untersuchen, um festzustellen, ob es wie geplant verarbeitet wird, wird als Bescheinigung bezeichnet. Das Überprüfen des gesamten vom laufenden Code verwendeten Speichers ist normalerweise nicht möglich, sodass die Bescheinigung normalerweise etwas Einfacheres überprüft, z. B. die Werte bestimmter Datensätze oder den Status des laufenden Programms und dessen Übergang zwischen den Status. Eine Bescheinigung ist schwer zu erreichen, daher wird sie in kommerzieller Software nicht häufig verwendet.