사실 그렇게 건전(?)한 짓은 아니다. 완제품을 뜯어보고 어떻게 만들었나 들여다보는 짓이라고 할 수 있다.

자바가 아무래도 머신 위에서 돌아가서 그런지 역공학 하기가 타 언어에 비해 비교적 쉬운 모양.

가끔 디컴파일을 해야할 때가 있어서 메모용으로 기록하는 글이라 정성은 좀 부족할지도 모른다.


1. APK 파일 추출

탐색기 앱 등이 보통 앱 백업 기능을 지원하는데 이를 이용하여서 컴퓨터로 옮겨도 되고, 구글링해서 추출하는 사이트를 통해 받아도 된다.

후자는 에러가 꽤 많이 나는 편이고, 페이지 내 낚시성 광고가 많아서 좀 그렇다.


2. Dex2Jar 다운로드

소스포지 통해서 최신버전을 받으면 된다. apk 파일이 있는 곳에 압축을 풀자.

탐색기에서 쉬프트(컨트롤인가...) 오른쪽 클릭을 하면 명령창을 해당 위치에서 바로 열 수 있다.

그대로 배치 파일 입력 -> 파라미터로 해당 apk파일명을 적으면 jar 파일이 뿅 하고 나온다.

이 때 유의해야할 부분은 경로 상에 '공백'이 있으면 에러가 발생한다는 점. 제대로 적었는데 에러가 나온다면 대부분 경로, 파일명 문제인 것 같다.


3. DECOMPILE!

자바 디컴파일러 아무거나 받아서 jar 파일을 열면 된다. 보통 jd gui를 사용하게 된다.

간혹, 소스가 보이지 않는 경우가 생기는데, 그 부분을 꼭 봐야겠다!면 해결방법은 간단하다.

디컴파일러를 다른걸 쓰면 된다 -_-

http://www.javadecompilers.com/ <- 온라인으로 디컴파일해주는 사이트이다. 파일로 저장도 가능.

 오랜만에 만져보니 다 까먹어서 기억 나는 게 전혀 없다. 기억이 정말 거의 리셋되었으므로 겸사겸사 다시 해보는 중이다. 우선 버튼 조작부터 까먹었으므로 버튼 조작부분부터 적어볼까 한다. 앞으로도 헷갈리는 게 있으면 간간히 적을 것이다.


1. 버튼 추가하기

우선 버튼을 하나 추가해 주었다.

ID와 설정도 내가 원하는 대로 적당히 바꾸어 주었다.


2. OnClick 리스너 추가하기

id를 통해 객체를 선언해 주고, 리스너를 설정해 준다. 이 때 설정과 동시에 생성할 수도 있고 외부 함수를 만들어놓고 xml에서 onClick속성에 함수 이름을 적어서 처리하는 것도 가능하다. 주석처리한 부분에 원하는 동작을 넣으면 된다.


3-1. 동작 예시 - 액티비티 전환

2에서 적었던 코드의 주석 처리 부분에 위와 같이 적어준다. Intent객체는 외부 앱, 액티비티 실행 등 다양한 용도로 쓰인다. 자세한 내용은 http://developer.android.com/reference/android/content/Intent.html를 참고하자. 여기서 EditorActivity.class는 전환 액티비티의 클래스이므로 상황에 맞게 적당히 바꾸어 주어야 한다.

버튼 클릭 시 액티비티가 전환된 것을 알 수 있다.


3-2. 동작 예시 - 토스트 출력

이하 동문. 참고로 토스트는 유저와 상호 소통이 불가능하고 일정 시간이 지나면 사라져버린다. 다이얼로그와는 차이가 있으니 헷갈리지 않도록 주의.

다음과 같은 토스트를 볼 수 있다.


이 외에도 다양한 동작을 수행할 수 있다.

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

[Android] Decompile  (0) 2016.12.25

+ Recent posts