메모장 입니다2
Windows] TLS 콜백함수 - 실습 본문
<헤더의 바이너리 값을 수정해 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 |