[컴][안드로이드] deodexing 하는 방법, odex 를 다시 .dex 파일로 만들기


compile 한 소스에서 framework.apk 를 봤더니, classes.dex 파일이 없고, framework.odex 파일이 있었다. 이것은 build 옵션을 조절해 주면, 정상적인 완전한 framework.apk 가 만들어지는데, 그걸 그땐 몰랐다.[LOCAL_DEX_PREOPT 옵션관련 참고자료]

여하튼 그래서 이 odex 를 classes.dex 로 바꾸고, 이것을 .apk 와 합쳐선 완전한 framework.apk 를 만들어 보자.


baksmali -a <api_level> -x <odex_file> -d <framework_dir>

-d 는 --bootclasspath-dir <DIR> 를 이야기 한다. 보통 core.jar 의 위치를 정해주면 된다.

f:\>java -jar baksmali-1.4.2.jar -a 17 -x .\out\framework\framework.odex -d .\out\framework -o framework

.\framework
에 결과가 기록 된다. 이 안에 .smali 파일들이 있다.

이제 .\framwork 의 내용을 가지고 dex 파일을 만들어 보자.

f:\>java -jar smali.jar framework -o classes.dex

위와 같이 명령어를 실행하면, classes.dex 파일이 만들어 진다.

이제 이 .dex 를 가지고 기존의 .apk 와 합쳐서 완전한 .apk 를 만들 수 있다.

대략적으로 설명하면, .apk 를 풀고, classes.dex 를 넣고, 다시 묶고, sign 하면 된다. 이것은 apktool 로 가능하다. ref. 2 을 일단 참고하자.


References


  1. https://code.google.com/p/smali/wiki/DeodexInstructions
  2. http://noullove.tistory.com/entry/Android-ODEX-Reverse-Engineering-DE-ODEX

댓글 없음:

댓글 쓰기