메모장 입니다2

Windows] TLS 콜백함수 본문

Study/리버싱

Windows] TLS 콜백함수

Wooum@n 2017. 8. 8. 18:04

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