본문 바로가기

리버싱/CodeEngn 문제풀이

CodeEngn basic 4번 문제 풀이

SMALL

CodeEngn basic 4번 문제

이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가?

 

우선 이 프로그램을 실행시켜보면

1초 정도 단위로 정상이라는 글자가 출력된다. 

그러면 올리디버거를 사용하여 실행하겠다.

실행을 시켜보니 정상이라는 문구 대신 디버깅 당함이라는 문자가 출력된다.

디버거 프로그램을 탐지한 후 조건에 맞게 출력 시키는 것 같다.

그러면 정상이라는 문구와 디버깅 당함이라는 문구를 찾아 봤지만 TEXT string에는 있지 않았다.

 

한줄한줄 실행시켜보니 0040100의 함수를 호출하면서 프로그램이 실행이 되는 것을 볼수있다.

0040100으로 이동하여 보겠다.

0040100으로 가보니 sleep , IsDebuggerPresent 라는 함수가 보인다.

sleep 1000ms 인걸 보니 1초 쉬는 것을 볼 수 있다.

IsDebuggerPresent 함수가 디버거를 탐지하는 함수인거같다.

IsDebuggerPresent라는 함수를 실행 시키니 EAX의 값이 1로 바뀌었다.

TEST EAX, EAX 라는 코드는 EAX의 값이 0인지를 판별하는 코드이다.

0이면 점프를 하고 0이 아니면 점프를 안한다.

그 후 00408190을 실행 시켜보니 디버깅 당함이라는 글자가 출력된다.

Arg1 = 00431024 이니 00431024로 가보겠다.

정상이라는 문자열과 디버깅?가 있는 것을 확인할수있다. 디버깅?은 깨진것같다.

즉, IsDebuggerPresent라는 함수를 통하여 EAX의 값이 1이면 디버깅 당하는 것으로 간주하고 디버깅당함이라는 문자열을 출력하고 EAX값이 0이면 정상이라는 문자를 출력하는 것같다.

 

답: IsDebuggerPresent

LIST