# Android 앱 Decompiling & Repackaging


Compiling이 된다는 것은 Decompiling(역공학/Reverse Engineering)이 존재한다고 봐야하며

decompiled 결과물의 완성도에 따라 흔히들 된다 안된다고 언급되는 것 같다.


0. 준비물

  1. apktool: https://ibotpeaches.github.io/Apktool/
    • APK를 decompiling/repackaging 할 도구이다.
    • dex -> smali코드 로 decompiled 되는데 변수명이 기계어 수준이고 가독성이 떨어진다.
      하지만 부분부분씩은 읽고 수정할 수 있다.

  2. dex2jar + jd-gui 혹은 jadx
    • APK를 decompiling하여 Java코드 수준으로 해석해주며 읽는 용도로 사용할 것이다.

  3. zipalign
    • 메모리 사용량 개선을 위해 4바이트 정렬을 시켜주어야 한다.

  4. apksigner
    • repackaged APK는 signing이 풀려있기 때문에 다시 해야한다.
    • zipalign 이후에 한다.
    • jarsigner를 사용해도 되지만 그 경우 zipalign보다 먼저 해야한다.



1. Decompiling

  1. $ apktool d [APK명]
    • 폴더내에 apk가 풀리고 dex대신 smali 폴더가 생긴다.

  2. smali 폴더에 있는 smali 코드 파일들을 찾아 수정한다.
    • 이때 smali 코드의 해석을 쉽게하기 위해 dex2jar + jd-gui 혹은 jadx를 참조한다.


2. Repackaging

  1. $ apktool b [APK명]
    • 폴더내에 있던 구성요소와 smali 파일들이 APK로 만들어진다.

  2. $ zipalign -v 4 [source APK명] [destination APK명]
    • 메모리 사용량 개선을 위해 4바이트 정렬을 시켜주어야 한다.

  3. $ apksigner sign --ks [key명].keystore [APK명]
    • repackaged APK는 signing이 풀려있기 때문에 다시 해야한다.





Reference

- https://developer.android.com/studio/command-line/zipalign

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




+ Recent posts