홈 > IT > IT정보
IT정보

LD_PRELOAD 후킹 실습

3 realdragonhead 0 181 1 0

LD_PRELOAD 후킹


환경변수 LD_PRELOAD 에 설정된 라이브러리 함수는 다른 어떤 라이브러리에 있는 함수보다 우선순위로 실행이 된다는 이론하에 후킹을 시도할 수 있다. 아래와 같이 간단한 LD_PRELOAD 후킹을 실습해 볼 수 있다.


먼저 코드를 다음과 같이 짠다.

// hello.c
#include <stdio.h>


int main() {
        char temp;
        temp = getchar();
        while(getchar()!='\n');
        printf("result : %c\n",temp);
        return 0;
}

문자열 하나만을 받아 출력하는 간단한 코드이다.

코드를 보면 getchar() 함수가 있는데 이 함수를 한번 LD_PRELOAD 후킹을 해보겠다. 

물론 코드가 없어도 nm -D 명령어를 통해 무슨 함수가 있는지 확인이 가능하다.

후킹을 위해 아래와 같이 함수를 짠다.

//hooking.c
char getchar() {
        printf("now, hooked!\n");
        return 0;
}


그리고 다음과 같이 컴파일을 하여 라이브러리 파일로 만들어 주고, LD_PRELOAD 에 추가하여 준다. 과정은 아래와 같다.

# gcc -shared -fPIC -o hooking.so hooking.c

hooking.c: In function ‘getchar’:

hooking.c:2:2: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]

  printf("now, hooked!\\n");

  ^

hooking.c:2:2: warning: incompatible implicit declaration of built-in function ‘printf’

hooking.c:2:2: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’

# export LD_PRELOAD=./hooking.so

#


그리고 기존에 있던 hello 를 실행시켜 본다.

# ./hello

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!

now, hooked!^C 


후킹이 된 것을 확인해 볼 수 있다.

now, hooked! 가 계속해서 반복해서 출력이 된다. 기존 hello.c 코드에서 getchar 가 더 이상 while 반복문의 조건을 만족시키지 못하기 때문에 반복해서 출력이 되는 것이다. 이때 ctrl+c 로 프로그램을 종료시켜준다. 만약 반복문의 조건을 만족시키면서 후킹을 시도하고 싶다면 위 hooking.c 의 함수의 반환값을 '\n' 으로 주면 될 것이다.


[참고]

추가했던 환경변수는 아래와 같이 unset 명령어로 삭제 할 수 있다.

#unset LD_PRELOAD

, ,

0 Comments
Category
State
  • 현재 접속자 22 명
  • 오늘 방문자 616 명
  • 어제 방문자 459 명
  • 최대 방문자 948 명
  • 전체 방문자 146,368 명
  • 전체 게시물 1,771 개
  • 전체 댓글수 248 개
  • 전체 회원수 111 명
Facebook Twitter GooglePlus KakaoStory NaverBand