[Frida] Binary Hooking 2

[분석환경]
Ubuntu 18.04

[분석도구]
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. 문자열 사용 함수 후킹 및 호출(hi.c)

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

int f(const char * s)
{
  printf ("String: %s\n", s);
  return 0;
}

int main(int argc, char * argv[])
{
  const char * s = "Testing!";

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

  while (1)
  {
    f (s);
    sleep (1);
  }
}

앞선 글과 동일하게 컴파일한다.

gcc -Wall hi.c -o hi

2. 변조 스크립트 작성(stringhook.py)

from __future__ import print_function
import frida
import sys

session = frida.attach("hi")
script = session.create_script("""
var st = Memory.allocUtf8String("TESTMEPLZ!");//변조할 문자열 입력
var f = new NativeFunction(ptr("%s"), 'int', ['pointer']);//메소드 생성
    // In NativeFunction param 2 is the return value type,
    // and param 3 is an array of input types
f(st);//메소드 실행 및 'TESTMEPLZ!' 문자열 의 주소 할당
""" % int(sys.argv[1], 16))
def on_message(message, data):
    print(message)
script.on('message', on_message)
script.load()

python stringhook.py 0x10438

호출 시점에 문자열이 변조되어 출력된다

Interceptor.attach(ptr(0x10438), {
    onEnter: function(args) {
                console.log("args[0]:",hexdump(args[0]));
                console.log("args[1]:",args[0].readCString());
                console.log("args[2]:",args[0].toInt32());
    },
    onLeave(retval){
    }
});

frida hi -l f.js

반응형

'Reversing' 카테고리의 다른 글

[C++] Windows Socket Programming 예제  (0) 2022.05.13
[Frida] Hooking send(), recv()  (0) 2022.05.10
[Frida] Binary Hooking 1  (1) 2022.04.28
DLL Injection 실습  (0) 2020.12.14
[Reversing] Windows 10 Anti-Reversing 기법 2  (0) 2020.12.10