티스토리 뷰
시작하기 전
글로 남기지는 않았던,
이전 단계에서 진행했던 실습들과 과정에 대한 메모를 남겨본다.
안드로이드 스튜디오에서 수정한 파일을
apk 파일로 배포(재컴파일, 즉 변경사항이 apk 파일에 적용되도록)하기 위해
안드로이드 사이닝(Generate Signed APK)을 한 뒤, release 파일로 생성했다.
생성된 파일의 경로는 Android-InsecureBankv2-master₩InsecureBankv2이고,
app-release.apk라는 이름으로 apk 파일이 재생성되었다.
소스 파일을 가지고 있는 상태에서 재컴파일을 해보았는데,
이번 글에서는 소스 코드를 갖고 있지 않고도
디컴파일을 이용해 애플리케이션을 분석하는 방법을 알아본다.
우여곡절
위의 과정들을 진행하던 도중,
Unable to start the daemon process라든지
Unsupported Java라든지 하는 수많은 오류를 만났는데,
하나를 고치면 하나가 생기는 바람에 조금 많이 갑갑했다.
어쨌든 오류들의 공통점은 gradle과 jdk, java의 버전에 있었기에
그 부분들을 스택오버플로우에 검색해서
Gradle JDK 버전을 18에서 11로 변경하고,
File - Project Structure에서
Android Gradle Plugin Version과 Gradle Version을 적절하게 변경했다.
그 이후로는 오류없이 apk 파일을 정상적으로 생성할 수 있었다.
구글링하고 삽질하느라 힘들었지만
설정 부분에 있어서 신경써야 할 부분이 어떤 것인지 알 수 있었다.
답답했던 며칠은 뒤로 날려버리고, 이제 본론으로 넘어가자.
모바일 애플리케이션 디컴파일
디컴파일 도구 소개
일반적으로 사용하는 디컴파일 도구는 다음과 같은 것들이 있다.
- apktool: http://ibotpeaches.github.io/Apktool/
- dex2jar: https://github.com/pxb1988/dex2jar
- Java Decompiler(JD-GUI): http://jd.benow.ca/
이 중, apktool은 apk 파일로 압축된
resources.arsc, classes.dex, XML 파일들을
디버깅 파일 형태로 변환하고, 수정되면 다시 수정된 apk 파일로 생성하는 도구이다.
apktool 사용
1. https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat
의 내용을 복사하고, 메모장에 붙여넣기 하여 파일 이름을 apktool.bat 으로 저장한다.
2. https://bitbucket.org/iBotPeaches/apktool/downloads/
파일을 다운로드 받고, apktool.jar로 파일 이름을 변경한다.
3. 위 두 파일을 C:\Windows 파일로 이동시킨다.
오류 발생
제대로 파일명을 지정하고 Windows 디렉터리로 이동시켰으나,
🩸 File Not Found
🩸 Error: Unable to access jarfile C:\Windows\apktool.jar 에러가 발생한다.
알집을 삭제하거나, 알집/반디집 등 기본 연결 프로그램으로 설정된 앱을
설정 해제하고, 자바로 설정한다. (재부팅한다. 재부팅..재부팅....)
💬 변경 전
💬 변경 후
apktool 실행
위 오류가 잘 해결되었으니 apktool을 실행한다.
정상적으로 실행됨을 확인 가능하다.
먼저, C:\Android-InsecureBankv2-master\InsecureBankv2\app 디렉터리로 이동한다.
그 다음, apktool d app-release.apk 명령어로 소스 코드를 디컴파일한다.
C:\Android-InsecureBankv2-master\InsecureBankv2\app\app-release 디렉터리에
관련 파일들이 생성된다.
여기서는 평문화된 XML 파일을,
C:\Android-InsecureBankv2-master\InsecureBankv2\app\app-release\smali\com\android\insecurebankv2에서
smali 파일을 확인할 수 있다.
dex2jar와 JD-GUI를 이용
dex2jar는 명칭과 같이,
APK 파일 또는 APK 파일에 포함된 classes.dex 파일을
자바 클래스 파일로 변환해주는 도구다.
🩸 위 링크에서 다운로드 받을 수 있지만,
버전이 업데이트 되면서 완성되지 않은 부분이 있어
제대로 실행되지 않으므로 아래 파일을 첨부한다.
dex2jar 2.0 다운로드와 실행
C:\Android-InsecureBankv2-master\InsecureBankv2 안에
위 폴더를 붙여 넣는다.
그 다음 cd C:\Android-InsecureBankv2-master\InsecureBankv2\dex2jar-2.0으로 이동한 후,
d2j-dex2jar.bat InsecureBankv2.apk를 실행한다.
⛔ 원래 C:\Android-InsecureBankv2-master 경로에 있었던 InsecureBankv2.apk 파일을
C:\Android-InsecureBankv2-master\InsecureBankv2\dex2jar-2.0 디렉터리로 이동시켜 놨어야 한다.
InsecureBankv2-dex2jar.jar 파일 생성
dex2jar InsecureBankv2.apk -> .\InsecureBankv2-dex2jar.jar 라는 문구를 마지막으로
InsecureBankv2-dex2jar.jar 파일이 생성된 것을 확인할 수 있다.
생성된 jar 파일을 읽기 위해서 자바 파일로 디컴파일이 필요하다.
자바 디컴파일러로 JD-GUI를 사용한다.
JD-GUI로 자바 파일 디컴파일
윈도우에서 사용할 수 있는 JD-GUI 파일은 아래에 있다.
jd-gui.exe 파일을 실행하고 InsecureBankv2-dex2jar.jar 파일을 불러오면
자동 디컴파일 된다.
기타
위의 모든 기능을 하나로 합친 듯한 기능을 가진
BytecodeViewer를 이용하여 APK 파일을 분석할 수 있다.
APK 파일을 디컴파일하여 바이트코드 형태로 보여주고,
클래스 파일->자바 파일로 변환한 소스파일도 복원해 함께 보여준다.
즉, 한 쪽에는 자바 디컴파일 소스 코드를 보여주고
다른 한 쪽에는 바이트코드를 보여주어
바이트 코드를 수정하기에 유용하다.
또한, 다른 도구에 비해 분석 속도가 매우 빠른 것이 장점이다.
'WEB&APP 진단 > Android' 카테고리의 다른 글
2.2 취약점 진단 및 분석 도구 실습 - ADB(Android Debug Bridge) 기능 활용 (0) | 2022.04.08 |
---|---|
2.1 취약점 진단 및 분석 도구 실습 - ADB(Android Debug Bridge) 개요와 기본 사용법 (0) | 2022.04.06 |
1.4 환경 구축 - 인시큐어뱅크(InsecureBankv2) 앱 설치 (0) | 2022.03.30 |
1.3 환경 구성 - 녹스 개발자 옵션 활성화 (1) | 2022.03.30 |
1.2 환경 구성 - Android Studio와 가상 에뮬레이터, 녹스 설치 (0) | 2022.03.30 |
- Thanks for comming.
- 오늘은
- 명이 방문했어요
- 어제는
- 명이 방문했어요