리버싱의 바실리카(Basilica)

sharku.egloos.com



(II-c) The Heap (힙) by sharku

힙을 단순하게 정리하는 것과 같은 문제는 플래그들이 활성화 되었을 때 초기의 힙이 초기화 되어진다는 것이 문제입니다. 그리고 감지가 가능한 몇 개의 아티팩트들을 남기게 된다. (특별하게, 힙의 끝에서 definite 값과 possible 값이 됩니다.)

HEAP_TAIL_CHECKING_ENABLED 플래그는 항상 할당된 블록의 끝에서 연속된 값 “0xABABABAB“을 두 번 표시하게 합니다.

HEAP_FREE_CHECKING_ENABLED 플래그는 slack 공간에서 다음 블록 까지 채우기 위해 추가적인 바이트가 필요하다면 연속된 값 “0xFEEEFEEE”(또는 일부)을 표시 합니다.

 

예제 코드는 다음과 같습니다.

mov eax, <heap ptr>

;get unused_bytes

movzx ecx, b [eax-2]

movzx edx, w [eax-8] ;size

sub eax, ecx

lea edi, [edx*8+eax]

mov al, 0abh

mov cl, 8

repe scasb

je being_debugged

 

이 값은 Themida에 의해 확인되었습니다.

-------------------------------------

말이 너무 어려워서 이해가 잘 안가네요, 실행해보면서 수정하도록 하겠습니다^^


트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://sharku.egloos.com/tb/340341 [도움말]

덧글

댓글 입력 영역