1. 안드로이드 환경 구성 및 루팅 탐지 우회

2024. 10. 23. 17:432024 Android

안드로이드 기기 스펙

Galaxy On7
Version : 8.1.0
Model : SM-G610S
Serial : R59JB019LA

취약점 진단 도구 스펙

Magisk 21.0 헬조선 버전
Frida -> 16.2.1
frida-tools -> 12.3.0
python -> 3.7.7
java  -> 17 설치

1. apktool

apktool.bat 경로를 환경변수에 추가하여 사용
앱 컴파일, 디커파일 시 사용

C:/ apktool d [앱 패키지 경로]

패키지들은 /data/app/ 에 저장되고 있음

C:/ frida-ps -Uai  -> 앱 프로세스명 확인

다음 명령어로 동작중인 프로세스 확인
# pm list packages | grep [찾는 앱 이름]

C:/ adb pull [Packge Path] [로컬 저장 경로]

 

2. jadx-gui

jadx-gui.bat 파일을 직접 클릭하여 gui버전 사용

3. alzip

apk파일을 압축해제하면 dex, xml 파일 등을 추출할 수 있음

4. IDA

실제로 잘 사용은 못함

5. adb
adb devices
adb shell

6. frida
frida-ps -Uai
U 옵션은 USB 연결된 기기 

모바일 앱에서 frida-server 실행시키고 frida로 연결

C:/ frida-ps -Uai

 

루팅우회 시도

1. 앱을 실행시키면 프로세스아이디를 확인할 수 있다

2. 프로세스 아이디값을 사용해 해당 프로세스에 접근(attach)한다.
C:/ frida -U -p [PID] -l [Javascript]

3. 루팅이 탐지되었다는 경고창이 떳고  "확인" 버튼을 누르면 앱이 종료되는 것이 아니라 앱 실행이 일시중지되었다.

4. 다시 앱을 켜보니 다행히 앱 연결이 종료되어있지 않았고 루팅 체크를 우회할 수 있었다.
확인 버튼을 눌렀을 때 프로세스가 종료된다면 어떻게 frida를 앱에 attach할 수 있을지 의문..

해당 앱은 Bypass TrustManagerImpl 메서드를 사용하고 있어서 해당 코드를 우회하는 자바스크립트를 동작시켜 우회함

try {
        // Bypass TrustManagerImpl (Android > 7) {1}
        var array_list = Java.use("java.util.ArrayList");
        var TrustManagerImpl_Activity_1 = Java.use('cohttp://m.android.org.conscrypt.TrustManagerImpl');
        TrustManagerImpl_Activity_1.checkTrustedRecursive.implementation = function(certs, ocspData, tlsSctData, host, clientAuth, untrustedChain, trustAnchorChain, used) {
            console.log('[+] Bypassing TrustManagerImpl (Android > 7) checkTrustedRecursive check: ' + host);
            return array_list.$new();
        };
    } catch (err) {
        console.log('[-] TrustManagerImpl (Android > 7) checkTrustedRecursive check not found');
        //console.log(err);
    }
    try {
        // Bypass TrustManagerImpl (Android > 7) {2} (probably no more necessary)
        var TrustManagerImpl_Activity_2 = Java.use('cohttp://m.android.org.conscrypt.TrustManagerImpl');
        TrustManagerImpl_Activity_2.verifyChain.implementation = function(untrustedChain, trustAnchorChain, host, clientAuth, ocspData, tlsSctData) {
            console.log('[+] Bypassing TrustManagerImpl (Android > 7) verifyChain check: ' + host);
            return untrustedChain;
        };
    } catch (err) {
        console.log('[-] TrustManagerImpl (Android > 7) verifyChain check not found');
        //console.log(err);
    }

 

4. logcat 

모바일 기기에 접속하여 logcat 실행 및 로그기록 저장 후 로컬로 이동시킨다

C:/ adb shell

$ su -

# cd /data/local/tmp

# logcat > log.txt

C:/ adb pull /data/local/tmp/log.txt

 

 

 

'2024 Android' 카테고리의 다른 글

안드로이드 앱 루팅 탐지 로직 후킹 우회  (0) 2024.10.24