TLS 콜백 함수
-> (Thread Local Storage = 스레드 별로 독립된 데이터 저장공간)
-> 프로세스 스레드가 생성/종료 될때마다 자동으로 호출되는 콜백 함수 (메인 스레드가 생성될 때도 호출된다. EP코드 보다도 먼저 호출 된다.)
-> IMAGE_DATA_DIRECTORY[9]에 TLS 테이블(IMAGE_TLS_DIRECTORY)의 주솟값이 들어있다.(RVA 형태)
IMAGE_TLS_DIRECTORY 구조체
typedef struct _IMAGE_TLS_DIRECTORY64{
ULONGLONG StartAddressOfRawData
ULONGLONG EndAddressOfRawData
ULONGLONG AddressOfIndex
ULONGLONG AddressOfCallBacks
DWORD SizeOfZeroFill
DWORD Characteristics
}
StartAddressOfRawData와 EndAddressOfRawData
-> 각각 _tls_start와 _tls_start 전역 변수에 대한 번지값을 담고 있다.
AddressOfIndex
-> TLS 슬롯 배열의 인덱스를 담고 있는 변수의 번지를 담고 있다.
AddressOfCallBacks
-> TLS 콜백 함수 주소(VA) 배열을 가르킨다.(배열의 끝은 NULL)
수작업으로 TLS 콜백 함수 추가하기(자세한건 리버싱 핵심원리 책 참조)
1. IMAGE_DATA_DIRECTORY[9]에 주소 입력(IMAGE_TLS_DIRECTORY 구조체 주소)
2. 헥스 에디터로 IMAGE_TLS_DIRECTORY 구조체 멤버값 입력
'Reversing(리버싱 핵심 원리) > 고급 리버싱' 카테고리의 다른 글
PEB (Process Environment Block) (0) | 2018.09.06 |
---|---|
TEB(Thread Environment Block) (0) | 2018.09.05 |