오픈소스로 제공되는 안드로이드 디컴파일 도구를 소개한다.
해당 글에서 아래 툴들의 용도는 다음과 같다.
□ apktool : apk 파일의 리소스 파일 추출
□ dex2jar : dex 파일 jar 파일로 변환
□ jd-cli : jar 파일을 java 파일로 변환
□ jadx : 리소스 파일 및 java 파일 추출
개인적으로 apk 소스 분석을 위한 디컴파일용 툴은 jadx 하나로 해결된다.(나머지 툴들은 리패키징 등 다른 용도로 사용)
apk파일 다운로드 : https://m.apkpure.com/kr/search
○ apktool 디컴파일
1. Mac
/bin/bash
# apktool 설치 폴더 생성
mkdir -p ~/App/Tools/AST/SAST/
# apktool 다운로드
curl -L -o ~/App/Tools/AST/SAST/apktool.jar https://github.com/iBotPeaches/Apktool/releases/download/v2.9.3/apktool_2.9.3.jar
# apktool 별칭 등록 삭제 1
sed -i '' '/^alias[[:space:]]*apktool=.*/d' ~/.bash_profile
# apktool 별칭 등록 삭제 2
sed -i '' '/^alias[[:space:]]*apktool=.*/d' ~/.zshrc
# apktool 별칭 등록 1
echo "alias apktool='java -jar $(ls ~/App/Tools/AST/SAST/apktool.jar)'" >> ~/.bash_profile
# apktool 별칭 등록 2
echo "alias apktool='java -jar $(ls ~/App/Tools/AST/SAST/apktool.jar)'" >> ~/.zshrc
# 현재 터미널에 별칭 등록 적용
source ~/.zshrc
# apktool 버전 확인
apktool --version
# APK 파일 디컴파일
# e.g. apktool -f -s -o decompile app-release.apk
apktool d -f -s -o [디컴파일 폴더] [APK 파일 명].apk
○ dex2jar 디컴파일
1. Mac
/bin/bash
# dex2jar 설치 폴더 생성
mkdir -p ~/App/Tools/AST/SAST/dex2jar
# dex2jar 다운로드
curl -L -o /tmp/dex-tools.zip https://github.com/pxb1988/dex2jar/releases/download/v2.4/dex-tools-v2.4.zip
# 설치 폴더로 압축 풀기
unzip /tmp/dex-tools.zip -d ~/App/Tools/AST/SAST/dex2jar/
# 압축 해제후 생성된 폴더에 있는 파일 설치 폴더로 이동
mv ~/App/Tools/AST/SAST/dex2jar/*/* ~/App/Tools/AST/SAST/dex2jar/
# 압축 해제 후 이동하며 생성된 빈 폴더 제거
rmdir ~/App/Tools/AST/SAST/dex2jar/dex-tools-v2.4
# 별칭 삭제 1
sed -i '' '/^alias[[:space:]]*dex2jar=.*/d' ~/.bash_profile
# 별칭 삭제 2
sed -i '' '/^alias[[:space:]]*dex2jar=.*/d' ~/.zshrc
# 별칭 생성 1
echo "alias dex2jar='$(ls ~/App/Tools/AST/SAST/dex2jar/d2j-dex2jar.sh)'" >> ~/.bash_profile
# 별칭 생성 2
echo "alias dex2jar='$(ls ~/App/Tools/AST/SAST/dex2jar/d2j-dex2jar.sh)'" >> ~/.zshrc
# 현재 터미널에 적용
source ~/.zshrc
# 버전 확인
dex2jar 2>&1 | grep version
# apk 파일도 jar 파일로 변환 가능
dex2jar app-release.apk
# apk-tools 을 통해서 생성된 dex 파일 jar 파일 변환
dex2jar decompile/classes.dex
○ jd-cli 디컴파일
1. Mac
/bin/bash
# jd-cli 설치 폴더 생성
mkdir -p ~/App/Tools/AST/SAST/jd-cli
# jd-cli 다운로드
curl -L -o /tmp/jd-cli.tar.gz https://github.com/intoolswetrust/jd-cli/releases/download/jd-cli-1.2.0/jd-cli-1.2.0-dist.tar.gz
# jd-cli 설치폴더 압축풀기
tar -zxvf /tmp/jd-cli.tar.gz -C ~/App/Tools/AST/SAST/jd-cli
# jd-cli 별칭 삭제 1
sed -i '' '/^alias[[:space:]]*jd-cli=.*/d' ~/.bash_profile
# jd-cli 별칭 삭제 2
sed -i '' '/^alias[[:space:]]*jd-cli=.*/d' ~/.zshrc
# jd-cli 별칭 생성 1
echo "alias jd-cli='java -jar $(ls ~/App/Tools/AST/SAST/jd-cli/jd-cli.jar)'" >> ~/.bash_profile
# jd-cli 별칭 생성 1
echo "alias jd-cli='java -jar $(ls ~/App/Tools/AST/SAST/jd-cli/jd-cli.jar)'" >> ~/.zshrc
# 현재 터미널에 적용
source ~/.zshrc
# jd-cli 버전 확인
jd-cli --version
# jar 파일 java 파일로 변환하여 src 폴더에 저장
# 현재 jd-cli 실행시 [ Class name or java source is null ]
# 에러와 함께 진행이 안되는 증상이 확인됨
# 해당 증상 확인 필요(일부는 변환이됨)
jd-cli *-dex2jar.jar -od src
○ jadx 디컴파일
1. Mac
# jadx 설치 폴더 생성
mkdir -p ~/App/Tools/AST/SAST/jadx
# jadx 압축 해제
curl -L -o /tmp/jadx.zip https://github.com/skylot/jadx/releases/download/v1.5.0/jadx-1.5.0.zip
# jadx 설치 폴더 압축 해제
unzip /tmp/jadx.zip -d ~/App/Tools/AST/SAST/jadx/
# jadx 별칭 삭제 1
sed -i '' '/^alias[[:space:]]*jadx=.*/d' ~/.bash_profile
# jadx-gui 별칭 삭제 1
sed -i '' '/^alias[[:space:]]*jadx-gui=.*/d' ~/.bash_profile
# jadx 별칭 삭제 2
sed -i '' '/^alias[[:space:]]*jadx=.*/d' ~/.zshrc
# jadx-gui 별칭 삭제 2
sed -i '' '/^alias[[:space:]]*jadx-gui=.*/d' ~/.zshrc
# jadx 별칭 생성 1
echo "alias jadx='$(ls ~/App/Tools/AST/SAST/jadx/bin/jadx)'" >> ~/.bash_profile
# jadx-gui 별칭 생성 1
echo "alias jadx-gui='$(ls ~/App/Tools/AST/SAST/jadx/bin/jadx-gui)'" >> ~/.bash_profile
# jadx 별칭 생성 2
echo "alias jadx='$(ls ~/App/Tools/AST/SAST/jadx/bin/jadx)'" >> ~/.zshrc
# jadx-gui 별칭 생성 2
echo "alias jadx-gui='$(ls ~/App/Tools/AST/SAST/jadx/bin/jadx-gui)'" >> ~/.zshrc
# 현재 터미널에 적용
source ~/.zshrc
# jadx 버전 확인
jadx --version
# jadx-gui 버전 확인
jadx-gui --version
# apk 파일 디컴파일 폴더에 디컴파일
# e.g. jadx -d app-release app-release.apk
jadx -d [디컴파일 폴더] [apk 파일 명].apk
# gui 로 디컴파일된 apk 확인
# e.g. jadx-gui [apk 파일 명].apk
jadx-gui app-release.apk
'Mobile App Development > Android' 카테고리의 다른 글
[ Android ] 안드로이드 기본정보 확인 (1) | 2024.05.02 |
---|---|
[ Android ] 안드로이드 루팅 (10) | 2024.05.01 |
[ Android ] 안드로이드 무선 디버깅 (0) | 2024.04.25 |
[ Android ] 안드로이드 APK 파일 추출 (0) | 2024.04.25 |
[ Android ] 기종 별 사이즈 대응 (0) | 2024.04.09 |