본문 바로가기
Programming/Hacking & Security

[Reversing] SEH by 용호

by ★용호★ 2010. 5. 31.

2010년 5월 18일 금요일

컴파일



아래의 프로그램은 Microsoft의 Windbg 이다. 
SEH는 다음 에러 핸들러의 위치를 가진 Next 포인터와 핸들러를 가진 linked list이다. Dg는 GDT를 참조하는 명령어




아래의 exception registration record 구조체에 Next와 Handler가 존재하는 것을 볼 수 있다.



 

Dg fs 하면 fs 정보가 나오는데 fs:[0] 찾기 위해

Base 주소를 참조한다.




주소를 대입해서 따라 들어가보면 Next와 Handler가 위치한 주소값을 확인할 수 있다.



다음 코드를 수행하면



SEC가 추가된 것을 확인할 수 있다.



다음 div 부분에서 0으로 나눴기 때문에 예외가 발생할 것이다



아래에 Integer divide-by-zero 가 발생한 것을 볼 수 있다.



핸들러를 찾아가서 bp를 걸고 확인 해 보자



Dt_context 명령을 이용해서 레지스트의 값을 확인해보면 현재 ecx값이 0이다.



코드를 한줄 더 수행한 후 확인해 보면 ecx 값이 1로 변경 된 것을 확인 할 수 있다.
새로 추가된 seh 가 수행되어 ecx 값을 변경 시킨 것이다.




▶ 코드 파일






댓글