본문 바로가기

My Study/Reversing

PAGE_GUARD를 사용한 안티디버깅 기법

저번에 예외처리 기법을 사용해 안티디버깅 기술을 구현한 적이 있습니다. 그 때 했던 원리를 그대로 떠올려보면
디버깅 중에 예외가 발생하면 해당 예외를 디버거 자체적으로 처리를 하게 되면서 개발자가 만들어 놓은 예외처리 루틴으로 들어가지 않게 됩니다. 그 때는 INT 3인 소프트웨어 브레이크 포인트를 사용해서 예외를 발생시켰지만 이번에는 PAGE_GUARD옵션을 사용해 예외를 발생시켜보도록 하겠습니다.

메모리 페이지를 할당해서 보안 옵션을 PAGE_GUARD로 되어있는 메모리 영역에 디버거 중 접근하게 되면 예외가 발생하게 됩니다. 코드를 보시겠습니다.

자세한 설명은 주석으로 달아놨습니다. Proc()함수를 호출하게 되면 PAGE_GUARD되어 있는 메모리 영역에 접근하게 되며
예외가 발생합니다. 그 때 계속해서 트레이스 해서 넘어가게 되면 개발자가 만들어 놓은 예외처리 루틴으로 가지 않고
건너뛰게 될 것입니다. 디버거에서 실행 중이기 때문이죠.

올디에서 실행 결과 입니다.

이와 같은 안티디버깅 기법이 적용 되어 있을 때 우회하는 방법은 StrongOD 플러그인을 사용하면 간단히 우회할 수 있습니다.

위 옵션을 설정해 주고 실행시켜주면 정상실행이라는 결과가 나오게 될 것입니다.