2020. 1. 18. 14:26
Hack/리버싱
1. SEH (Structured Exception Handling)
- SEH는 Windows OS에서 지원하는 예외처리 방식으로 __try, __except, __finally 문법으로 이루어진다. 안티디버깅 용도로도 사용된다.
- __try 블록 내에서 예외가 발생하면 __except 문에 해당되는 예외 핸들러(Exception Handler)를 호출하여 예외를 처리한다.
- __except 블록 안에서 GetExceptionCode 함수를 이용해서 예외 종류를 확인하고 세 가지 선택(exception filter)을 할 수 있다. __except 문의 예외 핸들러 실행 (EXCEPTION_CONTINUE_EXECUTION), 예외의 원인을 해결하고 예외 발생한 곳에서 이어서 실행, 다음 예외 핸들러 찾기 (EXCEPTION _CONTINUE_SEARCH)
- __try 영역 밖을 벗어나게 되면 __finally 영역 내의 코드(Termination Handler)를 실행한다. 스레드 강제 종료, 프로세스 종료를 제외한 모든 제어문(return, break 등)을 통해 영역 밖을 나갈 때도 실행된다.
2. VEH (Vectored Exception Handler)
- VEH는 SEH를 응용프로그램 범위로 확장한 것으로 프로그램에서 예외가 발생하면 제일 먼저 호출된다. AddVectoredExceptionHandler라는 함수로 추가 할 수 있다.
3. VCH (Vectored Continue Handler)
- VCH는 VEH와 SEH에서 EXCEPTION_CONTINUE_EXECUTE가 반환되었을 때 호출 된다.
4. UEH (Unhandled Exception Handler)
- UEH는 모든 예외 핸들러에서 처리되지 못한 예외를 처리하는 곳이다.
5. Unwind
- Local Unwind는 try-finally 구문에서 try 블록 내부에 return, goto 등의 제어문이 있을 때 발생한다. finally 블록을 실행 후 이동을 해야 하기 때문에 임시 변수를 생성해서 상태를 저장하는 것이다.
- Global Unwind는 예외 핸들러의 exception filter가 EXCEPTION_EXECUTE_HANDLER인 경우 발생하는데, try 블록 내부에서 예외가 발생하면 finally보다 except를 먼저 찾아 처리하기 때문에 예외를 처리하기 전에 제일 안에 있는 finally부터 처리해 except 블록까지 내려오는 행위다.
'Hack > 리버싱' 카테고리의 다른 글
Codegate2020 Preliminary: Verifier (0) | 2020.02.22 |
---|---|
Codegate2020 Preliminary: Halffeed (0) | 2020.02.22 |
[CSAW 2017] tablez (0) | 2017.09.20 |
[Codegate 2016] compress (0) | 2017.05.20 |
[CodeEngn] Challenges : Basic 01 (0) | 2016.12.20 |