안녕하세요. 오늘은 Advance RCE level 3을 풀어보겠습니다. 홈페이지로 들어가 파일을 받아주세요

실행시켜 봅시다.

아무값이나 넣고 체크를 하면 문자열이 뜹니다. 올리디버그로 열어봅시다.

코드를 몇줄 보다 보면 유니코드문자열을 비교하는 lstrcmp함수를 찾을 수 있습니다. 브레이크를 걸고 실행해봅시다.

이름을 CodeEngn, 시리얼을 123을 주고 실행했을 때 123과 3265754874랑 비교하는 것을 볼 수 있습니다.

넣어보니 성공문자열이 출력되었습니다. 3265754874이 정답입니다.

네 이것으로 문제풀이를 마치겠습니다.

'codeengn' 카테고리의 다른 글

codeengn - Advance RCE level 5  (0) 2016.08.07
codeengn - Advance RCE level 4  (0) 2016.08.07
codeengn - Advance RCE level 2  (0) 2016.08.03
codeengn - Advance RCE level 1  (0) 2016.08.03
codeengn - basic rce level 6  (0) 2016.08.02
Posted by englishmath
,

안녕하세요. 오늘은 Advance RCE level 2를 풀어보겠습니다. 홈페이지로 들어가 파일을 받아주세요

정답을 찾으라는 군요. 파일을 실행해봅시다.

패스워드입력창이 떴습니다. 아무거나 입력하고 엔터를 누르니 프로그램이 종료되는군요. 일단 PE로 분석을 해봅시다.

패킹은 안되어있으며 C++로 만들어졌다고 합니다. 올리디버그로 열어봅시다. 열었으면 우리가 아까 파일을 실행했을 때 본 문구열을 찾아봅시다. 오른쪽마우스 - Search for - All referenced text strings을 눌러주세요.

문자열을 찾아봅시다.

실행했을 때 본 문자열이 나와있습니다. 해당 주소로 진입해봅시다.

진입한 후 한줄씩 실행해보니 Enter Password: 를 출력하고 004012D2에서 사용자의 입력값을 받는 것을 알 수 있습니다. 계속 코드를 실행해 봅시다.

하나의 루프를 거치고 004013C5에서 CALL EDX를 호출하여 프로그램을 종료하고 있있음을 알아냈습니다. F7키를 이용하여 진입해봅시다.

코드를 한줄 씩 실행하다보면 CMP를 이용해 ECX와 특정 값들을 비교하고 있음을 알 수 있습니다. CMP부문으로 간 뒤 ECX값을 확인해봅시다.

EAX는 우리가 입력한 시리얼값이고 ECX는 41이군요. 이 41과 43을 비교한다고 나와있습니다. 비교해서 ZF가 0이면 JNZ에 의해 18FF8A로 점프하게 되고 18FF8A로 가면

사진에 나와있듯이 ECX를 호출하게 되고 프로그램이 종료되어 버립니다. 계속 분석해봅시다.

코드를 밑으로 내려보면 위와 같은 코드가 보입니다.

57 45 4C 4C 20 44 4F 4E 45 21을 차례대로 넣는 군요.  아스키코드로 확인해봅시다.

W E L L 스페이스바 D O N E ! 이네요. WELL DONE!

아무래도 성공문자열인것 같습니다. 그렇다면 이 코드를 실행할 수 있도록 해줄 필요가 있습니다. 일단 코드를 처음부터 다시 봅시다.

밑 부분의 코드를 보시면 JE SHORT 0018F839가 나옵니다. 이 0018F839는 어디일까요?

성공문자열을 만드는 부분입니다. 즉 우리는 JE SHORT 0018F839에서 점프를 해야 합니다. 앞의 비교문은 TEST인데 일단 잠시 미뤄두고 앞의 CMP들부터 해결해봅시다.

첫번째 CMP는 ECX와 43을 비교합니다. 그런데 여기서 ECX의 값은 41입니다. 41을 아스키값으로 바꾸면 A입니다. 즉 우리가 입력한 A12의 첫번째 값이지요. 즉 우리가 입력한 패스워드의 첫번째 글자와 43을 비교하는 것입니다. 확인을 위해 ECX를 43으로 수정하고 실행해봅시다.

두번째 CMP에 걸렸을 때의 ECX값입니다. ECX와 52를 비교하는 곳이지요. 여기서 ECX는 31. 아스키 값으로 1입니다. 그렇다면 우리가 입력한 값을 처음부터 끝까지 비교하는 것을 알 수 있습니다. CMP로 비교하는 구문은 총 10개. 각각의 값은

43 52 41 41 41 43 4B 45 44 21입니다. 아스키값으로 바꾸면

CRAAACKED!입니다. 즉 입력한 값과 CRAAACKED!를 비교하는 것이군요. 패스워드에 한번 CRAAACKED!를 입력해봅시다.

WELL DONE!이란 창이 뜨는 것을 볼 수 있습니다. 패스워드는 CRAAACKED!이네요.

인증해봅시다.

네 이것으로 문제풀이를 마치겠습니다.

 

 

 

 

 

 

 

'codeengn' 카테고리의 다른 글

codeengn - Advance RCE level 4  (0) 2016.08.07
codeengn - Advance RCE level 3  (0) 2016.08.07
codeengn - Advance RCE level 1  (0) 2016.08.03
codeengn - basic rce level 6  (0) 2016.08.02
codeengn - basic rce level 5  (0) 2016.08.02
Posted by englishmath
,

안녕하세요. 오늘은 Advance RCE level1을 풀어보겠습니다. 홈페이지로 들어가 파일을 받아주세요.

어디서 많이 본 문제입니다. 파일을 PEID로 열어 봅시다.

예상대로 Autoit으로 만들어져있습니다. Exe2Aut 디컴파일러로 열어봅시다.

창이 뜨고 닫히는 시간이 13.179초입니다. 단위를 밀리세컨드로 바꾸면

13179ms입니다. 문제에서는 이 값을 MD5로 변환해서 인증하라고 했으니 MD5변환해서 인증해봅시다.

인증해봅시다.

사실 문제풀이라곤 해도 그냥 프로그램 돌려서 간단하게 풀었네요. 네 이것으로 문제풀이를 마치겠습니다.

'codeengn' 카테고리의 다른 글

codeengn - Advance RCE level 3  (0) 2016.08.07
codeengn - Advance RCE level 2  (0) 2016.08.03
codeengn - basic rce level 6  (0) 2016.08.02
codeengn - basic rce level 5  (0) 2016.08.02
codeengn - basic rce level 20  (0) 2015.10.02
Posted by englishmath
,