[Frida] Binary Hooking 1

[실습환경]
Ubuntu 18.04 LTS

[도구]
Frida

Frida는 바이너리 내 어떤 함수가 호출되는지 보여주고, 조작이 가능하도록 한다.

동적 바이너리 조사(DBI, Dynamic Binary Instrumentation)를 가능하게 해주는 프레임워크이다.

다양한 운영체제를 지원하고 있으며 파이썬 기반의 프레임워크로 다양한 API를 지원한다.

Frida Tutorial

Frida를 사용하여 호출된 함수를 검사하고, 인수를 수정하고, 대상 프로세스 내의 함수에 대한 사용자 지정 호출을 수행하는 방법을 보여준다

https://frida.re/docs/quickstart/

 

Quick-start guide

Inject JavaScript to explore native apps on Windows, macOS, GNU/Linux, iOS, Android, and QNX

frida.re

위의 문서를 기반으로 작성하였다.

1. 파일 생성(hello.c)

#include <stdio.h>
#include <unistd.h>

void f(int n)
{
  printf ("Number: %d\n", n);
}

int main(int argc, char * argv[])
{
  int i = 0;

  printf ("f() is at %p\n", f);

  while (1)
  {
    f (i++);
    sleep (1);
  }
}

다음 명령어로 컴파일한다.

$ gcc -Wall hello.c -o send\_hello

./send\_hello

실행을 하게 되면 %p(포인터) 포맷스트링으로 f()함수의 주소가 출력되고 1초마다 증가하는 정수를 확인할 수 있다.

2. 후킹 함수 작성(hook.py)

from __future__ import print_function
import frida
import sys

session = frida.attach("hello")
script = session.create_script("""
Interceptor.attach(ptr("%s"), {
    onEnter: function(args) {
        send(args[0].toInt32());
    }
});
""" % int(sys.argv[1], 16))
def on_message(message, data):
    print(message)
script.on('message', on_message)
script.load()
sys.stdin.read()

python hook.py 0x10438

호출되는 함수를 후킹하여 출력하도록 script를 작성하였다.

바이너리 실행 및 후킹 결과

3. 함수 조작(modify.py)

import frida
import sys

session = frida.attach("hello")
script = session.create_script("""
Interceptor.attach(ptr("%s"), {
    onEnter: function(args) {
        args[0] = ptr("1337");
    }
});
""" % int(sys.argv[1], 16))
script.load()
sys.stdin.read()

python modify.py 0x10438

후킹 스크립트가 실행되는 동안 Number의 값이 '1337'로 변조되었다.

4. 함수 호출(call.py)

import frida
import sys

session = frida.attach("hello")
script = session.create_script("""
var f = new NativeFunction(ptr("%s"), 'void', ['int']);
f(1911);
f(1911);
f(1911);
""" % int(sys.argv[1], 16))
script.load()

python call.py 0x10438

원하는 만큼함수를 호출할 수도 있다.

반응형

'Reversing' 카테고리의 다른 글

[Frida] Hooking send(), recv()  (0) 2022.05.10
[Frida] Binary Hooking 2  (0) 2022.05.03
DLL Injection 실습  (0) 2020.12.14
[Reversing] Windows 10 Anti-Reversing 기법 2  (0) 2020.12.10
[Reversing] Windows 10 Anti-Reversing 기법 1  (0) 2020.12.09