안드로이드 기기에서 frida를 실행하기위해서는 2가지 조건을 만족해야한다.
○ host PC에 frida 설치
○ 안드로이드 기기 내에 frida-server 설치
Install
○ host PC - frida 설치
frida 설치
pip install frida frida-tools
host PC에서 frida 설치방법은 매우 간단하다.
pip를 이용해 frida python 라이브러리를 설치해주면 끝이다.
frida 버전 확인
$ pip show frida
Name: frida
Version: 16.0.2
Summary: Dynamic instrumentation toolkit for developers, reverse-engineers, and security researchers
Home-page: https://frida.re
Author: Frida Developers
Author-email: oleavr@frida.re
License: wxWindows Library Licence, Version 3.1
Location: -
Requires: setuptools
이후에 설치할 frida-server와의 버전을 맞춰주기위해서 host에 설치한 frida의 버전을 확인하자. (필자는 16.0.2로 진행)
○ 안드로이드 기기 - frida-server 설치
frida github
https://github.com/frida/frida/releases
링크는 frida가 공개된 github이다.
링크를 접속하면 frida 버전 & 환경별로 오픈소스가 공개되어있는 것을 확인할 수 있다.
앞선 과정에서 확인했던 host PC frida 버전에 맞춰서 검색하고 [그림 1]에 보이는 안드로이드 frida-server를 본인의 안드로이드 기기 아키텍처에 맞춰서 다운로드 받으면 된다.
안드로이드 기기 아키텍처 확인
$ adb shell getprop ro.product.cpu.abi
x86_64
안드로이드 기기 아키텍처는 위와 같이 adb를 활용해서 알아낼 수 있다.
필자는 x86_64임으로 frida-server-16.0.2-android-x86_64를 다운로드 받도록 하겠다.
안드로이드 기기에 frida-server 설치
먼저 안드로이드 기기와 PC를 연결한다. (애뮬레이터 사용자는 별도의 연결과정이 필요없다.)
$ adb devices
List of devices attached
emulator-5554 device
adb devices 명령을 입력하여 디바이스 연결이 정상인지 확인한다.
$ adb push frida-server-16.0.2-android-x86_64 /data/local/tmp/frida-server
frida-server-16.0.2-android-x86_64: 1 file pushed, 0 skipped. 202.0 MB/s (106227128 bytes in 0.501s)
다음으로 adb push 명령을 이용해서 기기 내부의 "/data/local/tmp" 경로에 frida-server를 넣어준다.
$ adb shell
emu64xa:/ $ cd /data/local/tmp
emu64xa:/data/local/tmp $ ls
frida-server
adb shell로 기기 내부에 접속하고 "/data/local/tmp" 경로로 이동하면 frida-server가 설치된 것을 확인할 수 있다!
Use Frida
○ frida-server 실행
emu64xa:/data/local/tmp $ ls -al
total 103764
drwxrwx--x 2 shell shell 4096 2022-11-16 18:19 .
drwxr-x--x 5 root root 4096 2022-11-07 17:42 ..
-rw-rw-rw- 1 shell shell 106227128 2022-11-16 18:14 frida-server
frida-server를 정상적으로 실행하기위해서는 기기를 루팅한 상태여야한다.
필자는 루팅된 기기라는 전제로 과정을 진행하도록하겠다. (루팅이 안된 독자는 루팅하고 돌아오길바란다.)
루팅과정이 필요한 이유는 frida-server를 root 권한으로 실행시켜야 정상적으로 frida-server를 활용한 후킹이 가능하기 때문이다.
emu64xa:/data/local/tmp $ su
emu64xa:/data/local/tmp # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),1078(ext_data_rw),1079(ext_obb_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid),3012(readtracefs) context=u:r:su:s0
emu64xa:/data/local/tmp # chmod 777 frida-server
emu64xa:/data/local/tmp # chown root:root frida-server
emu64xa:/data/local/tmp # ls -al
total 103764
drwxrwx--x 2 shell shell 4096 2022-11-16 18:19 .
drwxr-x--x 5 root root 4096 2022-11-07 17:42 ..
-rwxrwxrwx 1 root root 106227128 2022-11-16 18:14 frida-server
su 명령으로 root 권한을 획득하고 frida-server에 대한 rwx 권한을 모두 허용한다.
마지막으로 frida-server에 대한 소유자를 root로 변경하면 frida-server를 실행하기 위한 모든 작업은 끝이다!
○ frida-server를 활용한 App 후킹
frida를 활용하여 안드로이드 기기 내부의 App을 후킹해보자.
emu64xa:/data/local/tmp # ./frida-server &
[1] 12465
먼저, 기기 내부에 설치한 frida-server를 실행한다.
$ python uncrack3.py
App is starting ... pid : 16276
[*] Running Frida
[*] Start Hooking
[*] isDebuggerConnected() is called
[*] System.exit() is called
[*] System.exit() is called
host PC로 돌아와서 본인이 python으로 작성한 frida 코드를 실행한다.
실행하면 위 예제와 같이 frida 코드가 정상적으로 실행되고 안드로이드 기기내에서 App에 대한 후킹이 이뤄진 것을 확인할 수 있을 것이다!
Finish
기본적으로 frida는 App 동적분석을 위해 자주 활용되는 도구다.
실제로 App 분석을 진행할 때, frida를 이용한 동적분석은 App 로직과 실행흐름을 파악하기에 매우 훌륭한 역할을 수행해준다.
App 취분에 관심있는 독자는 반드시 frida 사용 방법을 마스터하는 것을 추천한다!
다들 즐거운 App 취분하시길~