블로그 이미지
Nehoy
경기대학교 / kknock

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

Tag

2020. 1. 18. 14:26 Hack/리버싱

1. SEH (Structured Exception Handling)

  • SEHWindows 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)

  • VEHSEH를 응용프로그램 범위로 확장한 것으로 프로그램에서 예외가 발생하면 제일 먼저 호출된다. AddVectoredExceptionHandler라는 함수로 추가 할 수 있다.

3. VCH (Vectored Continue Handler)

  •  VCHVEHSEH에서 EXCEPTION_CONTINUE_EXECUTE가 반환되었을 때 호출 된다.

4. UEH (Unhandled Exception Handler)

  • UEH는 모든 예외 핸들러에서 처리되지 못한 예외를 처리하는 곳이다.

5. Unwind

  • Local Unwindtry-finally 구문에서 try 블록 내부에 return, goto 등의 제어문이 있을 때 발생한다. finally 블록을 실행 후 이동을 해야 하기 때문에 임시 변수를 생성해서 상태를 저장하는 것이다.
  • Global Unwind는 예외 핸들러의 exception filterEXCEPTION_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
posted by Nehoy