본문 바로가기

Android

apk파일을 디코딩해서 jad-gui로 열어봤을 때 ...

한계점 :

apktool은 baksmali기반이다. beta버전은 최신 baksmali버전을 도입하였지만, 여전히 문제가 있다. blackhat에서도 발표 하였는데 .dex파일을 파싱할때 .dex파일의 헤더가 고정된 길이 (잘 기억이.. 0x7C였나 -,.-)를 초과하면 디컴파일이 되지 않는다. 

이 방식은 간단히 사이즈를 변경하고 .dex헤더의 맨 마지막부분에 늘린 사이즈만큼 데이터를 추가하면 되는 방식이다. 이런점은 디컴파일을 하고자 하는 사람이 쉽게 고칠 수 있는 부분이기도 하다.


또 한 현재의 baksmali-2.0.3.jar이 최신인데 이 버전에서도는 아쉽게도 고정된 array list size에 대해서 exception이 발생하는 문제점이 있다. 고정된 사이즈보다 큰 사이즈가 인자로 넘어오면 발생하는 문제인데.. 이건 안티디버깅과 같은 방식이다.  이 전 버전과의 다른점은 exception이 발생하게되면 그 파일을 건너뛰어버리고 다음 파일부터 smali화 한다. 그래서 전체적인 그림을 볼 때에는 문제가 발생하지 않지만 이렇게 되면 다시 리컴파일을 할 때 문제가 발생한다. 이 또한 우회를 하였다 하더라도 중요한 파일일 경우 실행이 되지 않는 문제가 발생하고 설치단에서 문제가 발생할 것이다. 


1. 예를들어 어떤 apk 파일을 압축해제하고 .dex를 dex2jar.bat로 .jar를 만들어서 gad_gui로 봤는데 어머?! 왜 이거밖에 안나와?라고 생각됬을땐 baksmali-version.jar를 통해서 samli 코드로 뽑는다 그럼 out 라는 폴더 안에 어머!? 왜 이거밖에 안나와? 만큼의 samli코드가 있으면 그게 맞는거고 아니라면 뭔가 꼬아놨으니 원하는 부분을 얻기 위하서는 패키지별로 디렉토리가 있을껀데 그 패키지 폴더만 뽑아와서 다시 smali-version.jar를 이용해 .dex로 만들고 만들어진 .dex를 dex2jar.bat를 이용하여 .jar로 만들고 jad-gui로 보면 된다.

'Android' 카테고리의 다른 글

drozer 명령어  (0) 2015.09.24
AndroidManifest.xml 추출과 Smail 코드 추출  (0) 2015.09.23
About Context  (0) 2015.06.15
런처란??  (0) 2015.04.01