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. |