본문 바로가기

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

[2021.03.13] CodeEngn Basic L01-L04

Codeengn Basic 01~04번 문제 풀이

 

네이버 사다리게임 사이트를 활용하여 각 문제 담당자를 정한 후 풀이 발표 진행

 

 

1번문항 : 이지혜

여기서 EAX는 종료되는 상횡에서 return 값을 저장하는 용도이다.



 

 

2번문항 : 유민서

CodeEngn - Basic RCE L02 -  패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇 인지 분석하시오

02.exe 파일을 실행해보면 앱을 실행할 수 없다고 나오고, 올리디버거로 열어도 알 수 없다는 오류가 뜬다. PE구조를 분석하기 위해 PEView를 다운받아서 실행시켜보았더니 실행파일 구조 자체에 결함이 있어서 실행할 수 없다고 판단할 수 있었다. 오른쪽 화면을 내리다 보면 you did it! 뒤에 알 수 없는 문자열 JK3FJZh가 나오고, 이것이 패스워드라는 것을 알 수 있다.

 

 

 

3번문항 : 이현수

CodeEngn - Basic RCE L03 - 비주얼베이직에서 스트링 비교함수 이름은?

맨 처음에 이렇게 오류가 떠서 ‘MSVBVM50.DLL’ 관련 실행 파일을 다운로드 받아서 해결했다.

오류해결 - https://m.blog.daum.net/2vaupc/1555878

코드 값을 입력해 해결하는 문제인 것 같다. 임의로 1234를 입력해보았더니 ERROR 메시지가 떴다. x32 디버거를 열어 파일을 살펴본다.

디버거를 열어 먼저 함수 호출 목록을 살펴본다.

아마 입력한 코드와 답을 비교하는 문자열 비교 함수로 추측할 수 있는 ‘StrCmp’가 들어간 함수를 찾을 수 있었다.

해당 코드가 있는 주소로 이동해본다.

‘vbaStrCmp’ 함수 호출 전에 스택에 어떠한 값을 넣는 것을 확인할 수 있다.

스택에 값을 넣고 해당 값을 함수를 통해 입력 값과 비교하는 것 같다.

함수 호출 전의 주소에서 문제의 답인 것 같은 “2G83G35Hs2”라는 문자열을 PUSH 하는 것을 볼 수 있다. 

영어는 아닌 것 같은 알 수 없는 언어가 나와서 번역기를 돌려봤다.

the password is correct! 라는 것을 보니 답이 맞는 것 같다.

발견한 문자열 함수도 정답인지 코드엔진에서 확인해보았다.

 

 

4번문항 : 장지원

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

 

옆 창을 참고하여 IsDebuggerPresent 함수가 탐지기능이 있음을 유추할 수 있다.

자세히 알기 위해 레지스터 esi와 esp를 살펴보면, 비교함수인 cmp가 각 레지스터 값을 비교하여 ZF값을 내놓는데, 이때 1이 되면 디버깅 당함이라는 문구가 뜨는 것을 확인할 수 있다.

정답은 IsDebuggerPresent 함수

 

이후 다음 주차 문제 분량과 공부해 올 책 분량을 정했으며, 책 부분 발표자를 선정하였다.