Methods for Improving the Quality of Software Obfuscation for Android Applications

Language
en
Document Type
Doctoral Thesis
Issue Date
2017-10-02
Issue Year
2017
Authors
Zhuang, Yan
Editor
Abstract

Obfuscation technique provides the semantically identical but syntactically distinguished transformation, so that to obscure the source code to hide the critical information while preserving the functionality. In that way software authors are able to prevail the resources e.g. computing power, time, toolset, detection algorithms, or experience etc., the revere engineer could afford. Because the Android bytecode is practically easier to decompile, and therefore to reverse engineer, than native machine code, obfuscation is a prominent criteria for Android software copyright protection. However, due to the limited computing resources of the mobile platform, different degree of obfuscation will lead to different level of performance penalty, which might not be tolerable for the end-user. In this thesis, we optimize the Android obfuscation transformation process that brings in as much difficulty as possible meanwhile constrains the performance loss to a tolerable level. We implement software complexity metrics to automatically and quantitatively evaluate the difficulty of the obfuscation results. We firstly investigate the properties of the 7 obfuscation methods from the obfuscation engine Pandora. We evaluate their obfuscation effect with 9 different software complexity metrics, when iteratively apply each obfuscation method multiple times to more than 240 Android applications. We show from the result pictures that the obfuscation methods can exhibit two types of properties: monotonicity or idempotency. For most of the monotonicity obfuscation methods, their variants of the complexity values are constant and stable, which are the foundation for our statistic based algorithm to optimize the complexity results. To reach the desired complexity, we then design and implement our obfuscation framework which can select the optimum obfuscation techniques for the target complexity and apply them to Android applications, while measure the performance cost. The optimization process in our framework is controlled by the Obfuscation Management Layer, which implements the Naïve Bayesian Classifier algorithm to select the obfuscation techniques. Our obfuscation framework can transform the result APKs to arbitrary target complexity. Meanwhile, the unpredicted performance loss will be caused by the obfuscation. We compare the discrepancies of CPU cycles of original APKs to their obfuscated versions by dynamic testing, and define them as the performance penalty generated by obfuscation. We evaluate the performance penalty of different obfuscation methods. We find out that some of the obfuscation methods consume significantly more performance at the same time have minimum impact on complexities. Finally, we statistically measure performance losses of different methods, and calculate them as a special metric in the Naïve Bayesian Classifier algorithm. We therefore can optimize the performance cost of the obfuscation to target a tolerable level. Meanwhile, to maximize the code coverage, we develop an automatic testing tool which are used to generate the testing cases.

Abstract

Obfuskierungstechniken liefern eine semantisch identische aber syntaktisch unterschiedliche Transformation, in welcher der Qüllcode versteckt wird um kritischen Informationen unter Beibehaltung der Funktionalität zu verbergen. Auf diese Weise können Software-Entwickler mehr Ressourcen von Reverse-Ingenieuren einfordern, z.B. Rechenleistung, Zeit, Toolset, Erkennungsalgorithmen oder Erfahrung etc. Da der Android-Bytecode praktisch relativ einfach zu dekompilieren und damit zu Reverse Engineeringen ist, im Vergleich zu nativen Maschinencode, bietet Obfuskierung ist eine herausragende Möglichkeit zur Umsetzung von Urheberrechtsschutz bei Android-Software. Aufgrund der begrenzten Rechenressourcen mobiler Plattformen wird jedoch ein unterschiedlicher Grad an Obfuskierung zu einem unterschiedlichen Leistungsniveau führen, was möglicherweise für den Endbenutzer nicht tolerierbar ist. In dieser Arbeit optimieren wir den Android-Obfuskierung-Transformationsprozess, der die „Schwierigkeit“ erhöht, während er den Leistungsverlust auf einem tolerierbaren Niveau hält. Wir implementieren Softwarekomplexitätsmetriken, um die Schwierigkeit der Obfuskationsergebnisse automatisch und quantitativ zu bewerten. Zunächst untersuchen wir die Eigenschaften der 7 Obfuskationsmethoden der Obfuskierungsengine Pandora. Wir bewerten ihre Obfuskierungswirkung mit 9 verschiedenen Softwarekomplexitätsmetriken, jeweils als iterative Anwendung der Obfuskierungsmethode mehrfach auf über 240 Android-Anwendungen. Aus den Ergebnisbildern leiten wir ab, dass die Obfuskierungsmethoden zwei Arten von Eigenschaften aufweisen können: Monotonie oder Idostose. Für die meisten der Monotonie-Obfuskationsmethoden sind die Varianten der Komplexitätswerte konstant und stabil, was die Grundlage für unseren Statistik-basierten Algorithmus zur Optimierung der Komplexitätsergebnisse bildet. Um die gewünschte Komplexität zu erreichen, konzipieren und implementieren wir dann unser Obfuskierungsframework, das die optimalen Obfuskierungstechniken für die Zielkomplexität auswählen und auf Android-Anwendungen anwenden kann, während die Performanzkosten gemessen werden. Der Optimierungsprozess in unserem Framework wird durch die Obfuskierungsverwaltungsschicht (Obfuscation Management Layer) gesteürt, welche den Naïve Bayesian Classifier implementiert, um die Obfuskationstechniken auszuwählen. Unser Obfuskierungsframework kann die Ergebnis-APKs in eine beliebige Zielkomplexität transformieren. Dabei wird ein unvorhergesehener Leistungsverlust durch die Obfuskierung verursacht. Wir vergleichen die Diskrepanzen von CPU-Zyklen der ursprünglichen APKs mit ihren obfuskierten Versionen durch dynamische Tests und definieren sie als Performanzstrafe, welche durch die Obfuskierung ensteht. Wir werten die Performanzstrafe für verschiedenen Obfuskierungsmethoden aus. Unser Ergebnis zeigt, dass einige der Obfuskierungsmethoden deutlich mehr Leistung kosten und zur gleichen Zeit nur minimale Auswirkungen auf die Komplexität haben. Schließlich analysieren wir die Leistungsverluste verschiedener Methoden statistisch und berechnen sie als spezielle Metrik der Naïve-Bayessche Klassifikation. Wir können daher den Leistungsverbrauch der Obfuskierung optimieren, um ein tolerierbares Niveau zu erreichen. Um die Code-Abdeckung zu maximieren, entwickeln wir gleichzeitig ein automatisches Test-Tool, dass zur Generierung von Testfälle verwendet werden kann.

DOI
Faculties & Collections
Zugehörige ORCIDs