Frage

Meine Frage ist ziemlich einfach: Sie sind eine ausführbare Datei, die „Zugriff gewährt“ ausgibt oder „Zugriff verweigert“ und böse Personen versuchen, Ihren Algorithmus oder patchen Ihre Innereien zu verstehen, um Sie sagen zu lassen, „Zugang gewährt“ die ganze Zeit .

Nach dieser Einleitung, könnten Sie schwer sein fragen, was ich tue. Wird er Diablo3 knacken, wenn es aus? Ich kann Ihre Sorgen, ich bin nicht einer dieser Cracker befrieden. Mein Ziel ist crackmes.

Crackmes kann gefunden werden - zum Beispiel - www.crackmes.de. Ein Crackme ein wenig ausführbar ist, das (die meiste Zeit) enthält einen kleinen Algorithmus einen seriellen und Ausgang „Zugriff gewährt“ oder „Zugriff verweigert“ in Abhängigkeit von der Seriell-zu überprüfen. Das Ziel ist, diese ausführbare Ausgabe zu machen „Zugriff gewährt“ die ganze Zeit. Die Methoden, die Sie verwenden dürfen könnte vom Autor beschränkt werden - kein Patchen, keine Demontage - oder irgendetwas erforderlich, dass Sie mit einem binären tun können, objdump und einem Hex-Editor. Cracking crackmes ist ein Teil des Spaßes, auf jeden Fall aber als Programmierer, ich frage mich, wie Sie crackmes erstellen können, die schwierig sind.

Im Grunde denke ich, die Crackme besteht aus zwei Hauptteilen:. Einer bestimmten Serienprüfung und dem umgebenden Code

die Serien Überprüfung schwer macht nur verfolgen Montag verwendet, ist sehr gut möglich, zum Beispiel mir die Idee, die Serien als Eingang für einen simulierten Mikroprozessor zu nehmen, die, um in einem bestimmten Zustand am Ende muss die seriellen akzeptiert werden . Auf der anderen Seite könnte man billig wachsen und mehr über kryptographisch starke Möglichkeiten lernen, diesen Teil zu sichern. So machen diese schwer genug, um die Angreifer zu machen versuchen, die ausführbare Datei patchen nicht tha sein sollte t schwer.

Allerdings ist der schwierigere Teil ist die Sicherung der binär. Lassen Sie uns eine vollkommen sichere Serien Überprüfung übernehmen, die nicht irgendwie rückgängig gemacht werden können (natürlich weiß ich es rückgängig gemacht werden kann, im Zweifelsfall rippen Sie Teile aus dem binär Sie versuchen, zufällige Serien zu knacken und an ihn zu werfen, bis sie akzeptiert). Wie können wir einen Angreifer nur zwingenden Sprünge in den binären zu machen, um unsere binary etwas akzeptieren verhindern?

Ich habe zu diesem Thema ein bisschen gesucht, aber die meisten Ergebnisse auf binäre Sicherheit, Selbst Verifizieren Binärdateien und solche Dinge in Artikel am Ende, die versuchen, Angriffe auf einem Betriebssystem mit kompromittiert Binärdateien zu verhindern. durch bestimmte Binärdateien Unterzeichnung und diese Signaturen mit dem Kernel zu validieren.

Meine Gedanken zur Zeit zusammen aus:

  • in den binären explizite Stellen Überprüfung Sprünge sein.
  • checksumming Teile des Zweier- und vergleichen Prüfsummen zur Laufzeit berechnet mit denen.
  • hat positive und negative runtime-Kontrollen für Ihre Funktionen im Code. Mit Nebenwirkungen auf die Serienprüfung. :)

Sind Sie in der Lage mehr Möglichkeiten zu denken, einen möglichen Angreifer länger zu ärgern? (Natürlich, man kann ihn nicht für immer hält weg, irgendwann, werden alle Prüfungen durchbrochen werden, es sei denn, Sie in der Lage einzubetten die richtige Prüfsumme für ein Programm im Programm selbst, hehe einen Prüfsumme-Generator zu durchbrechen)

War es hilfreich?

Lösung

Sie sind immer in „Anti-Umkehr-Techniken“. Und es ist im Grunde eine Kunst. Schlimmer noch ist, dass selbst wenn Sie newbies stampfen, da „anti-anti Umkehr Plugins“ sind für olly und IDA Pro, dass sie viel von Ihrem Gegen herunterladen und Bypass können.

Gegenmaßnahmen umfassen Debugger Erkennung von Trap-Debugger-APIs oder 'Single-Stepping' zu erfassen. Sie können Code einfügen, dass ein Debugger Breakin nach dem Erkennen, funktioniert weiterhin, aber beginnt zu zufälligen Zeiten viel später im Programm wirkt auf. Es ist wirklich eine Katze und Maus-Spiel und die Cracker haben einen signifikanten Oberhand.

Überprüfen Sie heraus ... http://www.openrce.org/reference_library/anti_reversing -. Einige, was da draußen

http://www.amazon.com/Reversing-Secrets-Engineering-Eldad- Eilam / dp / 0764574817 / - Dieses Buch hat eine wirklich gute Anti-Umkehr Informationen und Schritte durch die Techniken. Toller Ort zu starten, wenn Sie in der Regel int Umkehren sind immer.

Andere Tipps

Ich glaube, diese Dinge sind in der Regel mehr Mühe, als sie wert sind.

Sie verbringen viel Aufwand das Schreiben von Code Binärdatei zu schützen. Die bösen Jungs verbringen weniger Mühe es Cracken (sie sind in der Regel mehr Erfahrung als Sie) und lassen Sie dann den Riss, so dass jeder Ihren Schutz umgehen kann. Die einzig Leute, Sie ärgern sind die Ehrlichen, die von Ihrem eigenen Schutz ist sehr unpraktisch sind.

sehen gerade Piraterie als Kosten der Geschäftstätigkeit - die zusätzlichen Kosten von raubkopierter Software ist Null, wenn Sie alle Unterstützung gewährleisten erfolgt nur für zahlende Kunden

.

Es gibt TPM-Technologie: tpm auf wikipedia

Es ermöglicht Ihnen, die Verschlüsselungs Prüfsummen eines binären auf speziellen Chip zu speichern, die als Einweg Überprüfung handeln könnte.

Hinweis : TPM Art einen schlechten Ruf hat, weil es für DRM verwendet werden könnte. Aber Experten auf dem Gebiet, das ist irgendwie unfair, und es gibt sogar ein open-TPM Gruppe ermöglicht linux-Benutzer steuern, wie genau ihr TPM-Chip verwendet wird.

Einer der stärksten Lösungen für dieses Problem ist Trusted Computing . Grundsätzlich würden Sie die Anwendung verschlüsseln und den Entschlüsselungsschlüssel zu einem speziellen Chip übertragen (die Trusted Platform Module ), würde der Chip nur die Anwendung entschlüsseln, wenn es, dass der Computer in einem „trusted“ Zustand überprüft hat: Zuschauer / Editoren kein Speicher usw. im Grunde genommen keine Debugger, das entschlüsselte Programm anzuzeigen spezielle Hardware nur in der Lage sein würde, Code.

Du willst also ein Programm schreiben, das einen Schlüssel am Anfang und speichert sie im Speicher abrufen akzeptiert, sie anschließend von der Platte. Wenn es der richtige Schlüssel ist, arbeitet die Software. Wenn es der falsche Schlüssel ist, stürzt die Software. Das Ziel ist es, dass es schwer für Piraten einen Arbeitsschlüssel zu erzeugen, und es ist schwer, das Programm zu flicken mit einem nicht lizenzierten Schlüssel zu arbeiten.

Dies kann tatsächlich ohne spezielle Hardware erreicht werden. Betrachten wir unsere genetischen Code. Es funktioniert über die Physik des Universums basiert. Wir versuchen, es zu hacken, erstellen Drogen usw., und wir scheitern kläglich, in der Regel jede Menge unerwünschter Nebenwirkungen haben, weil wir noch nicht vollständig den Komplex „Welt“ Reverse Engineering in dem der genetischen „Code“ entwickelt zu bedienen . Grundsätzlich, wenn Sie alles auf einem gemeinsamen Prozessor (eine gemeinsame „Welt“) laufen lassen, die jeder Zugriff hat, dann ist es praktisch unmöglich, einen solchen sicheren Code zu schreiben, wie demonstriert durch aktuelle Software so leicht geknackt wird.

Um die Sicherheit in der Software zu erreichen, würden Sie im Wesentlichen haben eine eigene ausreichend komplexe Plattform zu schreiben, die andere haben würde, um vollständig und gründlich Ingenieur in umgekehrter Reihenfolge, das Verhalten des Codes ohne unvorhersehbare Nebenwirkungen zu modifizieren. Sobald Ihre Plattform Reverse Engineering, jedoch würden Sie wieder auf Platz eins sein.

Der Haken ist, ist Ihre Plattform wahrscheinlich auf gemeinsame Hardware laufen soll, die Ihre Plattform Reverse Engineering leichter macht, die Ihren Code ein bisschen einfacher macht wiederum Reverse Engineering. Natürlich, das nur die Latte bedeuten kann, ein wenig für das Komplexitätsniveau angehoben Ihre Plattform benötigt ausreichend schwer sein Reverse Engineering.

Was wäre eine ausreichend komplexe Software-Plattform aussehen? Zum Beispiel, vielleicht nach jeweils 6 Additionsoperationen, kehrt die 7.e Zugabe das Ergebnis durch PI durch die Quadratwurzel des Logarithmus des Moduls 5 der Differenz der Gesamtanzahl der subtrahieren unterteilt multipliziert und Multiplikationsoperationen seit der Systeminitialisierung ausgeführt. Die Plattform müßte Spur dieser Zahlen hält unabhängig, als würde der Code selbst, um korrekte Ergebnisse zu entschlüsseln. So würde der Code geschrieben basierend auf der Kenntnis des komplexen zugrunde liegenden Verhalten einer Plattform, die Sie entworfen. Ja, es sei Prozessorzyklen zu essen, aber jemand hätte Reverse Engineering, dass kleine Überraschung Verhalten und Re-Engineering es in jeden neuen Code, um es richtig zu verhalten zu haben. Darüber hinaus würden Sie Ihr eigener Code schwierig sein, einmal geschrieben zu ändern, da es in nicht reduzierbare Komplexität zusammenbrechen würde, mit jeder Zeile auf alles abhängig, die vor passiert ist. Natürlich wäre es viel mehr Komplexität in einer ausreichend sicheren Plattform sein, aber der Punkt ist, dass jemand Ihre Plattform hat Reverse würde Ingenieur, bevor sie zurückentwickeln konnte und Ihren Code ändern, ohne Nebenwirkungen schwächende.

Große Artikel über Kopierschutz und Schutz der Schutz die Piraten Keeping in Bay: Die Implementierung Rissschutz für Spyro: Jahr des Drachen

Die interessanteste Idee erwähnt, dass sich Kaskadierung Ausfälle noch nicht erwähnt wurde - Sie haben Prüfsummen, die ein einzelnes Byte zu ändern, die eine andere Prüfsumme führt zum Scheitern verurteilt. Schließlich eine der Prüfsummen bewirkt, dass das System zum Absturz bringen oder etwas Seltsames zu tun. Dies macht Versuche, Ihr Programm zu Piraten scheint instabil und macht die Sache einen langen Weg von dem Absturz auftreten.

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