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
- gdb debug
- trace intent
- 휴대폰 번호 변조
- hooking script
- digest hooking
- 취약점
- actuator endpoint
- http request smuggling
- 보안진단원
- without frida
- native code hooking
- actuator env
- Frida
- gdb memory dump
- firebasescanner
- android hooking
- 취약점진단
- trace cipher
- Firebase Real-time Database
- spring boot 취약점
- actuator heapdump
- 무결성 검증 우회
- graphiql
- Android
- APP 진단
- Firebase 취약점
- gdb 메모리 덤프
- Android 취약점진단
- source map
- so hooking
Archives
- Today
- Total
Und3r__Score__
_Frida Hooking Script 04_ 무결성 검증 우회 본문
(in Android)
classes.dex 파일을 이용하여 무결성 검증을 수행하는 진단 대상 애플리케이션이 있어 우회하기 위해 제작한 후킹 스크립트입니다. 애플리케이션에서 java.util.zip.ZipEntry를 이용하여 classes.dex 파일들을 확인하고, 해당 파일들의 hash digest 값을 비교하여 무결성을 검증하고 있었습니다.
java.security.MessageDigest digest()를 후킹하여 classes.dex 파일들의 hash digest 값들을 확인하고, 문자열 비교에 사용되는strcmp 함수 return 값을 변조하여 검증 로직을 우회하는 스크립트입니다.
import frida
import time
import sys
def main():
jscode = """
/* classes.dex files digest */
/* 원본 classes.dex digest
classes.dex : bce6c0faac948d78fcfbfe69f5e2qwer
classes2.dex : 381c62b1c16dea3659cb3143ac2dqwer
classes3.dex : dc520119264a046bf35be2b7b2baqwer
classes4.dex : c0512da813e66a65df3a9a5c8f2bqwer
*/
/* 변조 classes.dex digest
classes.dex : dda8da7d10a2b292b6f00a617a8ca192
*/
var md5 = Java.use("java.security.MessageDigest");
md5.digest.overload().implementation = function(){
var ret = this.digest();
var buffer = Java.array('byte',ret);
var resultStr = "0x";
for(var i = 0; i < 16; ++i){
var nn = buffer[i];
if (nn < 0)
{
//nn = 0xFFFFFFFF + nn + 1;
nn = (nn)>>>0;
nn = nn.toString(16).toUpperCase().substr(-2,2);
}
else if (nn < 16){
nn = '0' + nn.toString(16).toUpperCase();
}
else{
nn = nn.toString(16).toUpperCase();
}
resultStr+= nn;
}
console.log("[classes.dex digest] Digest : " + resultStr);
return ret;
}
var flagDexHash = Boolean(0);
//strcmp
Interceptor.attach(Module.findExportByName(null, "strcmp"), {
onEnter: function (args) {
var str1 = Memory.readUtf8String(args[0]);
var str2 = Memory.readUtf8String(args[1]);
if(str2 == "dda8da7d10a2b292b6f00a617a8ca192"){
console.log("[strcmp][+](" + str1 + "," + str2 + ")");
flagDexHash = Boolean(1);
}
},
onLeave: function(retval) {
if(this.flagDexHash){
retval.replace(0);
console.log("[strcmp][-] Compare dex hash");
flagDexHash = Boolean(0);
}
return retval;
}
});
"""
device = frida.get_device_manager().enumerate_devices()[-1]
pid = device.spawn([pkgNm])
session = device.attach(pid)
script = session.create_script(jscode)
time.sleep(3)
script.load()
print("[*] Start Script")
sys.stdin.read()
if __name__ == "__main__":
main()
'취약점진단 > Mobile (Android, iOS)' 카테고리의 다른 글
Android 진단 시 확인해야 하는 Class 및 function 정리 (0) | 2024.03.21 |
---|---|
_Frida Hooking Script 03_ native code hooking (0) | 2024.02.21 |
_Frida Hooking Script 02_ trace intent, cipher (0) | 2024.02.20 |
_Frida Hooking Script 01_ 휴대폰 번호 변조 (0) | 2024.02.20 |
Firebase Real-time Databases Misconfiguration (0) | 2024.02.20 |