Mac에서 Frida3로 안드로이드 앱 후킹(Hooking) 및 Dump 분석하기

김민태·2024년 10월 11일

안드로이드

목록 보기
1/1
post-thumbnail

frida-server 시동을 위해 필요한 슈펴유저 권한을 얻을 수있는 루팅폰을 가지고 후킹(Hooking) 작업을 진행하는 과정입니다.


1. 준비

  1. python3 설치
brew install python3
  1. frida 설치
pip3 install frida-tools
  1. fridump3 클론 : Repository Link
git clone "링크"

2. 세팅

2-1. fridump3.py 수정

.attach(APP_NAME) => .attach(int(APP_NAME))

원본

session = frida.get_usb_device().attach(APP_NAME)

수정

session = frida.get_usb_device().attach(int(APP_NAME))

2-2. 장치의 CPU 아키텍처 확인

디버깅모드의 기기를 연결 후

adb shell getprop ro.product.cpu.abi

adb shell로 기기에 접속한 후 getprop 명령어를 입력해도 동일합니다.

2-3. frida 버전 확인하기

frida --version

2-4. 버전에 맞는 frida-server 파일 다운로드 하기

2-3번에서 조회한 16.5.2 에 맞는 서버 파일을
https://github.com/frida/frida/releases 에서 찾습니다.

2-2번에서 조회한 아키텍처에 맞는 파일을 찾아 다운로드 후 압축해제 합니다.
저는 실제 안드로이드 기기를 디버깅해 덤프작업을 하기 위해 -android파일을 골랐습니다.
필요한 OS에 맞게 다운로드 하면 되겠습니다.


3. 서버 시동

3-1. frida-server 파일 삽입

adb push Downloads/frida-server-16.5.2-android-arm64 data/local/tmp

adb push frida-server 파일의 로컬 경로 data/local/tmp 이러한 구조입니다.

3-2. adb 내부에서 서버 시동


명령어 순서
1.adb shell : adb 접속

adb shell

2.cd data/local/tmp : 3-1번에서 firda-server파일을 push 한 경로로 이동

cd data/local/tmp

3.ls : 정상 push ( 파일 존재 ) 여부 확인

ls

여기서 바로 서버를 시동하면

Permission denied 이 발생합니다.
테스트 기기는 루팅폰 이기 때문에 슈퍼유저 권한을 습득하고 다시 시동합니다.

./frida-server-16.5.2-android-arm64 & 


명령어 마지막에 &가 붙은 이유는 백그라운드로 실행하기 위해서입니다.

참고. SELinux 보안 설정 문제

Android 장치에서 SELinux가 Enforcing 모드로 설정되어 있으면 Frida가 시스템 프로세스 또는 특정 애플리케이션에 접근하지 못할 수 있습니다. 이 경우, Failed to attach 오류가 발생할 수 있습니다.

SELinux 상태를 확인합니다.

adb shell getenforce

Permissive 모드로 변경:

adb shell su -c "setenforce 0"

이 명령은 SELinux를 Permissive 모드로 변경하여 Frida가 제한 없이 시스템 프로세스에 접근할 수 있게 해줍니다. 그러나 보안 설정을 완전히 해제하는 것이므로, 실사용 장치에서는 주의해서 사용해야 합니다.

3-3 adb 밖에서 작업 대상의 PID확인

실행중인 프로세스를 확인합니다.

frida-ps -Ua


목록에서 덤프작업을 진행할 앱의 PID를 확인합니다.

확인된 PID는 17810입니다.

3-4 덤프 실행

1번 준비 과정에서 git clone받은 frida 경로로 이동한 후 명령어를 입력합니다.

python3 fridump3.py -u -r 17810

/dump 경로에 .data 파일들이 쌓여 가는걸 확인 하실 수 있습니다.


4. 확인 및 추출

용도에 맞게 여러 방식으로 확인 및 추출을 할 수 있습니다.

안드로이드 스튜디오 BinEd 플러그인을 설치해서

File - Open As Binary 를 통해 .data 파일을 열고 중요한 문자( String 등 ) 데이터가 메모리에 남는지 직접 검색 할 수도 있고

foremost를 설치해서 스크립트문과 툴을 통해 추출된 파일로 메모리에 남은 이미지를 포렌식 할 수 도 있습니다.

👇 00002054.jpg 이미지 파일이 검출된 모습👇

0개의 댓글