리버싱(Reversing)

[문제 풀이] CodeEngn Basic RCE L04

1학년 2023. 3. 29. 13:58

먼저 디버거를 사용하지 않고 바로 실행했을 때는 

"정상"이라는 문구를 띄우는 창이 나온다.

디버거를 사용한 경우

"디버깅 당함"이라는 문구를 띄우는 창이 나온다. 

 

x32dbg를 이용해 열고 F9으로 EP를 확인한 다음 

F8로 한단계씩 실행해보면서 출력화면에 변화가 생기는 지점을 확인한다. 

breakpoint를 걸고 다시 실행해보자.

저부분에서 함수의 내부로 들어가보니 

디버깅 당함과 정상이라는 문구가 있는 것을 확인할 수 있다.

저 문구가 있기전 이름에서부터 뭔가 디버깅을 감지할 것 같은 것이 보인다.

확인해보면IsDebuggerPresent를 콜하기전에는 eax의 값이 0인데

IsDebuggerPresent를 지나고 나면 1로 바뀐 것을 확인 할 수 있다.

디버깅을 하고 있는 중이기 때문에 

je를 만나기전 test eax , eax에서 갈리게 되는데 eax가 1이기 때문에 ZF 1로 설정되어 점프되지않고 

디버깅 당함 문구가 나오게 된다.

그러므로 디버거를 탐지하는 함수는 IsDebuggerPresent라는 것을 알 수 있다.