rom devices using virtualization technique unpack android ... · host app is an android app...

27
Unpack Android apps on non-rooted and factory ROM devices using virtualization technique Jason Wang丨王羿廷 © Fourdesire. All Rights Reserved.

Upload: others

Post on 25-Sep-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Unpack Android apps on non-rooted and factory ROM devices using virtualization technique

Jason Wang丨王羿廷 © Fourdesire. All Rights Reserved.

Page 2: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

About Me

Fourdesire Senior Security Engineer

● Android Security

● Reverse Engineering

● Trying hard to build Taiwan's first independent R&D product for app security

Education & Experience

● Speaker of CYBERSEC 2019

● Speaker of CSA Taiwan Summit 2017

● Security Consultant of Digicentre

● Security Engineer of Gamania

● Bachelor Degree from Department of Applied Mathematics, NCTU

Jason Wang(王羿廷)

Page 3: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Outline

● What is virtual space on Android?

● What is Android packer?

● How to unpack an app packed by a packer?

● Implement a virtual space with unpacking functions

● Demo

Page 4: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

What is virtual space on Android?

Page 5: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Virtual SpaceVirtual space is a virtualization technique that allows apps to run in an isolated space, just like there is an virtual machine on your Android device. By this technique, you can run multiple instances of a specific app on a Android device. For example, you can simultaneously launch two LINE apps on a device for personal and business use.

Page 6: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Key Features

● A host-guest structure

● Host app is an Android app installed on system

● Guest app is just an APK file stored on system

● No need to install guest app on system

● Host app dynamically load and launch guest app without installation

● This technique can be implemented on non-rooted devices

● Visit VirtualApp and VirtualAPK for more detail information

Page 7: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Host Apps

Guest Apps

Overview Figures

Page 8: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Demo

Page 9: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Guest App (not installed on Android)

Host App (installed on Android)

Mechanisms

Android Framework

Proxy Application, Actvity, Service, Provider and Receiver

System Service (AMS, PMS, ...) & I/O Hook

ClassLoaderResources

Application

ServiceActvity

ReceiverProvider

Virtual space is a host app installed on Android, it implements various system service and I/O hooks between guest app and Android framework for the purpose of making the guest app consider itself as an app installed and running directly on Android. But it's not actually the case.

Page 10: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

What is Android packer?

Page 11: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Android Packer

● Encrypt dex files and stored in some special files

● Dynamically decrypt and load dex files into memory during runtime

● Please refer to CyberSec 2019 for more detail information

assets/lib/META-INF/res/AndroidManifest.xmlresources.arscclasses.dex

assets/encrypted.ziplib/META-INF/res/AndroidManifest.xmlresources.arscclasses.dex

Original APK Packed APK

change entry point of app to packer

dynamically decrypt and load encrypted dex files

encrypted dex files

Page 12: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

How to unpack an app packed by a packer?

Page 13: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Some approaches to unpack an Android app

1. Find out the algorithm and key of encryption (very difficult)

2. Extract dex file from compiled oat file

Reference: https://github.com/testwhat/SmaliEx

3. Build a custom Android ROM

Reference: https://github.com/hanbinglengyue/FART

4. Dump dex file from process memory

Reference: https://github.com/hluwa/FRIDA-DEXDump

5. Hook functions in libart.so

Reference: https://github.com/dstmath/frida-unpack

Almost all approaches require root privileges or custom ROM

Page 14: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Implement a virtual space with unpacking functions

Page 15: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

assets/lib/META-INF/res/AndroidManifest.xmlresources.arscclasses.dex

assets/encrypted.ziplib/META-INF/res/AndroidManifest.xmlresources.arscclasses.dex

Original APK Packed APK

change entry point of app to packer

dynamically decrypt and load encrypted dex files

encrypted dex files

Packer & Virtual Space

assets/lib/META-INF/res/AndroidManifest.xmlresources.arscclasses.dex

assets/guest.apklib/META-INF/res/AndroidManifest.xmlresources.arscclasses.dex

Guest APK Host APK

Proxy Application, Actvity, Service, Provider and Receiver

dynamically load dex, so and resource files in guest.apkhook system service and I/O functions

Page 16: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Launch Process Comparison

Launch app

Read encrypted dex files

Decrypt dex files in memory

Load decrypted dex files by BaseDexClassLoader

Replace mClassLoader, mApplication…

Launch app

Load guest apk file (include dex, so and resource)

Resolve PackageInfo, ApplicationInfo, ActivityInfo...of apk

Hook system services (AMS, PMS...) & I/O functions

Replace LoadedApk, Resources, mClassLoader, mApplication...

Call Application.onCreate(), return control to app Call Application.onCreate(), return control to app

Packed App Virtual Space Host App

Dump all dex files

Page 17: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

How to dump dex filesObtain packer’s class loader and load packer application class

Create an instance of packer application

Hook ClassLinker::LoadMethod() in libart.so

Enumerate all dex files from packer’s class loader

Obtain mCookie value of each dex file and then dump dex file

load all classes and dump each method's bytecode to fix dex file

Enumerate all classes from each dex file

Call constructor of packer’s application, the packer will load and decrypt all dex files in memory

ClassLinker::LoadMethod() was called at this time, obtain bytecode then write to dex file

Obtain memory address of dex file by mCookie, then write to local storage

Page 18: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Implementation

Page 19: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Demo

Page 20: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Dump bytecode of each method

Page 21: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

First Dump:dump entire dex file

Second Dump:dump bytecode of each method

Recover bytecode of each method

Page 22: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Unpacking Result

First Dump

Second Dump

Packed APK Unpacked APK

Page 23: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Something More

Page 24: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Keylogger

Page 25: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Bypass SSL Certificate Pinning

Page 26: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Bypass Root Detection

Page 27: ROM devices using virtualization technique Unpack Android ... · Host app is an Android app installed on system Guest app is just an APK file stored on system ... load all classes

Thank you : )王羿廷丨Jason Wang

[email protected]