WO2009010338A1 - Verfahren zur rechnergestützten obfuskierung eines softwareprogramms und computerprogrammprodukt - Google Patents

Verfahren zur rechnergestützten obfuskierung eines softwareprogramms und computerprogrammprodukt Download PDF

Info

Publication number
WO2009010338A1
WO2009010338A1 PCT/EP2008/057077 EP2008057077W WO2009010338A1 WO 2009010338 A1 WO2009010338 A1 WO 2009010338A1 EP 2008057077 W EP2008057077 W EP 2008057077W WO 2009010338 A1 WO2009010338 A1 WO 2009010338A1
Authority
WO
WIPO (PCT)
Prior art keywords
source code
annotations
code
software program
computer
Prior art date
Application number
PCT/EP2008/057077
Other languages
English (en)
French (fr)
Inventor
Boris Petrovic
Original Assignee
Siemens Aktiengesellschaft
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Siemens Aktiengesellschaft filed Critical Siemens Aktiengesellschaft
Publication of WO2009010338A1 publication Critical patent/WO2009010338A1/de

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Definitions

  • the invention relates to a method for the computer-aided obfuscation of a software program and a computer program product.
  • a software program i. More specifically, a source code of the software program is transformed such that disassembly is impossible or more difficult to understand in an analysis, but the functionality of the transformed source code is identical to the functionality of the original source code.
  • Source code may also be already compiled code (e.g., machine code or byte code).
  • Obfuscators which is designed in the form of a software program.
  • An obfuscator is a tool for concealing certain information contained in the source code.
  • the obfuscator is intended to complicate the reconversion of the transformed source code into a human-readable form.
  • the information contained in the source code is obscured to such an extent that the retrieval from a machine-readable form can only be achieved at great expense.
  • the transformed, i. obfuscated, source code is again a source code that is difficult to read and understand.
  • obfuscation usually happens in a manual and iterative manner.
  • the step of obfuscation must be performed repeatedly, whereby after each step of the obfuscation a test takes place whether the obfuscation does not affect the functionality of the software program.
  • a goal in obfuscation is therefore to obfuscate as much source code as possible, i. to disguise, but not to break existing code dependencies.
  • the obfuscator To perform the obfuscation, the obfuscator becomes a
  • Control or configuration file supplied which is readable by this.
  • the control or configuration file includes control information used to perform the obfuscation process. This requires the central presence of such a control or configuration file, which file is typically created manually.
  • the source code of the software program must be analyzed to create the configuration file.
  • the obfuscation process can be time-consuming and resource-consuming.
  • a method according to the invention for the computerized obfuscation of a software program comprises the following steps: A source code of the software program is provided with one or more annotations, each annotation being associated with a particular code section of the source code and comprising information as to whether the relevant code section is to be obfuscated or Not. The one or more annotations are read out computer-aided from the source code of the software program. The read annotations are fed to an obfuscator for obfuscation of the software program.
  • Annotations are known as a means of structuring source code texts that partially automate the generation of program texts and auxiliary files associated with the programming.
  • information base for the automatic generation of the additional files information from the source text is used, which is excluded by a compiler during the translation. This information is called annotations or meta-information or metadata.
  • each of the annotations contains a defined information as to whether or not that particular code section to which an annotation is assigned is obfuscated (such as code sections created in a different programming language). This can be done on a fine granular level of the source code. Code sections that are sensitive to obfuscation may be identified in the source code with one or more indications. notations. It is also possible to provide such code sections with one or more annotations which are to be subjected to obfuscation.
  • the annotations are computer-aided from the
  • Source code of the software program read and supplied to the obfuscator as control variables. This provides a systematic and reproducible way to annotate the software.
  • the invention provides a fine resolution for the obfuscation and provides a way to place the obfuscation information directly into the source code. This facilitates the handling of obfuscation.
  • the annotation, with regard to the obfuscation can be carried out in parallel since the obfuscation information is now provided decentrally.
  • the obfuscation information may be added directly by the developer of the relevant code portion of the software program.
  • the annotations read or read from the source code of the software program are written computer-aided into a configuration file which can be read by the obfuscator, the annotations representing control information for the obfuscator according to which the obfuscation is carried out.
  • This step can be done using software tools. This eliminates the need to manually create the configuration file.
  • the annotations read or read from the source code of the software program are computer-aidedly converted before they are likewise written into the configuration file with the aid of a computer. This ensures that a format specified in the configuration file for processing by the obfuscator is maintained.
  • the obfuscated code is not functionally identical to the source code
  • at least some of the annotations supplied to the obfuscator are changed.
  • one or more of the obfuscator-supplied annotations are deleted.
  • one or more new annotations are added to the obfuscator.
  • the obfuscation is then performed again and it is checked whether the obfuscated code is now functionally identical to the source code. If this is not the case, then the procedure just described is iteratively repeated until a functional equality is established.
  • the altering, deleting or addition of the annotation or annotations may be done according to an embodiment of the method in the source code.
  • changing, deleting or adding one or more obfuscator commands can be done directly in the configuration file.
  • a further embodiment of the method provides that the source code of the software program has a code hierarchy with several levels and the one or more annotations NEN may be provided in the source code at any level of the code hierarchy.
  • the annotations can, for example, be carried out in so-called packages in Java or in so-called assemblies with .NET at the so-called class level, at the so-called method level or at the so-called field level.
  • the invention further comprises a computer program product which can be loaded directly into the internal memory of a digital computer and comprises software code sections with which the steps of the above-described
  • a source code of a software program is created.
  • the latter is provided with one or more annotations in a step S2, each annotation being associated with a specific code section of the source code and comprising information as to whether the relevant code section is to be obfuscated or not.
  • the provision of the source code (S1) and the provision of the source code with annotations (S2) are shown as different steps, which in practice does not necessarily have to be so. Rather, it is expedient that the annotations already during the creation of the source code, i. during the execution of step S1, to work into the source code.
  • the annotations can be arranged here in arbitrary fineness in the source code. In particular, they may be located at any level of a code hierarchy of the source code. This allows the granularity of Obfusk réelle in a simple and efficient way to control.
  • a step S3 the annotations contained in the source code are read out computer-aided. This can be done using well-known software tools that are suitable for the documentation of a software program using annotations.
  • the notations read from the source code of the software program are written in a computer-aided manner in a configuration file in a step S4, whereby the step of converting the read-out annotations into a specific format can be included.
  • step S6 the obfuscation of the compiled source code takes place, for which purpose the information contained in the configuration file is used as control information for the obfuscator.
  • the feeding of the configuration file as control information to the obfuscator is indicated by the thick arrow.
  • step S7 it is checked in step S7 whether the obfuscated source code is functionally identical to the original source code. If the function equality is given, the obfuscation can be terminated at this point. If, on the other hand, the functional equality is not given, then at least some of the annotations supplied to the obfuscator can be changed, deleted or new annotations can be added.
  • the known procedure of annotation is thus applied to the process of obfuscation.
  • the annotations specifically pertaining to obfuscation. This allows a fine resolution of Achieve obfuscation. This is accomplished by placing obfuscation information directly into the source code, making control and tracing easier.
  • the annotation can be done decentrally, which is an advantage when many people are involved in creating the software program. Due to the annotations provided in the source code, the creation of the obfuscator configuration file can be automated and computer-aided.
  • the inventive method thus leads to a faster and more efficient Obfusk réelle, in particular modern programming techniques, such as the "Dynamic Loading” and the “Dynamic Invocation (Reflection in Java)" can be considered in a simple and reliable manner.
  • a concrete implementation of the method according to the invention can e.g. in Java, with an example program provided with obfuscation annotations below.
  • Javadoc tags these are the annotations
  • Javadoc Doclet was created.
  • the doclet has collected annotation information from the source code to be obfuscated, from which an input script for the obfuscator can be created with a list of classes, methods or packages (so-called packages) which must be excluded from obfuscation.
  • packages which must be excluded from obfuscation.
  • the tool "Zelix Klassmaster" can be used.
  • the obfuscation annotation has the following syntax:
  • the package "obfusctejdoc" should not be obfuscated.
  • the method "public static void main” should not be obfuscated due to the annotation.
  • the following annotation further specifies that the obfuscation should not be performed considering the preserve_package parameter, and the other three constructor, foo, and iCount members of the TestTagClass class are obfuscated.
  • a syntax was chosen for the obfuscation, indicating which methods, classes, packages, ... are not to be obfuscated.
  • Obfuscating code sections do not need to be annotated with such an annotation. This means that sections of code that are not annotated will be obfuscated, while flagged sections will be excluded from obfuscation.
  • the annotation can also be carried out in the opposite way, so that the code sections to be obfuscated are explicitly provided with an annotation and then in the example, i. the configuration file are included.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

Es wird ein Verfahren zur rechnergestützten Obfuskierung eines Softwareprogramms beschrieben, bei dem folgende Schritt durchgeführt werden: Ein Quellcode des Softwareprogramms wird mit einer oder mehreren Annotationen versehen (S2), wobei jede Annotation einem bestimmten Codeabschnitt des Quellcodes zugeordnet ist und eine Information umfasst, ob der betreffende Codeabschnitt zu obfuskieren ist oder nicht. Die eine oder die mehreren Annotationen werden rechnergestützt aus dem Quellcode des Softwareprogramms ausgelesen (S3). Die ausgelesenen Annotationen werden dann einem Obfuskator zur Obfuskierung des Softwareprogramms zugeführt.

Description

Beschreibung
Verfahren zur rechnergestützten Obfuskierung eines Softwareprogramms und Computerprogrammprodukt
Die Erfindung betrifft ein Verfahren zur rechnergestützten Obfuskierung eines Softwareprogramms und ein Computerprogrammprodukt .
Durch eine Obfuskierung wird ein Softwareprogramm, d.h. genauer ein Quellcode des Softwareprogramms derart transformiert, dass eine Disassemblierung unmöglich ist oder es bei einer Analyse schwieriger zu verstehen ist, wobei die Funktionalität des transformierten Quellcodes jedoch identisch zu der Funktionalität des ursprünglichen Quellcodes ist. Der
Quellcode kann auch bereits compilierter Code (z.B. Maschinencode oder Byte-Code) sein. Die Obfuskierung geschieht mit Hilfe eines sog. Obfuskators, welcher in Form eines Softwareprogramms ausgebildet ist. Ein Obfuskator ist ein Hilfsmittel zur Verschleierung von bestimmten im Quellcode enthaltenen Informationen. Der Obfuskator soll die Rückumwandlung des transformierten Quellcodes in eine für einen Menschen lesbare Form erschweren. Dazu wird bei der Obfuskierung die im Quellcode enthaltene Information soweit verschleiert, dass die Wiedergewinnung aus einer maschinenlesbaren Form nur noch unter großem Aufwand erreicht werden kann. Der transformierte, d.h. obfuskierte, Quellcode ist wiederum ein Quellcode, der schwer zu lesen und zu verstehen ist.
Die Obfuskierung großer, komplexer Softwareprogramme ist in der Praxis eine schwierige und komplexe Angelegenheit. Häufig kann der Vorgang des Obfuskierens nicht in einem einzigen Schritt durchgeführt werden, da der Quellcode eine große Anzahl an öffentlichen Schnittstellen (sog. public interfaces) , Klassen (sog. classes) oder Kontrakten (sog. contracts) zu Nutzern des Softwaresystems aufweist, welche extern genutzt werden. Ferner müssen Variablen-Namen (sog. identifier names) beibehalten werden und dürfen nicht obfuskiert werden. Dar- über hinaus besteht das Problem, dass moderne Softwaresysteme, sog. Frameworks, häufig Technologien, wie das sog. Dynamic Loading oder das sog. Dynamic Invocation (Reflection in Java) nutzen. Ein Quellcode, der sich auf solcherlei dynami- sehe Nutzungen bezieht, darf ebenfalls der Obfuskierung nicht unterworfen werden, da ansonsten die erforderliche Funktionsgleichheit von Quellcode und transformiertem Quellcode nicht gewährleistet ist.
In der Praxis geschieht das Obfuskieren deshalb in der Regel auf manuelle und iterative Weise. Hierbei muss der Schritt der Obfuskierung wiederholt durchgeführt werden, wobei nach jedem Schritt der Obfuskierung ein Test stattfindet, ob die Obfuskierung die Funktionalität des Softwareprogramms nicht beeinträchtigt. Ein Ziel bei der Obfuskierung ist es deshalb, so viel Quellcode wie möglich zu obfuskieren, d.h. zu verschleiern, jedoch existierende Codeabhängigkeiten nicht zu brechen .
Zur Durchführung der Obfuskierung wird dem Obfuskator eine
Steuer- oder Konfigurationsdatei zugeführt, welche durch diesen auslesbar ist. Die Steuer- oder Konfigurationsdatei um- fasst Steuerinformationen, nach denen der Prozess des Ob- fuskierens ausgeführt wird. Hierdurch wird das zentrale Vor- handensein einer derartigen Steuer- oder Konfigurationsdatei erforderlich, wobei diese Datei in der Regel manuell erstellt wird. Bei komplexen Softwaresystemen, welches durch eine Vielzahl an Programmierern erstellt wird, muss zur Erstellung der Konfigurationsdatei der Quellcode des Softwareprogramms analysiert werden. Je nach Komplexität des Softwareprogramms kann der Vorgang des Obfuskierens zeit- und ressourcenaufwän- dig sein.
Es ist daher Aufgabe der vorliegenden Erfindung, ein Verfah- ren zur rechnergestützten Obfuskierung eines Softwareprogramms anzugeben, mit welchem ein einfacheres und schnelleres Obfuskieren möglich ist. Diese Aufgabe wird durch die Merkmale der unabhängigen Patentansprüche gelost. Vorteilhafte Ausfuhrungsformen ergeben sich aus den abhangigen Patentansprüchen.
Ein erfindungsgemaßes Verfahren zur rechnergestutzten Ob- fuskierung eines Softwareprogramms umfasst die folgenden Schritte: Ein Quellcode des Softwareprogramms wird mit einer oder mehreren Annotationen versehen, wobei jede Annotation einen bestimmten Codeabschnitt des Quellcodes zugeordnet ist und eine Information umfasst, ob der betreffende Codeabschnitt zu obfuskieren ist oder nicht. Die eine oder die mehreren Annotationen werden rechnergestutzt aus dem Quellcode des Softwareprogramms ausgelesen. Die ausgelesenen Annotationen werden einem Obfuskator zur Obfuskierung des Softwarepro- gramms zugeführt.
Annotationen sind als Mittel zur Strukturierung von Programmquelltexten, bei der die Erzeugung von Programmtexten und mit der Programmierung verbundene Hilfsdateien teilweise automa- tisiert wird, bekannt. Als Informationsgrundlage für die automatische Erzeugung der zusatzlichen Dateien werden Informationen aus dem Quelltext herangezogen, die von einem Compiler bei der Übersetzung ausgeklammert werden. Diese Informationen nennt man Annotationen oder auch Metainformationen oder Meta- daten.
Diese an sich bei der Programmierung bekannte Vorgehensweise macht sich die Erfindung bei der rechnergestutzten Obfuskierung eines Softwareprogramms zunutze. Der Quellcode des Soft- wareprogramms wird mit Annotationen versehen, welche speziell den Vorgang des Obfuskierens betreffen. Insbesondere enthalt jede der Annotationen eine definierte Information, ob der betreffende Codeabschnitt, dem eine Annotation zugewiesen ist, zu obfuskieren ist oder nicht (wie z.B. Codeabschnitte, die in einer anderen Programmiersprache erstellt sind) . Dies kann auf einem fein-granularen Niveau des Quellcodes erfolgen. Codeabschnitte, die bezuglich einer Obfuskierung sensitiv sind, können in dem Quellcode mit einer oder mehreren An- notationen versehen werden. Es können auch solche Codeabschnitte mit einer oder mehreren Annotationen versehen werden, welche der Obfuskierung unterzogen werden sollen.
Der oder die Annotationen werden rechnergestützt aus dem
Quellcode des Softwareprogramms ausgelesen und dem Obfuskator als Steuergrößen zugeführt. Auf diese Weise wird ein systematischer und reproduzierbarer Weg für die Annotation der Software bereitgestellt. Die Erfindung ermöglicht eine feine Auf- lösung für die Obfuskierung und stellt einen Weg bereit, die Obfuskierungsinformation direkt in den Quellcode zu platzieren. Hierdurch wird die Handhabung der Obfuskierung erleichtert. Insbesondere in großen Projekten, bei welchen eine Vielzahl von Programmierern beteiligt sind, kann die Annota- tion, betreffend die Obfuskierung, parallel durchgeführt werden, da die Obfuskierungsinformation nunmehr dezentral bereitgestellt wird. Die Obfuskierungsinformation kann direkt durch den Entwickler des betreffenden Codeabschnitts des Softwareprogramms hinzugefügt werden.
Gemäß einer vorteilhaften Ausgestaltung werden die aus dem Quellcode des Softwareprogramms ausgelesene oder ausgelesenen Annotationen rechnergestützt in eine Konfigurationsdatei geschrieben, welche durch den Obfuskator auslesbar ist, wobei die Annotationen Steuerinformationen für den Obfuskator darstellen, nach denen die Obfuskierung ausgeführt wird. Dieser Schritt kann unter Verwendung von Softwaretools erfolgen. Hierdurch wird die manuelle Erstellung der Konfigurationsdatei entbehrlich.
In einer weiteren zweckmäßigen Ausführungsform werden die aus dem Quellcode des Softwareprogramms ausgelesene oder ausgelesenen Annotationen rechnergestützt konvertiert bevor diese ebenfalls rechnergestützt in die Konfigurationsdatei ge- schrieben werden. Hierdurch wird sichergestellt, dass ein in der Konfigurationsdatei vorgeschriebenes Format zur Verarbeitung durch den Obfuskator eingehalten wird. In einer weiteren Ausfuhrungsform ist vorgesehen, dass das Versehen des Quellcodes des Softwareprogramms mit der einen oder den mehreren Annotationen vor dem Komprimieren des Quellcodes erfolgt. Zweckmaßigerweise erfolgt das Versehen des Quellcodes mit Annotationen bereits wahrend der Programmierung oder der Erstellung des Quellcodes durch den Programmierer .
In einer weiteren Ausfuhrungsform wird nach der Obfuskierung des Softwareprogramms überprüft, ob der obfuskierte Code funktional identisch mit dem Quellcode ist. Hierdurch soll in bekannter Weise sichergestellt werden, dass eine Funktionsgleichheit von ursprunglichem und obfuskiertem Quellcode gegeben ist.
Wenn bei dieser Überprüfung festgestellt wurde, dass der obfuskierte Code funktional nicht identisch mit dem Quellcode ist, werden gemäß einer Ausfuhrungsform zumindest einzelne der dem Obfuskator zugefuhrte Annotationen verändert. Alter- nativ oder zusatzlich werden eine oder mehrere der dem Obfuskator zugefuhrten Annotationen geloscht. Weiter alternativ oder weiter zusatzlich werden eine oder mehrere neue Annotationen dem Obfuskator hinzugefugt. Anschließend wird die Obfuskierung erneut durchgeführt und überprüft, ob der ob- fuskierte Code nunmehr funktional identisch mit dem Quellcode ist. Ist dies nicht der Fall, so wird das eben beschriebene Vorgehen iterativ wiederholt, bis eine Funktionsgleichheit hergestellt ist.
Das Verandern, das Loschen oder das Hinzufugen der Annotation oder der Annotationen kann gemäß einer Ausbildung des Verfahrens in dem Quellcode erfolgen. Alternativ kann das Verandern, das Loschen oder das Hinzufugen eines oder mehrerer Ob- fuskator-Befehle in der Konfigurationsdatei direkt erfolgen.
Eine weitere Ausgestaltung des Verfahrens sieht vor, dass der Quellcode des Softwareprogramms eine Code-Hierarchie mit mehreren Niveaus aufweist und die eine oder mehreren Annotatio- nen in dem Quellcode auf einem beliebigen Niveau der Code- Hierarchie vorgesehen sein können. Die Annotationen können beispielsweise in sog. Packages in Java oder in sog. As- semblys bei .NET auf sog. Class Level, auf sog. Method Level oder auf sog. Field Level erfolgen.
Von der Erfindung ist ferner ein Computerprogrammprodukt um- fasst, das direkt in den internen Speicher eines digitalen Computers geladen werden kann und Softwarecodeabschnitte um- fasst, mit denen die Schritte des vorstehend beschriebenen
Verfahrens ausgeführt werden, wenn das Produkt auf einem Computer läuft.
Die Erfindung wird nachfolgend anhand einer Figur näher er- läutert. Die einzige Figur zeigt den Verfahrensablauf des erfindungsgemäßen Verfahrens .
In einem Schritt Sl wird ein Quellcode eines Softwareprogramms erstellt. Dieser wird in einem Schritt S2 mit einer oder mehreren Annotationen versehen, wobei jede Annotation einem bestimmten Codeabschnitt des Quellcodes zugeordnet ist und eine Information umfasst, ob der betreffende Codeabschnitt zu obfuskieren ist oder nicht. In der Figur ist das Bereitstellen des Quellcodes (Sl) und das Versehen des Quell- codes mit Annotationen (S2) als unterschiedliche Schritte dargestellt, was in der Praxis jedoch nicht notwendigerweise so sein muss. Vielmehr ist es zweckmäßig, die Annotationen bereits während der Erstellung des Quellcodes, d.h. während der Durchführung des Schritts Sl, in den Quellcode einzuar- beiten. Die Annotationen können hierbei in beliebiger Feinheit in dem Quellcode angeordnet werden. Sie können insbesondere auf jedem Niveau einer Code-Hierarchie des Quellcodes angeordnet sein. Hierdurch lässt sich die Granularität der Obfuskierung auf einfache und effiziente Weise steuern.
In einem Schritt S3 werden die in dem Quellcode enthaltenen Annotationen rechnergestützt ausgelesen. Dies kann unter Verwendung bekannter Softwaretools erfolgen, welche für die Do- kumentation eines Softwareprogramms anhand von Annotationen bekannt sind.
Die aus dem Quellcode des Softwareprogramms ausgelesenen An- notationen werden in einem Schritt S4 rechnergestützt in eine Konfigurationsdatei geschrieben, wobei hiermit der Schritt der Konvertierung der ausgelesenen Annotationen in ein bestimmtes Format eingeschlossen sein kann.
In einem Schritt S5 wird der mit Annotationen versehene
Quellcode kompiliert. In Schritt S6 findet die Obfuskierung des kompilierten Quellcodes statt, wobei hierzu die in der Konfigurationsdatei enthaltenen Informationen als Steuerinformationen für den Obfuskator verwendet werden. Das Zuführen der Konfigurationsdatei als Steuerinformationen zu dem Obfuskator ist durch den dicken Pfeil gekennzeichnet. Nach dem Obfuskieren wird in Schritt S7 überprüft, ob der obfuskierte Quellcode funktional identisch mit dem ursprünglichen Quellcode ist. Ist die Funktionsgleichheit gegeben, so kann die Obfuskierung an dieser Stelle beendet werden. Ist die Funktionsgleichheit hingegen nicht gegeben, so können zumindest einzelne der dem Obfuskator zugeführten Annotationen verändert, gelöscht oder auch neue Annotationen hinzugefügt werden. Dies kann, wie dies in Fig. 1 schematisch dargestellt ist, durch das Verändern, das Löschen oder das Hinzufügen von Annotationen in der Konfigurationsdatei oder in dem Quellcode (Pfeil von S7 nach S2) erfolgen. Nicht dargestellt ist eine Variante, bei der der mit Annotationen versehene Quellcode direkt geändert wird, die Annotationen erneut aus dem Quell- code ausgelesen und in der Konfigurationsdatei überführt werden .
Im Rahmen der Erfindung wird damit das an sich bekannte Vorgehen des Annotierens auf den Prozess der Obfuskierung ange- wendet. Auf diese Weise wird ein systematischer und reproduzierbarer Weg für die Annotation des Softwareprogramms bereitgestellt, wobei die Annotationen speziell die Obfuskierung betreffen. Hierdurch lässt sich eine feine Auflösung der Obfuskierung erzielen. Erreicht wird dies dadurch, dass Ob- fuskierungsinformationen direkt in dem Quellcode platziert werden, so dass die Steuerung und das Nachvollziehen einfacher werden. Ferner kann das Annotieren dezentral erfolgen, was ein Vorteil ist, wenn viele Personen an der Erstellung des Softwareprogramms beteiligt sind. Aufgrund der in dem Quellcode vorgesehenen Annotationen kann das Erstellen der Konfigurationsdatei für den Obfuskator automatisiert und rechnergestützt erfolgen. Das erfindungsgemäße Verfahren führt damit zu einer schnelleren und effizienteren Obfuskierung, wobei insbesondere moderne Programmiertechniken, wie das „Dynamic Loading" und das „Dynamic Invocation (Reflection in Java) " auf einfache und zuverlässige Weise berücksichtigt werden können.
Eine konkrete Implementierung des erfindungsgemäßen Verfahrens kann z.B. in Java bereitgestellt werden, wobei nachfolgend ein beispielhaftes Programm mit Obfuskierungs- Annotationen versehen ist. Für die Annotation in dem Quellco- de werden sog. Javadoc Tags (dies sind die Annotationen) erzeugt und verwendet. Dementsprechend wurde beim Auslesen der Tags ein Javadoc Doclet erstellt. Das Doclet weist gesammelte Annotationsinformationen von dem zu obfuskierenden Quellcode auf, aus denen ein Eingangsscript für den Obfuskator mit ei- ner Liste von Klassen, Methoden oder Paketen (sog. Packages) erstellt werden kann, welche von einer Obfuskierung ausgenommen werden müssen. Für die Obfuskierung kann z.B. das Tool „Zelix Klassmaster" verwendet werden.
In dem nachfolgenden Quellcode-Beispiel ist das Ergebnis des Auslesens von Annotationen aus einem zu obfuskierenden Quellcode (nicht dargestellt) wiedergegeben.
package obfuscatejdoc;
/ -k -k
* Θauthor Boris * TODO To change the template for this generated type com- ment go to * Window - Preferences - Java - Code Style - Code Templates
* Θdont . obfuscate preserve_pkg
*/ public class TestTagClass {
public TestTagClass () { super () ;
// TODO Auto-generated constructor stub }
/**
* Θdont . obfuscate
* Θparam args
*/ public static void main (String [ ] args) { }
* Θparam args
*/ public void foo() {}
private int iCount;
}
Die die Obfuskierung betreffende Annotation weist folgende Syntax auf:
*@dont obfuscate */. Wie in dem oben stehenden Beispiel zu erkennen ist, soll das Package „obfusctejdoc" keiner Obfuskierung unterzogen werden, Ebenso soll die Methode „public static void main" aufgrund der Annotation nicht obfuskiert werden. In der darauffolgen- den Annotation ist weiter präzisiert, dass die Obfuskierung unter Berücksichtigung des Parameters „preserve_package" nicht durchgeführt werden soll. Die anderen drei Elemente „constructor", „foo" und „iCount" der Klasse „TestTagClass" werden obfuskiert.
In dem Beispiel wurde für die Obfuskierung eine Syntax gewählt, welche angibt, welche Methoden, Klassen, Packages, ... nicht zu obfuskieren sind. Zu obfuskierende Codeabschnitte brauchen bei einer derartigen Annotation nicht mit einer An- notation versehen zu werden. Dies bedeutet, Codeabschnitte, die mit keiner Annotation versehen sind, werden obfuskiert, während gekennzeichnete von der Obfuskierung ausgeschlossen werden. In entsprechender Weise kann die Annotation auch in umgekehrter Weise erfolgen, so dass die zu obfuskierenden Co- deabschnitte explizit mit einer Annotation versehen werden und dann in dem Beispiel, d.h. der Konfigurationsdatei, enthalten sind.

Claims

Patentansprüche
1. Verfahren zur rechnergestützten Obfuskierung eines Softwareprogramms, bei dem - ein Quellcode des Softwareprogramms mit einer oder mehreren Annotationen versehen wird (S2) , wobei jede Annotation einem bestimmten Codeabschnitt des Quellcodes zugeordnet ist und eine Information umfasst, ob der betreffende Codeabschnitt zu obfuskieren ist oder nicht; - die eine oder die mehreren Annotationen rechnergestützt aus dem Quellcode des Softwareprogramms ausgelesen werden (S3) ; die ausgelesenen Annotationen einem Obfuskator zur Obfuskierung des Softwareprogramms zugeführt werden (S4, S6) .
2. Verfahren nach Anspruch 1, bei dem die aus dem Quellcode des Softwareprogramms ausgelesene oder ausgelesenen Annotationen rechnergestützt in eine Konfigurationsdatei geschrieben werden, welche durch den Obfuskator auslesbar ist, wobei die Annotationen Steuerinformationen für den Obfuskator darstellen, nach denen die Obfuskierung ausgeführt wird.
3. Verfahren nach Anspruch 2, bei dem die aus dem Quellcode des Softwareprogramms ausgelesene oder ausgelesenen Annotationen rechnergestützt konvertiert werden bevor diese rechnergestützt in die Konfigurationsdatei geschrieben werden.
4. Verfahren nach einem der vorherigen Ansprüche, bei dem das Versehen des Quellcodes des Softwareprogramms mit der einen oder den mehreren Annotationen vor dem Compilieren des Quellcodes erfolgt.
5. Verfahren nach einem der vorherigen Ansprüche, bei dem nach der Obfuskierung des Softwareprogramms überprüft wird, ob der obfuskierte Code funktional identisch mit dem Quellcode ist.
6. Verfahren nach Anspruch 5, bei dem zumindest einzelne der dem Obfuskator zugefuhrten Annotationen verändert werden, wenn bei der Überprüfung festgestellt wurde, dass der ob- fuskierte Code funktional nicht identisch mit dem Quellcode ist .
7. Verfahren nach Anspruch 5 oder 6, bei dem eine oder mehrere der dem Obfuskator zugefuhrten Annotationen geloscht werden, wenn bei der Überprüfung festgestellt wurde, dass der obfuskierte Code funktional nicht identisch mit dem Quellcode ist .
8. Verfahren nach Anspruch 5, 6 oder 7, bei dem eine oder mehrere neue Annotationen dem Obfuskator hinzugefugt werden, wenn bei der Überprüfung festgestellt wurde, dass der obfuskierte Code funktional nicht identisch mit dem Quellcode ist .
9. Verfahren nach einem der Ansprüche 6 bis 8, bei dem das Verandern, das Loschen oder das Hinzufugen der Annotation o- der Annotationen in dem Quellcode erfolgt.
10. Verfahren nach einem der Ansprüche 6 bis 8, bei dem das Verandern, das Loschen oder das Hinzufugen der Annotation o- der Annotationen in der Konfigurationsdatei erfolgt.
11. Verfahren nach einem der vorherigen Ansprüche, bei dem der Quellcode des Softwareprogramms eine Code-Hierarchie mit mehreren Nivaus aufweist und die eine oder mehreren Annotati- onen in dem Quellcode auf einem beliebigen Niveau der Code- Hierarchie vorgesehen sein können.
12. Computerprogrammprodukt, das direkt in den internen Speicher eines digitalen Computers geladen werden kann und Soft- warecodeabschnitte umfaßt, mit denen die Schritte gemäß einem der vorherigen Ansprüche ausgeführt werden, wenn das Produkt auf einem Computer lauft.
PCT/EP2008/057077 2007-07-13 2008-06-06 Verfahren zur rechnergestützten obfuskierung eines softwareprogramms und computerprogrammprodukt WO2009010338A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE102007032813 2007-07-13
DE102007032813.5 2007-07-13

Publications (1)

Publication Number Publication Date
WO2009010338A1 true WO2009010338A1 (de) 2009-01-22

Family

ID=39719032

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/EP2008/057077 WO2009010338A1 (de) 2007-07-13 2008-06-06 Verfahren zur rechnergestützten obfuskierung eines softwareprogramms und computerprogrammprodukt

Country Status (1)

Country Link
WO (1) WO2009010338A1 (de)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2598987A1 (de) * 2010-07-29 2013-06-05 Irdeto Canada Corporation System und verfahren für effizienten einsatz von höchst unterschiedlichen programminstanzen für den widerstand gegenüber verschiedenen angriffen
WO2016096139A1 (de) * 2014-12-18 2016-06-23 Giesecke & Devrient Gmbh Verfahren zum bereitstellen einer sicherheitskritischen softwareapplikation auf einer computereinheit
WO2018024364A1 (de) 2016-08-03 2018-02-08 Giesecke+Devrient Mobile Security Gmbh Individuelles verschlüsseln von steuerbefehlen
CN110383275A (zh) * 2017-03-10 2019-10-25 西门子股份公司 用于程序代码的计算机辅助的代码混淆的方法
DE102018009054A1 (de) 2018-11-16 2020-05-20 Giesecke+Devrient Mobile Security Gmbh Ausführungsumgebung für eine künstliche Intelligenz

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1349035A2 (de) * 2002-03-25 2003-10-01 Nec Corporation Selbst wiederherstellendes Programm, Programmerzeugungsmethode und Vorrichtung, Informationsbearbeitungsvorrichtung und Programm
US20060101047A1 (en) * 2004-07-29 2006-05-11 Rice John R Method and system for fortifying software
WO2007055729A2 (en) * 2005-05-19 2007-05-18 Reifer Consultants, Inc. Protecting applications software against unauthorized access, reverse engineering or tampering

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1349035A2 (de) * 2002-03-25 2003-10-01 Nec Corporation Selbst wiederherstellendes Programm, Programmerzeugungsmethode und Vorrichtung, Informationsbearbeitungsvorrichtung und Programm
US20060101047A1 (en) * 2004-07-29 2006-05-11 Rice John R Method and system for fortifying software
WO2007055729A2 (en) * 2005-05-19 2007-05-18 Reifer Consultants, Inc. Protecting applications software against unauthorized access, reverse engineering or tampering

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
NO AUTHOR NAME SUPPLIED IN SOURCE DATA: "Method for Test Automation of Obfuscated Code", IP.COM JOURNAL, IP.COM INC., WEST HENRIETTA, NY, US, 20 April 2005 (2005-04-20), XP013024298, ISSN: 1533-0001 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2598987A1 (de) * 2010-07-29 2013-06-05 Irdeto Canada Corporation System und verfahren für effizienten einsatz von höchst unterschiedlichen programminstanzen für den widerstand gegenüber verschiedenen angriffen
CN103348319A (zh) * 2010-07-29 2013-10-09 爱迪德加拿大公司 用于有效部署整体多样化程序实例以抵抗差分攻击的系统和方法
EP2598987A4 (de) * 2010-07-29 2014-08-13 Irdeto Canada Corp System und verfahren für effizienten einsatz von höchst unterschiedlichen programminstanzen für den widerstand gegenüber verschiedenen angriffen
US8990785B2 (en) 2010-07-29 2015-03-24 Robert Durand System and method for efficiently deploying massively diverse program instances to resist differential attacks
WO2016096139A1 (de) * 2014-12-18 2016-06-23 Giesecke & Devrient Gmbh Verfahren zum bereitstellen einer sicherheitskritischen softwareapplikation auf einer computereinheit
WO2018024364A1 (de) 2016-08-03 2018-02-08 Giesecke+Devrient Mobile Security Gmbh Individuelles verschlüsseln von steuerbefehlen
DE102016009439A1 (de) 2016-08-03 2018-02-08 Giesecke+Devrient Mobile Security Gmbh Individuelles Verschlüsseln von Steuerbefehlen
CN110383275A (zh) * 2017-03-10 2019-10-25 西门子股份公司 用于程序代码的计算机辅助的代码混淆的方法
CN110383275B (zh) * 2017-03-10 2023-08-22 西门子股份公司 用于程序代码的计算机辅助的代码混淆的方法
DE102018009054A1 (de) 2018-11-16 2020-05-20 Giesecke+Devrient Mobile Security Gmbh Ausführungsumgebung für eine künstliche Intelligenz

Similar Documents

Publication Publication Date Title
EP1723513B1 (de) Verfahren zur konfiguration eines computerprogramms
DE60010420T2 (de) Automatisches Regressionstesten von Arbeitsplatz-Software
DE69720821T2 (de) Fehlersuchsystem für Programme mit einer graphischen Benutzerschnittstelle
DE10121790B4 (de) Softwarekonfigurationsverfahren zur Verwendung in einem Computersystem
EP1176482B1 (de) Verfahren und Computerprogramm zum Herstellen einer Regelung oder Steuerung
WO2010040597A2 (de) Verfahren und vorrichtung zum austauschen einer komponente eines computersystems
DE102014210854A1 (de) Computerimplementiertes Verfahren und Signalfolge für ein Programm zur Wiederverwendung von ausführbaren Softwarekonfigurationen für Softwaresysteme sowie Rechneranlage und ein Computerprogramm mit Programmcode zur Durchführung des Verfahrens
WO2007006671A1 (de) Verfahren und softwaresystem zur konfiguration eines modularen systems
WO2009010338A1 (de) Verfahren zur rechnergestützten obfuskierung eines softwareprogramms und computerprogrammprodukt
DE10333087A1 (de) Verfahren zum automatischen Zerlegen von dynamischen Systemmodellen in Teilmodelle
DE69907714T2 (de) Komponentbasiertes quellcodegeneratorverfahren
EP3217236A1 (de) Verfahren und system zur generierung eines bedienprogramms in form einer auf einem mobilen gerät lauffähigen mobilen applikation
EP2977888B1 (de) Verfahren und System zur Speicherung und zur Versionsverwaltung von Computerprogrammen
DE10256990A1 (de) Programmcodegenerator und Programm
DE102004009676A1 (de) Verfahren und Systeme zum Erzeugen von Unterstützungsdateien für Befehle
DE102021116315A1 (de) Verfahren zum Zusammenführen von Architekturinformationen
DE102009043287A1 (de) Verfahren und Anordnung zum Installieren und Konfigurieren eines Computersystems
EP1947567A2 (de) Verfahren und Vorrichtung zum automatischen Testen von modellbasierten Funktionen
DE60213786T2 (de) System und verfahren zur automatischen erfassung von aussagen in einer java-kompatibilitätsprüfumgebung
DE102008048862A1 (de) Testmodul und Verfahren zum Testen einer O/R-Abbildungs-Middleware
EP3745287A1 (de) Schützen einer softwareapplikation
DE10300541A1 (de) Erzeugen einer ausführbaren Datei
EP1861796A2 (de) Verfahren zum erstellen einer dokumentation
DE102008060440A1 (de) Verfahren und Vorrichtung zum Erstellen von einem anforderungskonformen Quellcode
DE102004039200A1 (de) Versionskontrolle

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: 08774053

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: 08774053

Country of ref document: EP

Kind code of ref document: A1