안녕하세요 오늘은 안드로이드 앱을 디컴파일하고 수정 후 다시 빌드 하는 과정을 소개해드리려고 합니다.
먼저 앱(APK)파일을 소스코드로 돌리려면 Java와 Apktool 이라는 프로그램이 필요합니다.
https://www.oracle.com/java/technologies/javase-downloads.html
위의 사이트에서 JDK를 다운로드할 수 있습니다.
그리고 java --version 명령어를 사용하여 설치된 것을 확인할 수 있습니다.
만약 명령어를 찾을 수 없다는 메시지가 나온다면 JDK가 설치된 경로를 시스템 경로에 등록해주어야 합니다.
unknownui-MacBook-Pro:apktools unknown1$ java --version
java 14.0.1 2020-04-14
Java(TM) SE Runtime Environment (build 14.0.1+7)
Java HotSpot(TM) 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)
unknownui-MacBook-Pro:apktools unknown1$
https://ibotpeaches.github.io/Apktool/install/
Apktool은 위의 사이트에서 다운로드할 수 있습니다. 각 운영체제에 맞게 다운로드하시면 됩니다.
unknownui-MacBook-Pro:apktools unknown1$ ls
apktool.jar base.apk jd-gui-osx-1.6.6
apktool.sh dex2jar-2.0 pom_new.xml
다운로드가 되었다면 경로에 apktool.sh(리눅스, 맥) 또는 apktool.bat(윈도우)가 있을 겁니다.
이 파일을 실행시키면 되는데요 base.apk 앱을 디컴파일 할 경우는 아래와 같이 할 수 있습니다.
unknownui-MacBook-Pro:apktools unknown1$ ./apktool.sh d ./base.apk
I: Using Apktool 2.4.1 on base.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /Users/unknown1/Library/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Baksmaling classes2.dex...
I: Baksmaling classes3.dex...
I: Baksmaling classes4.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
I: Copying META-INF/services directory
또는 dex2jar를 사용하여 압축을 풀고 jd-gui로 볼 수도 있습니다.
https://github.com/pxb1988/dex2jar
unknownui-MacBook-Pro:apktools unknown1$ dex2jar base.apk
dex2jar base.apk -> ./base-dex2jar.jar
Detail Error Information in File ./base-error.zip
Please report this file to http://code.google.com/p/dex2jar/issues/entry if possible.
그러면 경로에 앱의 이름과 동일한 디렉토리가 생기며 디컴파일된 파일들이 저장되어 있습니다.
디컴파일된 파일이 포함된 디렉토리(decompiled)를 다시 빌드하고 싶다면 아래와 같이할 수 있습니다.
unknownui-MacBook-Pro:apktools unknown1$ ./apktool.sh b ./decompiled/ -o app.apk
I: Using Apktool 2.4.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes3 folder into classes3.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes4 folder into classes4.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes2 folder into classes2.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs... (/kotlin)
I: Copying libs... (/META-INF/services)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...
위의 명령어가 끝나면 해당 경로에 app.apk가 생길겁니다. 그러나 여기서 한가지 더 해주어야 하는데요
바로 앱에 서명을 해주어야 핸드폰에 설치를 할 수 있게 됩니다.
현재 몇몇 오픈소스를 이용하여 테스트해보았지만 검증 오류가 나네요.
zipalign과 apksigner를 이용하여 서명하라고 하는데요. 두개의 사용법을 설명하려면 길어져 여기까지 작성합니다.
아래 사이트를 참고하시면 될 것 같습니다.
https://developer.android.com/studio/publish/app-signing.html#signing-manually
https://docs.microsoft.com/ko-kr/xamarin/android/deploy-test/signing/manually-signing-the-apk
'해킹 > IOS 앱 취약점 진단' 카테고리의 다른 글
soFrida를 이용한 IOS 앱 동적 분석 - 파일분석 (3) | 2020.08.01 |
---|---|
LLDB를 이용하여 IOS(아이폰) 원격 디버깅 세팅하기 (0) | 2020.07.11 |
Frida를 무조건 익혀야 하는 이유(ios, android 앱 분석) (0) | 2020.07.05 |
처음해보는 IOS 앱 취약점 진단 후기 (0) | 2020.05.22 |
안드로이드 앱 취약점 진단을 위한 녹스 설치 및 쉘 접속 방법 (0) | 2020.05.18 |