안드로이드 앱을 디컴파일하는 방법은 여러 가지가 있지만, 가장 효과적인 방법은 apktool(Smali 코드 분석)과 jadx(Java 코드 분석)를 함께 사용하는 것이야.
A. 기기에서 APK 추출하기
adb shell pm list packages | grep [앱이름]
예를 들어, com.example.app 패키지를 찾았다면:
adb shell pm path com.example.app
출력 예시:
package:/data/app/com.example.app-1/base.apk
이제 해당 APK를 PC로 복사:
adb pull /data/app/com.example.app-1/base.apk ./target.apk
이제 target.apk 파일을 가지고 디컴파일하면 돼!
apktool)apktool을 사용하면 APK를 Smali 코드로 변환할 수 있어.
apktool 설치Mac 사용자는 Homebrew로 설치 가능:
brew install apktool
Linux 사용자는:
sudo apt install apktool -y # (Debian/Ubuntu 계열)
sudo pacman -S apktool # (Arch 계열)
Windows 사용자는 공식 사이트에서 다운로드:
🔗 https://github.com/iBotPeaches/Apktool
apktool d target.apk -o target_decompiled
이제 target_decompiled/smali/ 폴더 안에 Smali 코드가 생성됨.
jadx)Smali 코드가 아니라 Java 코드로 보고 싶다면 jadx를 사용하면 돼.
jadx 설치brew install jadx # Mac
sudo apt install jadx # Linux (Ubuntu)
Windows 사용자는 공식 사이트에서 다운로드:
🔗 https://github.com/skylot/jadx
jadx -d target_java target.apk
이제 target_java 폴더 안에서 Java 코드(.java)를 확인할 수 있어.
jadx-gui target.apk
이렇게 하면 Java 코드가 GUI에서 보기 쉽게 표시됨.
만약 디컴파일한 코드를 수정하고 다시 패키징하려면:
apktool b target_decompiled -o modified.apk
zipalign -v 4 modified.apk modified_aligned.apk
apksigner sign --ks my-release-key.jks --out signed.apk modified_aligned.apk
adb install signed.apk
| 작업 | 도구 | 명령어 |
|---|---|---|
| APK 추출 | adb | adb pull /data/app/com.example.app-1/base.apk ./target.apk |
| Smali 디컴파일 | apktool | apktool d target.apk -o target_decompiled |
| Java 코드 디컴파일 | jadx | jadx -d target_java target.apk |
| GUI로 Java 코드 보기 | jadx | jadx-gui target.apk |
| APK 재패키징 | apktool | apktool b target_decompiled -o modified.apk |
| APK 서명 후 설치 | apksigner | apksigner sign --ks my-release-key.jks --out signed.apk modified_aligned.apk |