Kye0m's Security

[AndroGoat] Emulator Detection bypass 본문

앱 모의해킹/AndroGoat

[AndroGoat] Emulator Detection bypass

Kye0m 2022. 9. 16. 12:59

AndroGoat - Emulator Detection

이번 문제는 AndroGoat에 있는 에뮬레이터탐지를 우회하기 위한 문제이다.

nox를 통해 Emulator Detection에서 Check Emulator 버튼을 누르면 에뮬레이터가 아니라고 나온다.

 

 

public final boolean isEmulator() {
        String str = Build.FINGERPRINT + Build.DEVICE + Build.MODEL + Build.BRAND + Build.PRODUCT + Build.MANUFACTURER + Build.HARDWARE;
        if (str != null) {
            String builddtls = str.toLowerCase();
            Intrinsics.checkExpressionValueIsNotNull(builddtls, "(this as java.lang.String).toLowerCase()");
            return StringsKt.contains$default((CharSequence) builddtls, (CharSequence) "generic", false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) EnvironmentCompat.MEDIA_UNKNOWN, false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) "emulator", false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) "sdk", false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) "vbox", false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) "genymotion", false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) "x86", false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) "goldfish", false, 2, (Object) null) || StringsKt.contains$default((CharSequence) builddtls, (CharSequence) "test-keys", false, 2, (Object) null);
        }
        throw new TypeCastException("null cannot be cast to non-null type java.lang.String");
    }
}

EmulatorDetectionActivity를 jadx로 열었을 때, isEmulator()함수이다.

해당 함수는 6번째줄을 통해서 "generic","emulator","sdk","vbox" 등등 에뮬레이터 정보를 이용한 탐지를 진행한다.

김남수, 김성호, 박민수 and 조성제. (2021). 모바일 게임용 안드로이드 에뮬레이터 탐지 기법. 한국소프트웨어감정평가학회 논문지, 17(1), 41-50.

을 참고하면 기존탐지기법에 해당하는 에뮬레이터의 특징이 Nox에 포함되어 있지않아 탐지하지 못한다.

해당 함수가 Nox를 에뮬레이터로 탐지하지 못하므로, 반대로 에뮬레이터로 탐지하게끔 하는 실습을 진행할 예정이다.

 

문제풀이

Smali 변조를 통한 우회

수정 전

해당 부분이 에뮬레이터의 정보를 받아온 후, 반환해주는 부분이다

336라인과 337라인 사이에 return true를 넣어서 항상 에뮬레이터로 탐지하게끔 하는 것이 목표이다.

수정 후

실행해보면 성공적으로 에뮬레이터로 탐지하는 것을 알 수 있다.

 

프리다를 통한 우회

 

console.log("Script loaded successfully");
Java.perform(function x() {
	console.log("Inside function");
	var my_class = Java.use(
		"owasp.sat.agoat.EmulatorDetectionActivity");
		console.log("check")
	my_class.isEmulator.implementation = function (args) {
		console.log("\ncomplete!!!!")
		return true;
	};
})

해당 스크립트를 통해서 항상 t값을반환하게 하여, 항상 에뮬레이터라고 인식하게해준다.

 

frida -U -f owasp.sat.agoat -l 자바스크립트 --no-pause

해당 명령어를 통해서 프리다를 실행하면 성공적으로 수행할수 있다.

'앱 모의해킹 > AndroGoat' 카테고리의 다른 글

[AndroGoat] Network Intercepting  (1) 2022.09.16
[AndroGoat] Binary Patching  (0) 2022.09.16
[AndroGoat] Root Detection Bypass  (0) 2022.09.14