티스토리 뷰

○ BpHook/LogBpHook - 브레이크포인트가 발생할 때 호출된다. BpHook은 디버깅 대상 프로세스를 일시 정지시키지만 LogBpHook은 그렇지 않다.

○ AllExceptHook - 프로세스 내부에서 종류에 상관없이 예외가 발생하기만 하면 호출된다.

○ PostAnalysisHook - 디버거가 로드된 모듈에 대한 분석 작업을 끝냈을 때 이 후킹이 호출된다. 디버거의 분석 작업이 끝난 후에 자동으로 정적 분석 작업을 수행해야 하는 경우에 유용하게 사용할 수 있다. immlib를 이용해 함수와 기본적인 코드 블록을 해석하기 전에 모듈(실행 파일 포함해) 이 먼저 분석돼야 하는 것이 중요하다.

○ AccessViolationHook - 접근 위반이 발생할 때마다 호출된다. 퍼징 작업을 수행하는 동안에 정보를 자동으로 추적하고자 할 때 유용하게 사용될 수 있다.

○ LoadDLLHook/UnloadDLLHook - DLL이 로드되거나 언로드될 때 호출된다.

○ CreateThreadHook/ExitThreadHook - 스레드가 생성되거나 소멸될 때 호출된다.

○ CreateProcessHook/ExitProcessHook - 프로세스가 생성되거나 소멸될 때 호출된다.

○ FastLogHook/STDCALLFastLogHook - 이 후킹 타입은 후킹 코드가 실행되게 만들기 위해 어셈블리 코드를 이용한다. 후킹 코드는 그때의 특정 레지스터 값이나 메모리 주소를 로깅한다. 빈번하게 호출되는 함수를 후킹할 때 유용하게 사용된다.


○ LogBpHook 정의

1
2
3
4
5
6
7
8
9
from immlib import *
 
class Suspect_Hook( LogBpHook ):
 
    def __init__( self ):
        LogBpHook.__init__( self )
 
    def run( self, regs ):
        # 후킹이 호출될 때 시행
cs

후킹이 호출되면 run() 함수에는 모든 CPU 레지스터의 값이 파라미터로 전달된다. 전달되는 레지스터의 값은 후킹이 호출됐을 때의 값으로, 그 값을 조사하거나 원한다면 변경할 수도 있다. 


아래와 같이 regs 변수와 레지스터의 이름을 이용해 원하는 레지스터에 접근할 수 있다.

1
regs["ESP"]
cs


* PyCommand 내에 후킹을 정의해 PyCommand를 실행시킬 때마다 호출되게 할수도 있고 Immunity 디버거 디렉토리 내의 PyHooks 디렉토리에 후킹 코드를 위치시켜도 된다. 그러면 Immunity 디버거가 실행될 때마다 해당 후킹이 자동으로 설정된다.




출처 : 파이썬 해킹 프로그래밍

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함