Win CE 6.0 플랫폼에서 후킹하는 기법임. 리눅스에서는 다르게 해야함.



pcb 후킹 단계 - 메모리 폴트를 감지하는 후킹 함수 작성. malloc을 예로 작성.



1. 후킹 함수 준비.

스텝 1) 어떤 함수를 후킹 할지 결정하자. -우리는 malloc, free, memset 등

스텝 2) 목적을 위해 필요한 데이터들을 수집.(ex) profiling data for memory fault detection

2-1) memory fault detection 을 알기 위해 수집해야 하는 데이터들

* site : 메모리의 할당 및 해제가 발생하는 메모리 위치.

* Addr : 할당되거나 해제된 메모리 블락의 시작 주소.

* Size : 할당되거나 해제된 메모리의 사이즈.

* Usage: 메모리 용도? 사용량?

* Occurrence_count : 메모리 할당 요청 횟수에 따라 +1, 해제하는 횟수에따라 -1한다. 변수 하나를 가지고.

* Status : 각 메모리 주소마다 해당 주소에 최근에 할당, 해제, 접근 등 어떤 요청이 왔었는지가 기록되어있다.

  a주소에 Status가 (0,0,0,0) 이라면, a주소의 공간은 해제만 최근에 4번 일어났다는 의미. 


스텝 3) 후킹함수 작성

2. PCB의 위치 찾기.

스텝 1) Calculating the PCB base address

Step 2: Accessing the PCB memory space

3. PCB 후킹.(내가 원하는 주소로 특정 주소를 변경 - 함수테이블내에서)




정리 :

malloc을 후킹하고자 한다면.

먼저 hook_malloc 함수를 정의한다.(내가 하고자 하는 작업을 추가한 사용자 수정 malloc 함수)

해당 함수를 공유 메모리 공간에 올려야 한다.(모든 프로세스가 접근 가능 하도록)

그 다음 후킹 드라이버를 작성하여, 현재 프로세스의 pcb 내의

함수 테이블에서 malloc 함수의 시작 주소값을 내가 공유 메모리 공간에 추가해둔

hook_malloc 함수의 시작 주소 값으로 대체해준다. (후킹)


블로그 이미지

kuku_dass

,