맥OS / Linux

unzip <app-release.apk> -d extracted_apk

sha256sum extracted_apk/classes.dex

 

 


Windows

unzip <app-release.apk> -d extracted_apk

CertUtil -hashfile extracted_apk/classes.dex SHA256

 

 

 

참고.

debug 빌드와 release 빌드에서의 해시 값은 달라질 수 있음. ProGuard나 R8과 같은 도구가 적용되어 코드 최적화, 난독화가 발생하면 DEX 파일의 내용이 달라져 해시 값도 달라질 수 있음.

 

 

Build > Generate Signed Bundle / APK…

 

 

 

 

APK 선택

 

 

 

새로만들기

Key store path > Create new…

 

 

 

 

Key store path > 경로 선택 후 파일명.jks 확장자로 지정

필드 모두 채운 후 OK

 

 

 

 

Build Variants > release 선택 후 Create

 

 

프로젝트_파일/app/release/ 밑에 APK 생성 확인

 

 

 

 

1. Project Build / Clean

./gradlew clean build

 

 

 

 


2. APK Build

Build > Build Bundle(s) / APK(s) > Build APK(s)

 

 

 

 


3. APK install

adb install -r app/build/outputs/apk/debug/app-debug.apk

 

 

 

안드로이드 APK 파일 내 AndroidManifest.xml 에 

android:exported="true"

옵션이 존재하면 외부에서 호출이 가능함.

 

 

am start –n 명령을 통해 Activity를 강제로 실행할 수 있음.

adb shell am start -n com.example.appname/com.example.appname.Activityname

 

ex.

adb shell am start -n com.test.app005/com.test.app005.MainActivity

 

 

* 사용 도구

- Burp Suite Pro

- mitm_relay.py

 

 

mitm_relay 스크립트를 이용하여 TCP 패킷을 잡고, Burp에서 Intercept하여 변조가 가능함.

 

 


1. 안드로이드 shell 접근 후 iptables rule 생성

adb shell

 

iptables -A OUTPUT -t nat -p tcp -d <대상_IP> --dport <대상_PORT> -j DNAT --to-destination <내_PC_ IP>

 

 

 


2. Burp / 안드로이드 단말기 환경설정

- Burp Suite

Proxy Settings > Proxy listeners > Edit

> all interfaces / 포트 지정(ex.8888)

 

- 안드로이드 단말기

와이파이 > 설정 > 프록시 > 수동

> 프록시 호스트 이름 : 내 PC IP

> 프록시 포트 : Burp에서 지정한 포트 (ex. 8888)

 

 

 


3. mitm_relay 실행

python mitm_relay.py -l <내_PC_IP> -p 127.0.0.1:8888 -r tcp:<대상_PORT>:<대상_IP>:<대상_PORT>

 

 

 


4. Burp Suite에서 TCP 패킷 변조

1) Proxy > Intercept On

 

2) 안드로이드 단말기에서 TCP 통신 시도

 

3) Burp에서 TCP 패킷 변조 가능함.

 

 

adb shell ps | findstr <패키지명>

 

 

adb logcat --pid=<pid>

 

 

1. apktool 다운로드

다운로드 경로

 


2. APK 파일 디컴파일

java -jar apktool_2.9.3.jar d "apk_파일(경로)"

 

 

 

 

 


3. 코드 변조

 

 

 


4. APK 파일 리패키징

java -jar apktool_2.9.3.jar b "디컴파일된_폴더_경로"

 

 

 

리패키징된 APK 파일은 해당 폴더/dist/에 위치함.

 

 

 

 


5. Keystore 생성 (처음 1회)

keytool -genkey -v -keystore signed.key -alias signed -keyalg RSA -keysize 2048

 

 

 


6. APK 파일 서명

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore signed.key <서명할_apk파일> signed