본문 바로가기

취약점 분석/windbg

Windbg LFH 동작시킨 상태로 디버깅하는 방법

반응형



Win7부터는 Low Fragment Heap이 default Frontend heap으로 설정되어 LFH 힙을 고려해야할 때가 자주 있습니다.


디버거에 기본적으로 Heap 관련 GFlags 들이 동작하기 때문에, 디버거 상에서 Open Executable로 파일을 열면 LFH가 동작하지 않습니다.

이러한 GFlags들이 꺼진 상태여야 LFH가 enable 됩니다.


 !heap

: 해당 명령어로 맨 첫번째에 있는 base heap 주소를 얻고,


 dt _heap [힙베이스주소]

ex) dt _heap 550000

: 힙 정보 값 조회.


[LFH 미동작]


[LFH 동작]



가장 쉬운 방법은 프로그램을 실행시킨 후 Attach 하는 방식으로 디버깅을 진행하면 LFH가 enable 된 상태에서 디버깅이 가능합니다.



두번째로는 Windbg를 실행시킬 때 옵션 값으로 -hd 를 주면 됩니다. (저는 이 방법은 잘 안되더군요 -_-;)



세번째로는 환경변수 값을 NO_DEBUG_HEAP=1로 설정한 후, 재시작하여 디버깅을 진행하면 되겠습니다.

 NtGlobalFlags를 0으로 설정하는 방법도 있는데 그리 추천되는 방법이 아닙니다.



LFH가 동작하지 않는 이유에 대해서는 아래 URL에서 더욱 자세하게 언급하고 있으니 참고하시면 되겠습니다.

URL : https://support.microsoft.com/en-ie/help/929136/why-the-low-fragmentation-heap-lfh-mechanism-may-be-disabled-on-some-c



평소에 Attach 방식으로 편하게 하다가, 이후 업데이트에 themida 2.4.6.0 패킹으로 Anti-Attach 기법이 걸렸습니다.

어차피 언패킹 과정을 거쳐야하고, Full Unpack으로 DLL을 뽑자니 난독화된 IAT를 복구하고 .reloc 등을 추가하는 과정이 번거로워서..

디버거 상에서 수동으로 언패킹을 진행하고 거기서 바로 분석을 진행하고자 위와 같은 방법을 사용하였습니다.

반응형

'취약점 분석 > windbg' 카테고리의 다른 글

(임계영역) CriticalSection API 함수 정리  (0) 2019.02.23
windbg 포인터 참조하기  (0) 2018.09.06
Trace 명령어  (0) 2018.09.03
힙 디버깅  (0) 2018.05.09
windbg symbol path 설정  (0) 2018.02.06