Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- golang
- injuredandroid.apk
- BOB면접
- UTXO
- jadx
- BOB10기
- 비트코인
- bitcoin
- 앱변조
- FlagOneLoginActivity
- blockchain
- smali
- AndroGoat
- Burp Suite
- apk easy tool
- FlagTwoActivity
- BOB후기
- 안드로이드 앱 진단 환경설정
- 자산추적
- 블록체인
- 보안제품개발
- XSS
- Burp Suite CA
- BOB 합격후기
- NOX
- Frida
- injuredandroid
- SlubBackdoor #응용 #악성코드 #악성코드_제작 #Python #깃허브를_이용한_악성코드
- BOB10기합격후기
- 솔루션개발
Archives
- Today
- Total
Kye0m's Security
[AndroGoat] Emulator Detection bypass 본문
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 |