본문 바로가기

2. Reversing (리버싱)/1) Write UP

[2020.06.02] CSAW 365 | CSAW Reversing 1

| Reversing1

 

CSAW Reversing1 문제를 풀어보도록 하겠다.

아마도 리버싱 기초문제가 Reversing N의 이름으로 출제되는 것 같다.

미리 말하지만 아주아주 쉽다.

 

프로그램을 실행시키면 다음의 Flag 팝업창이 뜨는데, 이상한 한글이 뜬다.

한글패치가 안돼서 그런건가 싶지만 이미 가상머신 설치 시에 다 완료했다.

 

Abort, Retry, Ignore 세 버튼을 다 눌렀을 때에도 아무런 반응이 없어서 우선 패킹여부를 확인한다.

 

 

| PEiD

PEiD로 확인해보니 패킹되어있지 않다.

 

올리디버거에서 프로그램을 열고 우선 F8로 탐색하고자 했다.

 

그런데 해당 부분을 지나고 난 후

 

Flag가 출력되었다...

그냥 속임수인가 했으나 해당 Flag를 입력하니

 

풀렸다...?

| OllyDbg

 

그래도 이렇게 넘길 수는 없으니 플래그가 출력되는 해당 부분의 함수를 살펴보도록 한다.

IsDebuggerPresent : 디버거의 존재 여부 확인

 

1) Debugger 존재 O : return이 1이므로 JNZ에서 점프 -> 2로 이동

2) Debugger 존재 X : return이 0으므로 JNZ에서 점프x -> 1로 이동

==> 우리는 올리디버거로 확인하고 있으므로 return이 1이다.

 

2개의 반복문을 돌면서 기존의 flag에 담긴 값을 원래 flag로 바꾼다.

 

이후에 정답 플래그가 출력된다.

 

이 문제는 단순히 디버거를 활용해 프로그램을 동작시키면 플래그가 출력되는 쉬운 문제인데

그 동작원리를 파악하는 것이 중요하다.