| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 쿠키변조
- 모의해킹
- 취약점 진단
- androidhacking
- 밴딧
- sql injection
- androGoat
- Bandit
- bandit #밴딧 #웹해킹 #해킹 #화이트해커 #공부 #스터디 #IT #hacking #linux #openssl #nmap
- 안드로이드 모의해킹
- time-based
- error-based
- pentest
- msfconsole #heartbleed #247ctf #misc #webhacking
- Linux
- 리눅스
Archives
- Today
- Total
d0r1
emulator_properties 우회하기 본문
분명 강의에는 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 |