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에 관한 포스팅은 이전글을 참고하길 바라며


-끝-

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

어플리케이션을 릴리즈 하기 위해서는 키스토어(keystore)를 생성하고, 사인(Signing)을 해야한다.

기본적으로 *디버그용 키가 적용되어 개발하는데는 문제가 없지만 이를 배포하기 위해서는 자기만의 키를 발급받고,

사인을 해서 본인의 흔적을 남겨야한다. 키는 어플의 업데이트 또는 데이터와 코드의 공유를 가능하게 해 주기때문에

중요하게 관리해야하며, 타인에게 유출되어서도 안된다.


*디버그키 - 일반적으로 C:\Users\사용자\.android\debug.keystore 에서 확인가능

컴퓨터마다 위치가 다를 수 있으니, 해당 위치에 보이지 않는다면 


여기서 확인가능하다.




이 글에서는 새로 키를 생성하고 사인하는법과 , 기존의 키를 가지고 사인하는법을 다뤄본다


1. 새로운 키(keystore) 생성과 함께 배포용 apk 생성



프로젝트 우클릭 > Android Tools > Export Signed Application Package... 클릭




프로젝트 명 생성(자동) > 다음



Create new keystore 선택 후 Browse... 클릭




임의 키 이름 입력 후 저장





비밀번호 , 비밀번호 확인 입력 후 다음




Alias는 키값을 식별할 수 있는 적절한 이름, 비밀번호도 마찬가지  (이 두가지는 이전에 설정한 값과 달라도 됨)

Validity는 keysotre의 유효기간으로, 임의로 적으면 됨

Fist and Last Name에 이름 입력 후 다음 (밑의 나머지는 회사정보나 지역명 등등 적어도 되고 안적어도 됨)




배포용 apk를 생성할 위치를 설정하고 Finish를 눌러주면 배포용 apk 생성 끝.





2. 기존의 키를 가지고 배포용 apk 생성


3번째 첨부 이미지에서 Create 대신 Use existing을 선택해주면 됨


-끝-




'Android > Compile' 카테고리의 다른 글

apk파일 디컴파일하기  (12) 2013.10.21
Proguard를 이용해 코드난독화 적용하기  (7) 2013.10.21