TUM Logo

Automatisierte Transformation von Android-Bytecode zu nativem C-Code

Bei vielen Software-Autoren besteht ein Bedarf an Software, die in der Lage ihren Quell- code mo ̈glichst so zu obfuskieren, das der Nutzen ein Programm mittels Reverse En- gineering zu rekonstruieren in keinem vernu ̈nftigen Verha ̈ltnis mehr zum Rekonstrukti- onsaufwand steht. Dies dient meist prima ̈r dem Schutz von geistigem Eigentum, aber auch die Erschwerung von Angriffen auf die Software kann Ziel der Obfuskation sein. Die Verschleierung von Android-Applikationen zielt bis jetzt auf die Obfuskation des Bytecodes ab. Hier soll ein neuer Ansatz versucht werden, indem der Android-Bytecode in nativen C-Code konvertiert wird. Ein Reverse Engineering Versuch kann hierdurch erschwert werden, da eine Konvertierung in Gegenrichtung nicht immer einfach durch- gefu ̈hrt werden kann. Dies kann zusa ̈tzlich noch erschwert werden, indem der C-Code durch ein geeignetes Programm obfuskiert wird. Auch die Verwendung C-Spezifischer Konstrukte wie zum Beispiel Pointer und Pointerarithmetik ko ̈nnen eine automatisierte Ru ̈ckkonvertierung nahezu unmo ̈glich machen.Diese Art der Programmkonvertierung wurde bisher noch nicht versucht. Daher stellen sich einige Fragen, die gekla ̈rt werden mu ̈ssen. Zuna ̈chst einmal ru ̈ckt die Frage der Umsetzbarkeit in den Vordergrund, deren Beantwortung das prima ̈re Ziel der Arbeit ist. Aber auch die Performanz des transformierten Programms sollte im Blick behalten werden, da die JNI-Schnittstelle in dem Ruf steht vergleichsweise unperformant zu sein. Auch die Stabilita ̈t der transformierten Programme ist nicht automatisch gewa ̈hrleistet, da insbesondere bei Anwendungen, die Multithreading verwenden, durch A ̈nderungen in der Laufzeit einzelner Funktionen, Fehler oder Timeouts auftreten ko ̈nnen. Ziel der Arbeit soll es außerdem sein den ausgegebenen C-Code durch Eliminierung von goto- Anweisungen mo ̈glichst lesbar zu halten.

Automatisierte Transformation von Android-Bytecode zu nativem C-Code

Supervisor(s): Dennis Titze ,Julian Schütte
Status: finished
Topic: Android stuff
Author: Peter Arndt
Submission: 2016-02-15
Type of Thesis: Masterthesis
Proof of Concept No
Thesis topic in co-operation with the Fraunhofer Institute for Applied and Integrated Security AISEC, Garching

Astract:

Bei vielen Software-Autoren besteht ein Bedarf an Software, die in der Lage ihren Quell- code mo ̈glichst so zu obfuskieren, das der Nutzen ein Programm mittels Reverse En- gineering zu rekonstruieren in keinem vernu ̈nftigen Verha ̈ltnis mehr zum Rekonstrukti- onsaufwand steht. Dies dient meist prima ̈r dem Schutz von geistigem Eigentum, aber auch die Erschwerung von Angriffen auf die Software kann Ziel der Obfuskation sein. Die Verschleierung von Android-Applikationen zielt bis jetzt auf die Obfuskation des Bytecodes ab. Hier soll ein neuer Ansatz versucht werden, indem der Android-Bytecode in nativen C-Code konvertiert wird. Ein Reverse Engineering Versuch kann hierdurch erschwert werden, da eine Konvertierung in Gegenrichtung nicht immer einfach durch- gefu ̈hrt werden kann. Dies kann zusa ̈tzlich noch erschwert werden, indem der C-Code durch ein geeignetes Programm obfuskiert wird. Auch die Verwendung C-Spezifischer Konstrukte wie zum Beispiel Pointer und Pointerarithmetik ko ̈nnen eine automatisierte Ru ̈ckkonvertierung nahezu unmo ̈glich machen.Diese Art der Programmkonvertierung wurde bisher noch nicht versucht. Daher stellen sich einige Fragen, die gekla ̈rt werden mu ̈ssen. Zuna ̈chst einmal ru ̈ckt die Frage der Umsetzbarkeit in den Vordergrund, deren Beantwortung das prima ̈re Ziel der Arbeit ist. Aber auch die Performanz des transformierten Programms sollte im Blick behalten werden, da die JNI-Schnittstelle in dem Ruf steht vergleichsweise unperformant zu sein. Auch die Stabilita ̈t der transformierten Programme ist nicht automatisch gewa ̈hrleistet, da insbesondere bei Anwendungen, die Multithreading verwenden, durch A ̈nderungen in der Laufzeit einzelner Funktionen, Fehler oder Timeouts auftreten ko ̈nnen. Ziel der Arbeit soll es außerdem sein den ausgegebenen C-Code durch Eliminierung von goto- Anweisungen mo ̈glichst lesbar zu halten.