저번 글에서는 frida 환경을 구축하기 위한 작업들을 했습니다.
이번 글에서는 frida를 사용하기 위해 꼭 필요한 명령어들을 알아봅시다.
아래 명령어들은 저번 글에서 설치했던 frida-tools 안에 들어있는 명령어들입니다.
우선 명령어들을 실행시키기 위해 저번 시간에 녹스 앱플레이어에 설치한 frida-server를 실행시키도록 하겠습니다.
파일 실행을 위해서 파일에 실행 권한을 줘보도록 하겠습니다.
아래 명령어를 통해 frida-server 파일에 실행 권한을 주겠습니다.
> nox_adb shell "chmod 777 /data/local/tmp/frida-server"
실행 권한을 부여했다면 이제 아래 명령어를 통해 실행시킬 수 있습니다.
> nox_adb shell "/data/local/tmp/frida-server &"
nox_adb shell "<명령어>"
를 통해 녹스 shell 에 접속하지 않아도 cmd에서 바로 명령어를 실행할 수 있습니다.
/data/local/tmp/frida-server
는 실행 파일의 경로인데, 이것을 명령어로 입력하면 그 실행 파일이 실행됩니다. 뒤에 &
는 실행 파일을 백그라운드로 실행시키겠다는 의미입니다. cmd창을 꺼도 실행 파일이 종료되지 않습니다.
이제 명령어들을 살펴봅시다.
frida-ps
명령어를 사용하면 현재 실행중인 프로세스들의 정보를 볼 수 있습니다. -U
옵션을 사용하면 usb 장치에서 실행중인 프로세스들을 볼 수 있습니다.
C:\Users\dev>frida-ps -U
PID Name
---- ------------------------------------------
2887 Facebook
4891 Google Play 스토어
4490 갤러리
4034 인터넷
4620 카카오톡
frida-trace
명령어는 프로그램에서 실행되는 특정 함수를 실시간으로 추적할 수 있습니다.
아래 명령어는 usb type으로 연결된 장치 안에(-U
옵션) 인터넷 앱에서 open 함수가 실행될 때 마다(-i
옵션을 통해 open 함수를 추적 대상에 추가함) 이벤트를 실행합니다.
frida-trace -U 인터넷 -i "open"
C:\Users\dev>frida-trace -U 인터넷 -i "open"
Instrumenting...
open: Auto-generated handler at "C:\\Users\\dev\\__handlers__\\libc.so\\open.js"
Started tracing 1 function. Press Ctrl+C to stop.
/* TID 0x1b81 */
1075 ms open()
1076 ms open()
1076 ms open()
...
open 함수가 녹스 앱플레이어의 인터넷 앱에서 실행될 때 마다 로그가 출력되는 것을 볼 수 있습니다.
또한 C:\\Users\\dev\\__handlers__\\libc.so\\open.js
경로에 이벤트 핸들러가 자동으로 생성되었다고 하니 직접 파일을 열어보겠습니다.
여기서 이벤트 핸들러란 인터넷 앱에서 open 함수가 실행되었을 때, 즉, 이벤트가 발생했을 때 어떤 작업을 수행할 것인가를 정의하는 함수입니다.
// open.js
{
onEnter(log, args, state) {
log('open()');
},
onLeave(log, retval, state) {
}
}
open.js
파일의 내용은 위와 같습니다.(주석들은 지웠습니다.)
코드를 해석해보면 인터넷 앱에서 open 함수를 호출할 때 onEnter
함수를 실행하여 'open()' 을 화면에 출력하는 작업을 진행하는 것을 볼 수 있습니다. 이와 마찬가지로 앱에서 open 함수를 종료하려고 할 때 onLeave
함수를 실행합니다.
onEnter
함수와 onLeave
함수에 추가적인 코드를 작성하여 더 자세하게 특정 함수를 분석할 수 있습니다. 😃
지금까지 frida 사용을 위한 기본적인 명령어들을 알아보았습니다.
다음 시간부터는 본격적으로 FridaLab 문제들을 풀어보면서 실제로 앱 분석이 어떻게 이뤄지는지, 후킹 코드는 어떻게 작성해야 하는지 알아보도록 하겠습니다!