Android/Compile | Posted by 덩치 2013. 10. 21. 17:17

apk파일 디컴파일하기

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO

apk파일을 디컴파일하게되면 원본 소스코드를 100%는 아니더라도 확인이 가능하다.

다만, 소스코드 난독화(proguard등)가 적용되어 있다면 코드의 해석은 상당히 힘들게된다.

그럼에도 불구하고 필요한 소스코드가 있다면 디컴파일하여 쓸만한 건덕지를 찾아봐야하니 디컴파일은 중요하다고

할 수 있다. (개발자의 경우 상당히 기분나쁜부분, 우리는 참고용으로만 사용하자)

디컴파일 전에 몇가지 준비사항이 필요하다.


1. https://code.google.com/p/dex2jar/downloads/list 

여기서 dex2jar 다운로드 > 

C:\Program Files\adt-bundle-windows-x86_64-20130522\sdk\platform-tools\dex2jar-0.0.9.15 경로에 압축해제 

(위 경로는 본인의 경우이고, sdk가 있는 경로상에 집어넣어주면 된다.)

dex2jar.bat 파일 우클릭 후 편집 > echo off 를 echo on 으로 수정



2. http://varaneckas.com/jad/

여기서 최신버전 Jad (자바 디컴파일러) 다운로드 > 압축해제


이제 디컴파일 준비는 끝났다.


시작




- 우선 디컴파일할 apk파일의 확장자를 apk 에서 zip로 바꾸면 zip파일이 된다.

- 압축해제하면 classes.dex 파일이 나온다. 이것만 있으면 된다






그렇게 나온 classes.dex 파일을

아까 받은 dex2jar 폴더로 이동시킨다





그리고 현재 위치의 경로를 복사 한 뒤

시작 > 실행 > cmd > cd적은다음 한칸띄고 마우스 우클릭 > 붙여넣기 > 엔터 하면

위의 경로로 이동





이제 d2j-dex2jar.bat classes.dex를 적고 엔터를 누르면 사진과같이 이상한글이 쫘르륵 나오고

경로에 classes-dex2jar.jar 파일이 생성된다.

버전에 따라 d2j-dex2jar.bat가 아니라 dex2jar.bat 인경우도 있는듯 하니 파일명을 잘보고 알아서 입력한다


그리고 생성된 파일을 압축해제하면 클래스파일들이 나오게 된다.




필자는 proguard를 적용한 apk를 사용했기때문에 보는바와같이 클래스명이 저렇게 지맘대로다.

이제 MainActivity.class를 java파일로 변환해줘야 소스코드를 확인할 수 있다.


MainActivity.class파일을 복사하여 2번에서 설치한 Jad가 설치된 경로에 붙여넣어준다





그리고





다시 시작 > 실행 > cmd > jad 경로로 이동 후


jad -o -sjava MainActivity.class  엔터




그러면 이렇게 MainActivity.java 파일이 생긴다 ! 실행해보자




다시말하지만 필자는 코드난독화(proguard)를 적용했기에 변수명이 이렇게 알아먹기 힘들게 표시된다.

(적용하지 않으면 대부분의 소스코드를 볼 수 있다)

오랜시간 해석한다면 불가능하진 않지만 상당한 곤욕을 치루는것은 어쩔 수 없다.


proguard에 관한 포스팅은 이전글을 참고하길 바라며


-끝-

댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 수란 2014.01.17 16:13

    정말 멋진 정보입니다!

  2.  댓글주소  수정/삭제  댓글쓰기 2014.07.20 19:06

    classes.dex 파일을 jar파일로 바꾸는 데 까진 성공했습니다
    jar파일이 생성되고
    jar파일을 여는순간 에러가 뜨고
    jd-gui로도 안열리면 어떤게 문제인가요?

  3.  댓글주소  수정/삭제  댓글쓰기 2015.02.05 17:48

    혹시 apk를 zip으로 했다가 풀어도 똑같이 apk로 나오는데 어떻게해야할가요?

  4.  댓글주소  수정/삭제  댓글쓰기 오호 2015.11.22 19:42

    탱큐탱큐
    근데 일쿠는 보안이 너무 강해서....ㅠㅠㅠㅠㅠㅠㅠ

  5.  댓글주소  수정/삭제  댓글쓰기 자료는 좋은데 2016.01.14 09:39

    본인도 출처를 좀 달고 정리하시죠.. 어디서 보고 했을꺼 아닌가요..?

  6.  댓글주소  수정/삭제  댓글쓰기 진짜 감사8시간 동안 뻘짓 2016.01.30 20:58

    감사감사감사감사감사감사 정말 감사요 진작에 밧어야하는건대ㅔ

  7.  댓글주소  수정/삭제  댓글쓰기 blueasa 2016.07.29 14:03 신고

    좋은 정보 감사합니다. :)

  8.  댓글주소  수정/삭제  댓글쓰기 gg 2017.04.04 23:46

    좋은 정보 감사합니다!! 퍼갈게요!!

  9.  댓글주소  수정/삭제  댓글쓰기 Jv 2017.11.24 16:56

    너무너무 감사합니다!!