문제 : 이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가
1. 프로그램 구조
Detect It Easy(이하 DIE)로 파일을 열어보니 C/C++로 제작된것인것 같고 콘솔 애플리케이션 형태인것 같다.
일단 여기선 크게 중요하지 않으니 넘어가자.
2. 프로그램 동작
파일을 실행하면 약 1초간격으로 현재 상태에 따라 콘솔에 글이 적힌다. 보아하니 "정상"이라는 말은 디버거로 분석중이지 않다는 의미인것 같다. 이제 디버거로 열어 분석해보자.
3. 분석
이렇게 풀어도 되는지는 모르겠지만 여기서 문제를 잘 살펴보면 디버거를 탐지하는 함수의 이름을 구하라고 하였다.
즉 올리디버거의 기능중 하나인 API검색기능으로 함수를 찾을수도 있다는 의미이다.
그렇다면 코드 화면에서 [오른쪽 마우스 클릭] -> [Search For] -> [Intermodular calls] 를 클릭하여 열자
들어가서 보면 무언가 상당히 많은데 여기서 찾으려는 함수의 기능은 디버거가 실행중인지 알아내는것이므로 대충 함수 이름이 디버거와 관련되었을것같다고 생각해볼수 있다. 그렇다면 저기 노란색으로 칠한 부분의 함수가 상당히 의심스럽다. 확인차 더블클릭하여 코드 화면으로 가보자.
그러면 뭔진 모르겠지만 Time = 1000 ms라는게 꼭 프로그램에 "정상"이라는 글자가 띄워지는 속도와 비슷한것 같다.
(1000ms = 1초) 그렇다면 일단 IsDebuggerPresent가 시작되는 부분에 브레이크 포인트를 F2를 눌러 찍어놓은후 F9를 눌러 실행한후 F8로 계속 한단계씩 실행해보자.
계속 실행하다보면 이 부분을 실행할때 갑자기 아래와 같은 화면이 뜨게 된다.
즉 프로그램의 흐름상 문제가 요구하는 디버거를 탐지하는 함수의 이름은 IsDebuggerPresent라고 할수 있겠다.
'리버싱 > 리버싱 문제 코드엔진' 카테고리의 다른 글
코드엔진 Basic RCE L06 (0) | 2021.07.13 |
---|---|
코드엔진 Basic RCE L05 (0) | 2021.05.25 |
코드엔진 Basic RCE L03 (0) | 2021.05.18 |
코드엔진 Basic RCE L02 (0) | 2021.05.18 |
코드엔진 Basic RCE L01 (0) | 2021.05.13 |