# Android 앱 Decompiling & Repackaging
Compiling이 된다는 것은 Decompiling(역공학/Reverse Engineering)이 존재한다고 봐야하며
decompiled 결과물의 완성도에 따라 흔히들 된다 안된다고 언급되는 것 같다.
0. 준비물
- apktool: https://ibotpeaches.github.io/Apktool/
- APK를 decompiling/repackaging 할 도구이다.
- dex -> smali코드 로 decompiled 되는데 변수명이 기계어 수준이고 가독성이 떨어진다.
하지만 부분부분씩은 읽고 수정할 수 있다. - dex2jar + jd-gui 혹은 jadx
- APK를 decompiling하여 Java코드 수준으로 해석해주며 읽는 용도로 사용할 것이다.
- zipalign
- 메모리 사용량 개선을 위해 4바이트 정렬을 시켜주어야 한다.
- apksigner
- repackaged APK는 signing이 풀려있기 때문에 다시 해야한다.
- zipalign 이후에 한다.
- jarsigner를 사용해도 되지만 그 경우 zipalign보다 먼저 해야한다.
1. Decompiling
- $ apktool d [APK명]
- 폴더내에 apk가 풀리고 dex대신 smali 폴더가 생긴다.
- smali 폴더에 있는 smali 코드 파일들을 찾아 수정한다.
- 이때 smali 코드의 해석을 쉽게하기 위해 dex2jar + jd-gui 혹은 jadx를 참조한다.
2. Repackaging
- $ apktool b [APK명]
- 폴더내에 있던 구성요소와 smali 파일들이 APK로 만들어진다.
- $ zipalign -v 4 [source APK명] [destination APK명]
- 메모리 사용량 개선을 위해 4바이트 정렬을 시켜주어야 한다.
- $ apksigner sign --ks [key명].keystore [APK명]
- repackaged APK는 signing이 풀려있기 때문에 다시 해야한다.
Reference
- https://developer.android.com/studio/command-line/zipalign
- https://ibotpeaches.github.io/Apktool/
'Operating Systems > Android' 카테고리의 다른 글
Android Material Design 스크롤에 따라 상단이 접히고 나오는 레이아웃 구성과 역할 (0) | 2018.11.19 |
---|---|
Android Material Design 사이드메뉴(햄버그 메뉴?) 레이아웃 구성과 역할 (0) | 2018.11.19 |
Android 앱 소스 난독화/암호화(Obfuscation) 종류 (0) | 2018.08.30 |
[Android Auto] VS Apple CarPlay 기능 알아보기 (0) | 2018.07.27 |
Wrap-up "Kotlin for Android Developers" at Udacity (0) | 2018.04.12 |