apktool
- http://code.google.com/p/android-apktool/
위 링크는 v1.4.3 까지 공개된 후 개발이 중지된 것 같고 (혹은 google이 apk를 지나치게 노출하는 것을 꺼려하는 것일지도… )
https://github.com/ApkMultiTools/APK-Multi-Tool-Linux
여기 소스를 git clone 해서 받아보면 other folder에서 v1.4.9 (JellyBean 지원)를 받을 수 있습니다.
그런데 v1.4.9 역시 JB plus에서 추가된 ldrtl resource qualifier 는 지원이 안되네요. ㅡ.ㅜ) - apk로부터 resource 추출 가능
- code는 smali code로 추출
- framework resource가 있다면 먼저 설치
$ cd system/framework $ apktool if framework-res.apk $ apktool if com.htc.resources.apk $ cd ../app $ apktool d Browser.apk
- 참고로 resources.arsc 포맷에 대해서는 http://ekasiswanto.wordpress.com/2012/09/19/descriptions-of-androids-resources-arsc/ 참고.
smali
- assembler/disassembler for the dex format used by dalvik
- resource는 추출하지 못하므로 apktool과 병행해 사용
- odex도 지원(init.rc의 BOOTCLASSPATH를 참조해 -c 옵션을 작성)
- ICS는 1.3.0 버전 사용할 것.
$ baksmali -a 10 -c core.jar:bouncycastle.jar:ext.jar:framework.jar:android.policy.jar:services.jar:core-junit.jar -x twframework.odex -o twframework
$ baksmali -c core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:filterfw.jar:sechardware.jar:kafdex.jar -x framework.odex -o framework
최신버전의 경우 default로 ICS로 인식한다. GB 라면 -a 10 옵션을 추가해야 한다.
dex2jar
- dex를 java의 class 파일로 변환
$ dex2jar.sh Browser.apk
jar -> class
- .jar 파일에서 .class 파일 추출
$ jar -xvf
.jar - .class → .jar 생성 (src 디렉토리 밑에 생성) - (jad)
$ jad -o -r -sjava -dsrc **/*.class
jd-gui
- class 파일로부터 또는 dex2jar를 통해 생성된 jar 파일로부터 java source 확인