d0r1

emulator_properties 우회하기 본문

모바일 진단/Android

emulator_properties 우회하기

d0r1 2025. 4. 2. 10:50

분명 강의에는 GetProp 함수를 후킹하여 문제를 풀어가라고 했는데

안드로이드 13버전이었던 나는,, Utils.GetProp을 호출하지 않는다는 문제를 발견,,

(근데 이게 버전이 다르다고해서 호출이 안되는게 맞는건가? 의아함

 

 

jadx_gui를 통해 디컴파일하여, Utils.getProp을 통해 속성 값을 받아오고 있음을 확인하였는데

실제로 수행해보니

function test(){
    Java.perform(function() {
        var Utils = Java.use("android.com.dream_detector.Utils");
    
        console.log("Utils.getProp 메서드 존재: " + Utils.getProp);
    
        Utils.getProp.implementation = function(context, property) {
            console.log("getProp() 호출됨: " + property);
            var result = Utils.getProp.call(this, context, property);
            console.log("반환값: " + result);
            return result;
        };
    });    
}

test();

 

[Android Emulator 5554::android.com.dream_detector ]-> Utils.getProp 메서드 존재: function e() {
    [native code]
}

 

getProp이 존재는 하는데, 호출이 되지 않는 모습을 확인할 수 있었음..

그래서 의아해서 도대체 그럼 뭘 호출하는거지? 하고 확인을 해본 결과

 

다이렉트로 SystemProperties.get을 호출하고 있었음

Java.perform(function() {
    var SystemProperties = Java.use("android.os.SystemProperties");

    SystemProperties.get.overload('java.lang.String').implementation = function(prop) {
        console.log("SystemProperties.get 호출됨: " + prop);
        return this.get.call(this, prop);
    };

    SystemProperties.get.overload('java.lang.String', 'java.lang.String').implementation = function(prop, defaultValue) {
        console.log("SystemProperties.get(기본값 포함) 호출됨: " + prop);
        return this.get.call(this, prop, defaultValue);
    };
});

------

SystemProperties.get 호출됨: ro.kernel.android.qemud
SystemProperties.get 호출됨: ro.product.model

 

그럼, SystemProperties.get을 후킹해야겠다하고 마음 먹게 됨...

일단, SystemProperties.get 함수에 대해 알아보면

 

뭐,, 챗 지피티가 이렇다고 한다

 

근데 우리가 사용한 녀석은

String, String이니, 2번을 사용하는 듯 했다.

하지만, 함수는 오버로드 되어있으므로, 1번을 사용해서 풀 수 있을 거 같았다

 

이거에 맞춰서, 후킹 코드를 작성하였다

function modifyGetPropRet(){
    var knownEmulatorProperties = {
        "init.svc.qemu-props": "",
        "qemu.hw.mainkeys": "",
        "qemu.sf.fake_camera": "",
        "qemu.sf.lcd_density": "",
        "ro.bootloader": "unknown",
        "ro.kernel.android.qemud": "",
        "ro.kernel.qemu.gles": "",
        "ro.kernel.qemu": "",
        "ro.product.device": "generic",
        "ro.product.model": "sdk",
        "ro.product.name": "sdk",
        "ro.serialno": "EMULATOR"
    };
    var SystemProperties = Java.use('android.os.SystemProperties');

    SystemProperties.get.overload('java.lang.String').implementation = function(name) {
        console.log('[SystemProperties.get] Property: ' + name);
        for (var prop in knownEmulatorProperties){
            if(name == prop){
                if(knownEmulatorProperties.prop == ""){
                    return null;
                }
            }
        }
        return this.get("nothing"); 
    };
}

 

 

(추후 수정,, 할 예정)

'모바일 진단 > Android' 카테고리의 다른 글

[androgoat] Root Detection  (0) 2023.10.25
[androgoat] HardCode Issue  (0) 2023.10.25
[androgoat] side channel data leakage  (0) 2023.10.24
[androgoat] Input Validations  (0) 2023.10.24
[androgoat] Insecure Data Storage  (0) 2023.10.23