Schutz der Software vor Reverse Engineering

In diesem Artikel stellen wir uns als Entwickler lizenzierter Software vor und überlegen, wie wir unser Programm vor Hackerangriffen schützen können.





EinfĂĽhrung

Wir werden Methoden zum Schutz von in einer kompilierter Sprache geschriebener Software vor Reverse Engineering, Piraterie und der Einführung von Malware von Drittanbietern in Betracht ziehen. Die bereitgestellten Informationen sind relevant, da eines der Ziele eines proprietären Projekts darin besteht, die Verbreitung dieser Software zu lizenzieren und zu steuern. Fast alle Programme, für die eine Lizenz erforderlich ist, sind Hacking-Versuchen ausgesetzt, und viele von ihnen haben derzeit Gegenstücke raubkopiert. Im Folgenden werden wir der Einfachheit halber das geknackte Programm - geknackt - und den Prozess des Knackens - Riss - nennen.





In diesem Artikel stellen wir uns als Entwickler von lizenzierter Software in C ++ vor und analysieren, welche Schutzmethoden verwendet werden sollten, um den Prozess des Knackens unseres Programms zu erschweren. Es versteht sich, dass jedes Programm gehackt werden kann und es keinen absoluten Schutz gibt. Ziel ist es, das Reverse Engineering am schwierigsten zu machen, und die zum Hacken des Programms erforderliche Zeit ist länger als die Zeit zwischen den Aktualisierungen unserer fiktiven Software.





Allgemeine Information

Softwarepiraterie ist ein großes Problem für Entwickler. Um die Software vor illegaler Verbreitung zu schützen, reicht eine Lizenz nicht aus. Es ist erforderlich, das Programm vor Reverse Engineering zu schützen. Es gibt Hunderte von Möglichkeiten, ein Programm zu schützen, aber alle haben auch ihre eigene Problemumgehung. Angenommen, wir möchten ein proprietäres Programm in kompiliertem C ++ für das Windows-Betriebssystem schreiben, lizenzieren es und verkaufen Kopien. Lassen Sie uns überlegen, wie wir vorgehen müssen, damit unsere Software nur vom Entwickler gekauft werden kann.





++ , . : . , . . , , , .





, , , , . , , , , , . (. reverse engineering). ++ , – . , , - , . .





. , :·      













  • ()









, (. . , ). –   , .





, , , .





, . – . , , . .





, . , , , .









. . , - .





, , . DR7 – debug control register, , . , , DR0 – DR3. , .





– windows, . , DbgUiRemoteBreakin(), , , . , - . , . .





– , , . , , - . , , , , .





– . windows API , , . , :





  • IsDebuggerPresent() –





  • CheckRemoteDebuggerPresent() –





  • NtQueryInformationProcess() –





  • RtlQueryProcessHeapInformation() –





  • RtlQueryProcessDebugInformation() –





  • NtQuerySystemInformation() –





.









. - -, , . . . — , , , . , , .





. . – . , , , , . . , - . , . .





, .





. , , . . VMProtect Themida. : . . , . , – , .





In diesem Artikel haben wir uns mit dem Schutz von Software vor Piraten befasst. Die Verwendung all dieser Schutzmethoden hat den Zeit- und Ressourcenaufwand für das Knacken unseres Programms erheblich erhöht. Es gibt keine absolute Schutzmethode, jeder Schutz kann umgangen werden. In diesem Fall besteht das Hauptziel unseres Schutzes darin, sicherzustellen, dass das Knacken des Programms länger dauert als das Veröffentlichen eines Updates. In diesem Fall kann das Programm als gut geschützt angesehen werden.












All Articles