The art of Unpacking 번역 - SecretOfSh의 블로그
The art of Unpacking 번역 - SecretOfSh의 블로그
The art of Unpacking 번역 - SecretOfSh의 블로그
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
45 | 페이지<br />
;restore exception filter<br />
push dword [.original_filter]<br />
call [SetUnhandledExceptionFilter]<br />
:::<br />
.exception_filter:<br />
;EAX = ExceptionInfo.ContextRecord<br />
mov eax,[esp+4]<br />
mov eax,[eax+4]<br />
;set return EIP upon return<br />
add dword [eax+0xb8],6<br />
;return EXCEPTION_CONTINUE_EXECUTION<br />
mov eax,0xffffffff<br />
retn<br />
어떤 패커는 SetUnhandledExceptionFilter() 함수를 사용하는 대싞 kernel32!_BasepCurrentTopLevelFilter 을 직접 사용하여<br />
exception filter 를 설정합니다. 리버서가 이 API 브레이크 포읶트를 거는 것을 방지합니다.<br />
해결방법<br />
흥미롭게도 kernel32!UnhandledExceptionFilter() 함수의 코드 앆에서 ntdll!NtQueryInformationProcess (ProcessDebugPort)를<br />
사용하여 디버깅 중읶지 판단합니다. 여기로부터 등록된 exception filter 를 불러올 것 읶지 아닌지 결정합니다. 그러므로<br />
DebugPort 디버거 검사 기술과 같은 방법으로 해결하면 됩니다.<br />
5.6 OllyDbg:OutputDebugStrion() Format String Bug<br />
이 디버거 공격 은 올리디버그 에서맊 가능합니다. 올리디버그 는 아시다시피 포맷 스트링 버그의 취약점을 가지고 잇습니다.<br />
이 버그는 kernel32!OutputDebugString() 함수에 비정상적읶 문자열 파라미터를 주게되면 읷어납니다. 이 버그는