WO2013068217A1 - Verfahren zum schutz gegen reverse-engineering eines computerprogramms - Google Patents
Verfahren zum schutz gegen reverse-engineering eines computerprogramms Download PDFInfo
- Publication number
- WO2013068217A1 WO2013068217A1 PCT/EP2012/070567 EP2012070567W WO2013068217A1 WO 2013068217 A1 WO2013068217 A1 WO 2013068217A1 EP 2012070567 W EP2012070567 W EP 2012070567W WO 2013068217 A1 WO2013068217 A1 WO 2013068217A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- program
- computer program
- code
- engineering
- against reverse
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 16
- 238000004590 computer program Methods 0.000 title claims abstract description 9
- 238000004458 analytical method Methods 0.000 abstract description 7
- 230000003068 static effect Effects 0.000 abstract description 6
- 238000003491 array Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 210000004072 lung Anatomy 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000002028 premature Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/101—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM] by binding digital rights to specific entities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/107—License processing; Key processing
- G06F21/1077—Recurrent authorisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/109—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM] by using specially-adapted hardware at the client
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/123—Restricting unauthorised execution of programs by using dedicated hardware, e.g. dongles, smart cards, cryptographic processors, global positioning systems [GPS] devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2125—Just-in-time application of countermeasures, e.g., on-the-fly decryption, just-in-time obfuscation or de-obfuscation
Definitions
- the invention relates to a method for protection against reverse engineering based on the concealment of the control flow.
- Most manufacturers of commercial software systems want to prevent their intellectual property from being stolen and copied by reverse engineering.
- One way to prevent reverse engineering, ie the understanding of the program sequences, is a "code obfuscation" or a source code obfuscation.
- Code obfuscation is a method to ⁇ Change code to ver so that it is incomprehensible to human readers without changing the semantics of the program and is primarily used to program code - intellectual property - to protect against reverse engineering.
- a heavy human readable form generated, but is executed by the processing machine about as fast and the same functionality as the original exercises ⁇ code -
- a well-read and understandable program code - usually using special developed tools.
- An alternative option for code obfuscation is an encryption of the program code. Must there be but decrypted during execution, ie at the latest at load time, the encrypted code to Kings ⁇ nen run at, potential attackers have nevertheless the possibility of such. B. using debugger to track the program flow.
- Code obfuscation has various measures that can be used individually or together: 1. Lexical measures, such as. Equivalent formulas so ⁇ as constant transformations, variable substitution
- the changes in the program flow may be made by compiler techniques, in particular by static analysis, e.g. dead-code analysis, to be leveled. Not necessarily the original source code is restored, but something very similar.
- the object underlying the invention to now consists in DAR, to provide a method for protection against reverse-engineering of a computer program, in which an application of tools for static analysis and an automatic Determined ⁇ lung structures of the program is prevented as possible.
- This object is achieved by the features of claim 1 according to the invention.
- the other claims relate to ⁇ preferred embodiments of the invention.
- the invention relates in essence to a method for protection against reverse engineering of a computer program, in which a general computer program is individualized depending on currently given external circumstances of a respective target system at runtime, thus an application of tools for static analysis and an automatic determination the program structures is prevented as far as possible.
- the program is individualized as much as possible. This happens e.g. by:
- a dongle is additional hardware that can be queried during runtime of the program. In the case of a faulty input / output operation, triggered by non-existent or faulty dongles, the program is aborted, for example. - Any additional constants are inserted (fingerprinting).
- dead code is meant an unreachable code that is never executed at runtime, regardless of the variable values and other conditions.
- boolean maze mazedConstant
- the method is also much better than the usual use of a dongle, in which the principal
- Target value but potentially uses any value to determine a program path.
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Radar, Positioning & Navigation (AREA)
- Remote Sensing (AREA)
- Debugging And Monitoring (AREA)
Abstract
Die Erfindung betrifft im Wesentlichen ein Verfahren zum Schutz gegen Reverse-Engineering eines Computerprogrammes, bei dem ein allgemeines Computerprogramm in Abhängigkeit von aktuell gegebenen äußeren Umständen eines jeweiligen Zielsystems zur Laufzeit individualisiert wird, damit eine Anwendung von Werkzeugen zur statischen Analyse und eine automatische Ermittlung der Programmstrukturen möglichst verhindert wird.
Description
Beschreibung
Verfahren zum Schutz gegen Reverse-Engineering eines Compu- terprogramms
Die Erfindung betrifft ein Verfahren zum Schutz gegen Reverse-Engineering das auf der Verschleierung des Kontrollflusses basiert . Die meisten Hersteller kommerzieller Software-Systeme möchten verhindern, dass Ihr geistiges Eigentum durch Reverse- Engineering gestohlen und kopiert werden kann. Eine Möglichkeit, Reverse-Engineering, also das Verstehen der Programmabläufe zu verhindern, ist eine „Code Obfuscation" bzw. eine Quelltextverschleierung.
Code Obfuscation ist eine Methode, um Programmcode so zu ver¬ ändern, dass dieser für menschliche Leser unverständlich wird, ohne die Semantik des Programms zu verändern und wird in erster Linie eingesetzt, um Programmcode - als geistiges Eigentum - vor Reverse Engineering zu schützen. Hierzu wird aus einem gut les- und nachvollziehbaren Programmcode - meist unter Nutzung speziell dafür entwickelter Tools - eine für Menschen schwerer lesbare Form generiert, die aber von der verarbeitenden Maschine etwa genauso schnell ausgeführt wird und die gleiche Funktionalität ausübt wie der Original¬ code .
Eine alternative Möglichkeit zur Code Obfuscation ist eine Verschlüsselung des Programmcodes. Da während der Ausführung, also spätestens zur Ladezeit, der verschlüsselte Code aber wieder entschlüsselt werden muss um ausgeführt werden zu kön¬ nen, haben potentielle Angreifer trotzdem die Möglichkeit, z. B. mittels Debugger, den Programmablauf zu verfolgen.
Zur Code Obfuscation gibt es verschieden Maßnahmen, die einzeln oder gemeinsam angewendet werden können:
1. Lexikalische Maßnahmen, wie bspw. Äquivalente Formeln so¬ wie konstante Transformationen, Variablensubstitution
und Verschlüsselung von Texten. Diese Maßnahmen können jedoch häufig zumindest teilweise automatisch rückgängig gemacht werden.
2. Änderung des Programmflusses, wie bspw. Umordnung von Anweisungen, scheinbar bedingte Anweisungen und Sprünge, Aufruf von sehr vielen Subroutinen, Einfügen von Leercode
der nichts zum Programm beiträgt und lediglich triviale oder irrelevante Berechnungen ausführt, Mischen von Funktionen und Umstrukturierung von Arrays . Die Änderungen des Programmflusses können durch Compilertechniken, insbesondere durch statische Analyse, z.B. dead-code-Analyse, egalisiert werden. Dabei wird nicht unbedingt der ursprüngliche Quellcode wieder hergestellt, aber doch etwas sehr ähnliches.
3. Abwehr spezieller Angriffe, bspw. mit Anti-Debug-Routinen, die auf die Erkennung und die frühzeitige Terminierung eines Programms bei der Erkennung eines Debuggers abzielen und mit einer Verschlüsselung, bei der Bytecode verschlüsselt und erst von einem speziellen Class-Loader entschlüsselt wird. Hiermit können aber nur bestimmte Debugger blockiert werden und wenn ein Zugang zum laufenden Code vorhanden ist, kann der Text nach der Entschlüsselung beobachtet werden.
Durch Einsatz vorhandener Werkzeuge bzw. bekannter Verfahren, ist es somit möglich die beschriebenen Verschleierungen fast vollständig zu annullieren. Herkömmliche Code Obfuscation reicht also nicht aus, um ein erfolgreiches Reverse- Engineering zu verhindern, insbesondere wenn dazu mächtige statische Analysetools eingesetzt werden.
Die der Erfindung zu Grunde liegende Aufgabe besteht nun dar- in, ein Verfahren zum Schutz gegen Reverse-Engineering eines Computerprogramms anzugeben, bei dem eine Anwendung von Werkzeugen zur statischen Analyse und eine automatische Ermitt¬ lung der Programmstrukturen möglichst verhindert wird.
Diese Aufgabe wird durch die Merkmale des Patentanspruchs 1 erfindungsgemäß gelöst. Die weiteren Ansprüche betreffen be¬ vorzugte Ausgestaltungen der Erfindung.
Die Erfindung betrifft im Wesentlichen ein Verfahren zum Schutz gegen Reverse-Engineering eines Computerprogramms, bei dem ein allgemeines Computerprogramm in Abhängigkeit von aktuell gegebenen äußeren Umständen eines jeweiligen Zielsys- tems zur Laufzeit individualisiert wird, damit eine Anwendung von Werkzeugen zur statischen Analyse und eine automatische Ermittlung der Programmstrukturen möglichst verhindert wird.
Nachfolgend wird die Erfindung anhand von Ausführungs- beispielen näher erläutert.
Die im Folgenden beschriebene Verschleierung kann für sich alleine aber auch zusätzlich zu den oben beschriebenen Obfus- cation-Techniken angewendet werden.
Mit der Individualisierung wird ein weiterer Mechanismus beschrieben, der die vorhandenen Schutzmaßnahmen gegen Reverse- Engineering, die auf der Verschleierung des Kontrollflusses basieren, entscheidend verbessert.
Zunächst wird das Programm möglichst stark individualisiert. Dies geschieht z.B. durch:
- Alle statisch berechenbaren Werte werden durch die entsprechenden Konstanten ersetzt.
- Informationen, die spezifisch für das Zielsystem sind (z.B. Hardware-IOs) werden verwendet.
- Auch die optionale Verwendung von zusätzlichen Komponenten, z.B. ein Dongle, ist möglich. Ein Dongle ist eine zusätzliche Hardware, die zur Laufzeit des Programms abgefragt wer- den kann. Bei einer fehlerhaften Ein/Ausgabeoperation, ausgelöst durch nicht existente oder fehlerhafte Dongles, wird das Programm z.B. abgebrochen.
- Beliebige, zusätzliche Konstanten werden einfügt (Fin- gerprinting) .
Diese o.g. individuellen Werte werden nun verwendet um die Kontrollfluss-Verschleierung zu parametrisieren . Eine
statische Analyse kann diese individuellen Werte nicht analy¬ sieren und folglich kann auch kein "dead code" entfernt werden. Unter "dead code" wird ein unerreichbarer Code verstanden, der unabhängig von den Variablenwerten und anderen Bedingungen zur Laufzeit nie ausgeführt wird.
Im Folgenden wird ein Pseudocode-Beispiel für eine semantisch äquivalente Schreibweise einer if-Anweisung gezeigt wie sie im Falle einer sehr einfachen erfindungsgemäßen Kontroll- fluss-Verschleierung auftritt.
Das Statement
if (a < b) { ... } wird hier automatisch transformiert in: boolean maze = getBool (dongle,l); oder auch alternativ in boolean maze = mazedConstant | |
classLoadingTimeGeneratedlmmutableVar ; und
if ( (maze && (a >= b) ) || (!maze && (a < b) ) {... }
Es wird also eine boolesche Variable „maze" entweder von ei¬ ner Zusatzhardware, bspw. in Form eines Dongles, abgefragt oder alternativ beim Laden aus einer systemspezifischen Konstanten „mazedConstant" in Verknüpfung mit entsprechenden spezifischen Systemeigenschaften „classLoadingTimeGenerate- dlmmutableVar" erzeugt und danach zur Verschleierung der Programmverzweigung herangezogen. Für den Fall, dass der Wert
der boolschen Variablen „maze" nicht wahr ist und die Bedingung a<b der ursprünglichen if-Anweisung erfüllt ist, aber auch für den Fall, dass der Wert der boolschen Variablen „ma- ze" wahr ist und die Bedingung a<b der ursprünglichen if- Anweisung nicht erfüllt ist, wird der Wenn-Zweig der trans¬ formierte if-Anweisung bzw. für die beiden anderen Kombinationen der Sonst-Zweig ausgeführt.
Die entscheidende Verbesserung liegt darin, dass der "dead code" nicht mehr statisch analysierbar ist, da er von einer, im obigen Beispiel „maze" genannten, Eingabe-Variablen abhängt. Das heißt, selbst wenn die Möglichkeit besteht, alle Klassen nach dem Laden zu "dumpen" - also hiervon einen entsprechenden Speicherabzug zu erstellen, reicht dies nicht, um den eingefügten "dead-code" zu finden. Zusätzlich müssten hier alle Abfragen des Dongles aufgespürt und protokolliert werden oder das Programm mit allen möglichen Eingabe- Parameter-Kombinationen ausgeführt werden und dabei die Kontrollpfade protokolliert werden.
Das Verfahren ist auch wesentlich besser, als die übliche Verwendung eines Dongles, bei dem die prinzipielle
Möglichkeit besteht jede Abfrage durch alternativen Code zu ersetzen, der jede Überprüfung bestätigt. Das beschriebene Verfahren hingegen "vergleicht" nicht mit einem einzigen
Sollwert, sondern verwendet potenziell jeden möglichen Wert um einen Programmpfad zu bestimmen.
Claims
1. Verfahren zum Schutz gegen Reverse-Engineering eines Computerprogramms ,
bei dem ein allgemeines Computerprogramm in Abhängigkeit von aktuell gegebenen äußeren Umständen eines jeweiligen Zielsys tems zur Laufzeit individualisiert wird.
2. Verfahren nach Anspruch 1,
- bei dem zunächst Programmverzweigungen des Computerpro¬ gramms durch Parameterabfragen ergänzt werden,
- bei dem zur Laufzeit aus den aktuell gegebenen äußeren Umständen Parameter abgeleitet werden, und
- bei dem zur Laufzeit in Abhängigkeit der Parameter individuelle Programmverzweigungen gebildet werden.
3. Verfahren nach Anspruch 2,
bei dem die Parameter von einer individuellen Zusatzhardware abgefragt werden.
4. Verfahren nach Anspruch 2,
bei dem die Parameter zur Laufzeit individuell in Abhängig- keit der Systemzeit erzeugt werden.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102011085948.9 | 2011-11-08 | ||
DE102011085948A DE102011085948A1 (de) | 2011-11-08 | 2011-11-08 | Verfahren zum Schutz gegen Reverse-Engineering eines Computerprogramms |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2013068217A1 true WO2013068217A1 (de) | 2013-05-16 |
Family
ID=47115864
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/EP2012/070567 WO2013068217A1 (de) | 2011-11-08 | 2012-10-17 | Verfahren zum schutz gegen reverse-engineering eines computerprogramms |
Country Status (2)
Country | Link |
---|---|
DE (1) | DE102011085948A1 (de) |
WO (1) | WO2013068217A1 (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113836545A (zh) * | 2021-08-20 | 2021-12-24 | 咪咕音乐有限公司 | 代码加密方法、装置、设备及存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2913772A1 (de) | 2014-02-28 | 2015-09-02 | Wibu-Systems AG | Verfahren und Computersystem zum Schutz eines Computerprogramms gegen Beeinflussung |
-
2011
- 2011-11-08 DE DE102011085948A patent/DE102011085948A1/de not_active Ceased
-
2012
- 2012-10-17 WO PCT/EP2012/070567 patent/WO2013068217A1/de active Application Filing
Non-Patent Citations (1)
Title |
---|
BERTRAND ANCKAERT ET AL: "Run-Time Randomization to Mitigate Tampering", 29 October 2007, ADVANCES IN INFORMATION AND COMPUTER SECURITY; [LECTURE NOTES IN COMPUTER SCIENCE], SPRINGER BERLIN HEIDELBERG, BERLIN, HEIDELBERG, PAGE(S) 153 - 168, ISBN: 978-3-540-75650-7, XP019073149 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113836545A (zh) * | 2021-08-20 | 2021-12-24 | 咪咕音乐有限公司 | 代码加密方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
DE102011085948A1 (de) | 2013-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3274825B1 (de) | Verfahren und ausführungsumgebung zum gesicherten ausführen von programmbefehlen | |
DE102005021064B4 (de) | Verfahren und Vorrichtung zum Schutz gegen Buffer Overrun-Attacken | |
EP3111355B1 (de) | Verfahren zum schutz eines computerprogramms gegen beeinflussung und computersystem | |
DE202013102179U1 (de) | System zu detektieren von durch eine virtuelle Maschine ausgeführtem Schadcode | |
DE102009041176B4 (de) | Compiler-System und Verfahren zum Kompilieren eines Quellencodes zu einem verschlüsselten Maschinensprachcode | |
DE112017004843T5 (de) | Technologien für deterministischen Codeflussintegritätsschutz | |
DE202011111121U1 (de) | System zum Erfassen komplexer Schadsoftware | |
EP2188755A1 (de) | Verfahren und vorrichtung zur sicherung eines programms gegen eine kontrollflussmanipulation und gegen einen fehlerhaften programmablauf | |
EP1798653B1 (de) | Verfahren, Computerprogrammprodukt und Vorrichtung zum Schützen eines einen Funktionsblock aufweisenden Programms | |
DE102012205689A1 (de) | Anweisungsverschlüsselungs-/-entschlüsselungsanordnung und -verfahren mit iterativer Verschlüsselungs-/Entschlüsselungsaktualisierung | |
EP4187417B1 (de) | Erkennen einer abweichung eines sicherheitszustandes einer recheneinrichtung von einem sollsicherheitszustand | |
WO2013068217A1 (de) | Verfahren zum schutz gegen reverse-engineering eines computerprogramms | |
DE102009050161A1 (de) | Verfahren und Vorrichtung zum Testen eines Systems mit zumindest einer Mehrzahl von parallel ausführbaren Softwareeinheiten | |
EP1439446A1 (de) | Verfahren zum Erweitern eines Programms um eine Kopierschutzfunktion | |
DE102005046696B4 (de) | Verfahren zum Erzeugen von geschütztem Programmcode und Verfahren zum Ausführen von Programmcode eines geschützten Computerprogramms sowie Computerprogrammprodukt | |
DE60212169T2 (de) | Laden von software | |
EP3286683A1 (de) | System und verfahren zur überwachung der integrität einer von einem serversystem an ein clientsystem ausgelieferten komponente | |
WO2006119928A1 (de) | Verfahren zum hinzufügen einer funktionalität zu einem ausführbaren ersten modul eines programmpakets | |
DE102014019090A1 (de) | Verfahren zum Bereitstellen einer sicherheitskritischen Softwareapplikation auf einer Computereinheit | |
EP3745287B1 (de) | Schützen einer softwareapplikation | |
DE602004001293T2 (de) | Programmintegritätsprüfung mittels Statistiken | |
DE102005048029B4 (de) | Compiliervorrichtung und Verfahren zum Compilieren | |
WO2006063876A1 (de) | Verfahren und vorrichtung zur verschlüsselung und ausführung einer software-bibliothek | |
DE102007005887B4 (de) | Hinderung bösartiger Software an der Ausführung innerhalb eines Rechnersystems | |
DE102005063499B4 (de) | Compiliervorrichtung und Verfahren zum Compilieren |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 12780696 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 12780696 Country of ref document: EP Kind code of ref document: A1 |