frida 사용 중 의문점
2024년 11월 19일
모듈 베이스 주소를 잘못가져오는 현상 #
상황 #
- DJIFly 1.15.4 앱 분석 중 온라인 모드에서
libmsaoaidsec.so가 로드되고 동작하는데 frida를 탐지함 - frida 16.5.2, frida-server 16.5.2
- frida 후킹이 안되는 문제가 있어서 _exit 호출 직후 this.returnAddress를 찾아서 호출되는 부분을 찾고 그 함수를 실행하지 않게 만들려고 하던 중 후킹이 정상적으로 되지 않는것을 확인
/etc/<pid>/maps에서 리턴 주소가 포함된 라이브러리 영역을 확인하고, 리턴되는 위치 오프셋 계산 후 ghidra에서 확인했을 때 특정 함수가 발견돼서 그 함수를 후킹하려 했음
정보 #
frida -U -f dji.go.v5 -l .\frida_bypass.js실행 후 CLI 명령어 입력- /etc/<pid>/maps, Process.enumerateRangesSync 에서 표시되는 라이브러리 주소와 Module.findBaseAddress, Process.enumerateModules 에서 표시되는 라이브러리 주소가 다르다.
1[DEBUG] _exit called with status: 0 lr 0x72202cbae8 # (오프셋 0x1AAE8) 2 3# /etc/<pid>/maps, Process.enumerateRangesSync 40x0072202b1000-0x0072202e4000 r-xp 00000000 /data/app/~~_i74sl7lHC-6yG6S8vgj1g==/dji.go.v5-N37wmbDakNXV-c70s1woLQ==/lib/arm64/libmsaoaidsec.so 50x007244c03000-0x007244ce6000 rwxp 00000000 [anonymous] # 아래에서 base주소라고 호소하는 영역 6 7# Module.findBaseAddress, Process.enumerateModules 8libmsaoaidsec.so, 0x7244c03000, 0xE3000 - 리턴 주소를 덤프했을때 해당 라이브러리의 해당 위치가 맞는 것을 확인함. 일단 maps 파일에 있는 정보로는 확실하고, 후자(findBaseAddress 등)가 이상하다는것을 확인함.
1 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 272202cbad8 fc 6f c6 a8 c0 03 5f d6 e0 03 1f 2a c3 b5 ff 97 .o...._....*.... 372202cbae8 ce b5 ff 97 fc 0f 1c f8 f7 5b 01 a9 f5 53 02 a9 .........[...S.. - 혹시 몰라서 후자의 base 주소 영역에 오프셋(0x1AAE8)을 더해서 같은 위치를 출력해봤지만, 역시나 이상한 값이다.
1 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 27244c1dad8 a5 f4 38 91 c6 18 39 91 e1 23 01 91 e2 63 00 91 ..8...9..#...c.. 37244c1dae8 e0 03 13 aa e3 03 1f 2a d4 dc ff 97 80 e2 07 37 .......*.......7 - 이로써 확실히 알 수 있는 부분은 Module.findBaseAddress는 이상한 값을 출력한다는 것이다.