frida 사용 중 의문점

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는 이상한 값을 출력한다는 것이다.

원인분석 #

comments powered by Disqus