본문 바로가기

ETC

TLS Callback

TLS Callback에 대해서 알아 보자 .


TLS(Thread Local Storage)로 쓰레드별 독립된 데이터 저장공간이라고 보면 되는데 


안티 리버싱 테크닉 중 하나이고 단순하게 말씀드리면, 


PE 구조 중 TLS 영역이라고 있는데 그 부분에 디버거 탐지 루틴 및 안티 리버싱을 적용해둠으로써 분석을 어렵게 한다고만 알면 될 것 같다. 


경험상 이 내용을 알든 모르든 솔직히 악성코드 분석을 하는데 있어 C/S프로그램을 분석하는 데 있어 전혀 중요치 않타. 

경험만 있으면 우회할 수 있는 방법은 엄청나게 많기 때문이다. 


하지만 입문자 기준으로 하면 알아두면 유용하게 쓰일 수 있고 PE구조를 공부하기 전 TLS와 같은 내용을 공부해두게 되면 

더 일찍 이해 할 수 있다고 판단된다. 


이유는 보통 PE구조를 접하게되면 적어도 3번이상은 반복해서 보고 또 보고 익숙해져야하는데 많은 사람들이 쉽게 포기 한다. 나의 경우도 마찬가지였다. 


그래서 나는 뭘 가르치든 뭘 하든 먼저 경험해보는 방식으로 진행한다. 

일단 관련된 내용을 먼저해보고 다시 한다면 이해도가 휠씬 다르기 때문이다. 


작동 원리


1) ollydbg 실행 → 파일 실행


2) 실행한 파일이 로드되기 전 ntdll.dll à LdrpRunInitializeRoutines()TLS callback으로 등록된 코드를 실행


3) 등록된 코드가 안티디버깅으로 혹은 디버거 탐지 루틴을 적용해두었다면 ollydbg 종료

  

 LordPE를 통한 자동 계산


1) LordPE 다운로드 : http://www.softpedia.com/get/Programming/File-Editors/LordPE.shtml

2) PE Editor  → 예제 파일 실행 → Directories → "H" 클릭

3) Tls Table 중 Address of Callbacks 찾기.  

그림 1. WinNT.h에 선언된 TLS 테이블



그림 2. TLSTable Address of Callbacks 값 : 403084



실은 TLS Callback을 먼저 배우는 가장 큰 목적은 오프셋 계산방법을 명확하게 해두기 위함이다. 

책을 보고 여러차례 혹은 다양한 인터넷 블로그를 보면서 여러차례한다면 충분히 알 수 있는 내용이지만 


그리고 알고 보면 정말 정말 쉬운 내용이지만 누군가의 설명없이 단순히 이해하기는 쉽지 않을 것으로 판단된다. 

오프라인 교육 때 사용하는 PPT파일을 업로드할 예정이며 필요한 분은 참고하기 바란다. 

 

그 중 우회 기법부분은 내용에서 제외 후 올린다. 가장 핵심이 되는 부분은 저 부분이기도 하고 교육받는 친구들과 차별화를 두기 위함이다.


리버스엔지니어링_안티디버깅(TLS Callback)1.pdf



그림 3. 리버스엔지니어링_안티디버깅(TLS Callback).pptx