메모장 입니다2

Windows] TLS 콜백함수 - 실습 본문

Study/리버싱

Windows] TLS 콜백함수 - 실습

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

<헤더의 바이너리 값을 수정해 TLS 콜백함수 삽입하기> 




0. TLS를 삽입할 위치 구하기


 PE파일에 새로운 코드, 데이터를 추가할 때 적당한 방법은 다음 세 가지.


 1) 섹션 끝의 빈 영역.

 2) 마지막 섹션의 크기를 확장.

 3) 마지막에 새로운 섹션을 추가.


 이번 실습에선 2번의 방법을 사용.


 -> 마지막 섹션은 (.rsrc)



1. 공간 할당


 1) 마지막 섹션(.rsrc)의 크기를 200 Byte 추가.


 2) 섹션 값(size +200)이 변경되었으므로, 섹션 헤더값도 업데이트.




2. TLS 테이블 추가.


1) tls 구조체 위치 지정.

TLS Table RVA 0000 -> C200  // offset 9200 = RVA C200

             Size 0000 -> 18   



3. TLS 구조체 세팅(IMAGE_TLS_DIRECTORY).


① IMAGE_TLS_DIRECTORY

② AddressOfCallbacks

③ TLS Callback Function: TLS 함수 주소 배열(②가 가리킴)

④ Array TLS Callback Function

  : 실제 함수 코드(③이 가리킴)

  C2 0C 00 -> RETN 0C , 아무것도 하지않고 반환하는 코드.


 잘 따라왔다면 파일이 정상 실행되겠지만,

아직 TLS 함수에 안티디버깅 코드를 넣지 않았으므로 이전과 실행결과가 같음.




4. TLS 함수에 안티디버깅 코드 삽입.


 예제파일을 디버거로 연 뒤, 40C230(offset:9230) 에 다음 코드 삽입.

코드 설명)

1> reason([esp+8])이 1이냐?  // 1=main함수 실행 전

2> 아니면 TLS를 실행시키지 않고 종료

3,4> PEB.BeingDebugged멤버 값([EAX+2])이 0이 아니냐?  // 0이 아니면 디버깅 중

5> 0이면 디버깅이 아닌 일반 실행이므로 TLS를 건너뛰고 종료.



수정한 영역 선택 후, 


'Copy to executable - Selection - Save file'


로 저장




5. 확인 


 1) 일반 실행


2) 디버깅



'Study > 리버싱' 카테고리의 다른 글

Windows] PEB  (0) 2017.08.08
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