메모장 입니다2
Windows] TLS 콜백함수 본문
0. 정의
: 쓰레드 이전/후에 실행되는 함수.(TLS 정의시 매쓰레드 마다 항상 실행됨)
>Main 쓰레드(EP) 이전에 실행되는 콜백함수에 안티디버깅 코드를 삽입하여 리버싱 막음.
*TLS(Thread Local Storage) : 각 스레드의 독립된 데이터 저장 공간.
1. 함수 형식(dll과 비슷)
BOOL WINAPI DllMain(
__in HINSTANCE hinstDLL,
__in DWORD fdwReason,
__in LPVOID lpvReserved
);
-Reason: 함수가 호출된 타이밍이 저장.
1)DLL_PROCESS_ATTACH 1 //main 함수 호출 전
2)DLL_THREAD_ATTACH 2 //사용자 쓰레드 호출 전
3)DLL_THREAD_DETACH 3 //사용자 쓰레드 종료 후
4)DLL_PROCESS_DETACH 0 //main 함수 종료 후
>활용법:
if(rfdwReason == 1) //호출 시점이 main 함수 실행 전이라면,
{ 안티디버깅 코드 }
2. PE 헤더
-IMAGE_NT_HEADERS - IMAGE_OPTIONAL_HEADER - IMAGE_DATA_DIRCTORY[9]
> TLS Table = IMAGE_TLS_DIRECTORY (RVA:9310)
-32bit
*Address of Callbacks: TLS 콜백함수들의 주소(VA)가 저장되있는 배열 주소
<-> 64bit
출처: reversecore.com
. 디버깅
-ollydbg
1) olly advanced plugin
2) option> system break
-WinDbg> default system break(설정 필요 x)
*ntdll 내부, System Startup Breakpoint 에서 멈춘 모습.
'Study > 리버싱' 카테고리의 다른 글
QR Code (0) | 2017.08.08 |
---|---|
Windows] TLS 콜백함수 - 실습 (0) | 2017.08.08 |
Windows] 32bit / 64bit 차이점 - 2 (0) | 2017.08.08 |
Windows] 32bit / 64bit 차이점 (0) | 2017.08.08 |
32bit/64bit 역사 (0) | 2017.08.08 |