본문 바로가기

pjh

APK 파일 디컴파일에서 컴파일까지 본문

H A C K I N G/Android

APK 파일 디컴파일에서 컴파일까지

리뷰 빡 2020. 3. 12. 14:58

오늘은 apk파일을 수정하는 방법에 대해서 알아보겠습니다.
기본적인 이론은 다루지 않겠습니다.
기본적인 이론에 대해 궁금하신분이 있으면 개인적으로. . .

 

진행순서
1. apk파일 -> jar파일 변경
2. apk파일 -> 디컴파일 -> smali 코드
3. smali코드 ->컴파일 -> apk파일
4. 재 서명

 

첫번째
apk파일은 java기반으로 이루어져있습니다.
그래서 가장 먼저 apk파일을 java 소스코드 형태로 디컴파일합니다.
이때 사용할 tool은 jadx라는 tool입니다
jadx다운 링크: https://github.com/skylot/jadx/releases

 

skylot/jadx

Dex to Java decompiler. Contribute to skylot/jadx development by creating an account on GitHub.

github.com

 

사진과 같이 jar파일로 디컴파일 할 apk파일을 선택하면 apk파일 내부 코드를 확인할 수 있습니다.
(apk파일을 jar파일로 디컴파일 시 100%복원되지 않기에 tool마다 소스코드가 약간 다를 수 있습니다)

 

 

 

두번째

apk파일을 smali코드로 디컴파일 합니다.
위에서 말했듯이 apk파일을 jar파일로 디컴파일 시 100% 복원되지 않기에
어셈블어인 smali코드로 변환하여 소스코드를 수정하게 됩니다.
이때 사용할 tool은 apktool.jar이라는 tool입니다
apktool 다운링크: https://ibotpeaches.github.io/Apktool/

 

Apktool - A tool for reverse engineering 3rd party, closed, binary Android apps.

A tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications. It also makes working with an app easier because of the project like file structure and

ibotpeaches.github.io

명령어: java -jar apktool.jar d 디컴파일 할 apk파일
명령어를 이용하여 apk파일을 smali코드로 디컴파일 합니다.

 

 

디컴파일되면 사진과 같이 폴더가 생성됩니다.

 

 

 

생성된 폴더를 열어 smali 코드를 확인합니다.

 

 

smali코드는 첫번째 과정에서 보았던 jar파일보다 가동성이 떨어집니다.
그래서 java코드와 smali코드를 비교하여 내용을 원하는 부분의 코드를 수정합니다.
(smali코드는 어느정도 공부가 필요합니다)

 

 

 

세번째
수정이 끝난 smali코드를 저장 후에 다시 컴파일합니다.
명령어: java -jar apktool.jar b 디컴파일 할 apk폴더명
명령어를 이용하여 smali코드를 apk파일로 컴파일합니다.

 

 

컴파일된 apk파일은 디컴파일된 폴더(UnCrackable-Level1)의 dist라는 폴더에 저장됩니다.

 

 

 

네번째
마지막으로 재 서명을 해줍니다
이때 사용되는 tool은 signapk.jar을 tool을 이용합니다.
signapk.jar 다운링크: https://github.com/appium/sign
명령어: java -jar signapk.jar 테스트키.pem 테스트키.pk8 서명할apk파일 서명된apk파일 이름

 

 

이렇게 하면 모든 과정이 끝나고 apk파일을 안드로이드에 넣어 설치하면 끝!!

Comments