woonadz :)

[CodeEngn Basic] RCE L04 문제 풀이_nabi 본문

IT/codeengn 문제 풀이

[CodeEngn Basic] RCE L04 문제 풀이_nabi

C_scorch 2021. 10. 2. 23:11
반응형

기록용

3줄 TMI

오늘 해킹 동아리에서 중간 세미나를 진행했다. 우리 리버싱팀 외에도 웹, 포너블, CTF, 취약점 분석, 악성코드 분석, 안드로이드 앱 모의 해킹 이렇게 현재 진행 정도와 개념에 대해 들었다. 요새 모의 해킹, 취약점 분석 등에 관심이 많던 중 세미나를 들으니 더 설레였다. 사실 다른 팀들 개념은 내 머리가 안따라줘서 이해는 잘 못했는데 빨리 방학 때 다른 해킹 분야도 공부해보고 싶다는 생각이 들었다.


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

 

올리디버거에서 분석하기 전 프로그램을 먼저 실행시켜보겠다.

현재 디버거를 키지 않은 상태이므로 정상이라는 단어가 출력된다는 것을 알 수 있다. 이 단어를 출력시키는 함수가 디버거를 탐지하는 함수라는 것도 확인 할 수 있다.

 

이제 올리디버거를 이용해 분석해보겠다.

올리디버거에 04번 파일을 올림

코드만 봐서는 잘 모르겠으니 F8키를 이용해 한줄씩 실행을 시켜 보겠다.

 

디버깅 당함이라는 문자열을 출력하는 주소를 찾아냄

현재 408454 주소를 실행시키고 있는 상태이다. 올리디버거가 켜져 있으므로 계속해서 ‘디버깅 담함’ 이라는 문자열이 출력된다. F7키를 이용하여 이 주소 안 함수로 들어가보겠다.

 

서브루틴 함수로 들어감

서브루틴 함수로 들어간 상태이다. 이 함수도 한줄씩 실행시켜보겠다.

 

isdebuggerpresent 함수 발견

한줄씩 실행시키다 보면 sleep이라는 글자가 보일 것이다. sleep 문자열이 있는 주소를 실행시킬 경우 1초 뒤에 실행이 끝나게 된다. 이 줄은 "디버깅 당함" 또는 "정상" 문자열을 출력할 때 1초 정도의 텀을 두고 출력하라는 것을 의미한다. sleep함수에서 조금 더 내려오면 isdebuggerpresent 라는 함수가 보인다. 이 주소를 실행시켜 보겠다.

 

IsDebuggerPresent 함수 실행 후

이 줄을 실행시키자 EAX 레지스터값이 1로 바뀐다. 이 함수가 디버거 탐지 함수로 추측된다. 계속 한줄씩 실행시켜 보겠다.

 

00401074 주소 실행

00401074 주소를 실행시키자 디버깅 당함이라는 문자열이 출력된다. 아마 이 CALL 명령어가 부른 주소에는 디버깅 당함에 관한 함수들이 있을 것으로 추측된다. 계속 실행시켜 보겠다.

 

0040107C 주소의 JMP(jump) 명령어로 인해 아래 주소들을 뛰어넘어 0040108B 주소로 넘어온다. 이제 이 주소를 실행시켜보겠다.

 

이 주소를 실행시키면 00401048 주소로 돌아온다. 00401048 주소로 돌아온다는 것은 이 서브루틴함수가 반복문을 실행하고 있다는 것을 의미한다. IsDebuggerPresent 함수가 디버거를 탐지하는 함수인지 확인할 차례이다.

 

EAX 레지스터 값을 바꾸기 전의 화면
EAX 레지스터 값을 바꾼 후의 화면

IsDebuggerPresent 함수가 포함된 주소를 실행하면 EAX 값이 1로 바뀌었다. 여기서 이 함수안에는 디버거의 실행여부를 판단하고 그 결과에 따라 EAX 레지스터0 또는 1을 집어넣는 명령어들이 있겠구나 라고 추측할 수 있다. EAX 레지스터 값을 0으로 바꾸고 실행시켜보겠다.

 

00401083 주소 실행 후

아까는 뛰어넘었던 00401083 주소의 함수를 실행한다. 이 함수는 "정상"이라는 문자열을 출력하는 역할을 한다. , IsDebuggerPresent 함수는 디버거 실행 여부를 판단하여 그 결과를 EAX 레지스터에 집어넣는 역할을 한다는 것을 확인했다.

 

따라서 답은 IsDebuggerPresent이다.

 

 

 

 

 

끝인사 및 느낀점

오늘 굉장히 신기한(?) 걸 알았다. 사실 그렇게 놀랄만한 일은 아니긴 한데 나한테는 너무 너무 반가운 우연이었다. 요즘 해킹에 정말 정말 많은 관심이 생겨 잠시 쉴때면 관련 영상을 찾아보곤 했다. 얼마전부터 내 유튜브 알고리즘에 티오리 라는 스타트업의 영상이 뜨기 시작했다. 리버싱을 공부하며 생긴 걱정들과 앞으로는 어떤 공부를 해야할지, 무엇부터 시작해야할 지 등 나의 의문점에 도움을 줄 만한 영상들이 많아 시청하기 시작했다. 그 영상 중에 이태양 연구원님이 자주 등장하셨는데 처음에는 '그냥 해커분이시구나' 하고 넘겼다. 근데 성함을 들으면 들을 수록 어디서 들어본 듯한 느낌이었다. 그때 아차하고 내가 들은 특강 목록을 찾아보았는데 그곳에 이태양 해커님 이름이 있었다. 내가 해킹을 시작한 동기를 만들어준 특강을 해주셨던 분이 이태양 해커님이다. 그 특강을 들으며 사실 뜻을 모르는 단어들이 있었어서(리버싱이란 단어 조차 모를 때) 정말 흘러가듯이 들었었다. 그럼에도 나에게 많은 생각과 진로 방향에 대한 의문점을 남길 수 있는 강의였다. 남들이 듣기에는 정말 별거 아니지만 1학기 때 진로에 대한 걱정으로 방황(?)을 하다가 길을 만들 수 있게 해준 계기가 된 특강이었다. 그냥 너무 신기해서 적어보았다.

반응형