Skip to content

APK transform

Theory

An .APK file (e.g. Android Package) is a compressed collection of files (i.e. a package) for Android. It could be extracted as an regular archive.

A .DEX file (.e.g Dalvik EXecutable) is an executable file saved in a format that contains compiled code that Android systems can run.

When auditing an APK, transforming it to human-readable formats is usually required.

  • smali and baksmali are DEX assembler and disassembler respectively
  • d2j-dex2jar can be used to convert DEX files to .class files (zipped as .jar)
  • jadx is a DEX to Java decompiler. It can be used in CLI and GUI for producing Java source code out of Android DEX and APK files.

Practical

Install notes

Add Kali repo to your sources

echo "deb http://http.kali.org/kali kali-rolling main contrib non-free" >> /etc/apt/sources.list 

apt-get update

Note that if you haven’t updated your Kali installation in some time, you will like receive a GPG error about the repository key being expired (ED444FF07D8D0BF6). Fortunately, this issue is quickly resolved by running the following as root:

wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add

Install softwares

apt install unzip smali apktool dex2jar jadx
bash
# Uncompress an APK
unzip application.apk -d ./application-unzipped/

# Disassemble DEX
baksmali d ./application-unzipped/classes.dex -o ./application-unzipped/classes.dex.out/ 2>/dev/null

# Convert .DEX files to JAVA Jar file (.class files)
d2j-dex2jar application.apk -o application.jar

# Decompile .DEX files
jadx application.apk -j $(grep -c ^processor /proc/cpuinfo) -d ./application-jadx/ > /dev/null

# Unpack the APK
apktool d application.apk -o ./application-unpacked/

Resources

https://github.com/nullenc0de/reverse-apk

https://ibotpeaches.github.io/Apktool/