Search code examples
javaandroidapkcode-injectionapktool

APK injection, recompiling android manifest


What I'd like to achieve

Decompile AndroidManifest.xml packaged in apk from binary form into normal xml file, edit it and recompile it back into binary file acceptable for apk. Basically I need a driver for AXML files

Short background

I'm working on an APK injection project. My goal is

  1. Disassemble the dalvik binary
  2. Read AndroidManifest xml and add modifications to it, like change main activity and add permissions
  3. rebuild and sign the apk file

I use apktool for assembling and disassembling the apk. However the apk tool works only with --no-res option, if apk is disassemled with resources it can not be built back. Here's a github issue describing this bug.

The problem

Since I disassemle the apktool d --no-res app-debug.apk with no res flag the Generated android manifest comes in binary form. I can disassemble the manifest using apktool but I can not assemnle it back.

What I want to be able to do

I need to either:

  • Find a way to disassemble the manifest and then assemble it back into binary form
  • Find a way to use apktool with resources

What I have tried so far

Disclaimer

Although stackoverflow is a community for knowledge sharing, and not judging what it's used for - I see a lot of people picking on others in similar questions with accusations for illegal activities.

What I'm doing is absolutely legal and will not be used to exploit anyone.


Solution

  • The only reliable way I found to repackage the application with plain text androiod manifest is by repacking it using aapt directly.

    aapt package -f -M ./AndroidManifest.xml -S res1/ -S res2/ ... -I android.jar -F MyProject.apk.unaligned
    

    To create the apk, and then :

    aapt add -f MyProject.apk.unaligned classes.dex
    

    To add compiled sources to the package.

    Then using jarsigner to sign the package:

    jarsigner -storepass <keystore password> -keystore <keystore filename> MyProject.apk.unaligned <key name>