CodeEngn Write Up/Basic

CodeEngn Basic RCE L05 Write Up

서원근양학계정 2021. 9. 23. 19:57

문제:이 프로그램의 등록키는 무엇인가

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다.

ch.codeengn.com

 

문제를 Ollydbg로 열기 전에 실행시켜보겠습니다.

이름과 시리얼을 입력하는 칸이 있습니다. 

아무 문자열이나 넣고 "Register now !"버튼을 눌러보겠습니다.

 

역시나 실패메시지가 출력됩니다.

 

이제 Ollydbg로 열어보겠습니다.

Ollydbg로 열어보니까 이런 메시지가 뜹니다.

 

간단히 해석해보자면 코드가 압축 또는 암호화되어 결과가 정확하지 않을 수 있다는 뜻입니다.

이런 창이 뜬 이유는 이 프로그램이 패킹되어있기 때문입니다.

패킹에 대한 내용은 여기를 참고해주세요.

https://brainfreeee.tistory.com/33

 

패킹(Packing)에 대하여

패킹(Packing)이란? 패킹(Packing)은 실행압축이라는 뜻을 가지고 있습니다. 실행압축이란 말 그대로 압축을 푸는 과정 없이 바로 실행시킬 수 있는 압축방법입니다. 실행압축은 일반적인 압축인 Z

brainfreeee.tistory.com

 

일단 이 문제를 PEiD라는 프로그램으로 열어보도록 하겠습니다.

 

PEiD로 확인한 결과, UPX를 이용해서 패킹되어있다는 사실을 알아낼 수 있습니다.

이제 패킹을 풀어야 하는데 패킹을 푸는 방법에는 여러 가지가 있습니다.

그중에서 UPX 언패킹 도구를 이용해서 풀어보겠습니다.

일단 패킹을 풀 프로그램을 같은 폴더에 넣어줍니다.

그리고 Shift를 누른 상태에서 우클릭을 합니다.

 

여기서 명령 창 열기를 눌러줍니다.

명령 창이 뜨면 .\upx -d 언패킹 할 파일 이름.확장자 이렇게 해주시면...

 

패킹이 풀리게 됩니다.

 

언패킹 전과 후를 비교해보면 크기가 상당히 차이 납니다.

 

이제 Ollydbg로 분석해보겠습니다.

 

문자열 검색 기능을 이용해서 쉽게 핵심 부분을 찾을 수 있었습니다.

"No Name entered"와 "No Serial entered"같은 문자열을 통해서 이름과 시리얼이 0글자가 아니어야 한다는 사실을 알 수 있습니다.

"Registered User"라는 문자열이 보이는데 이 문자열이 이름이 되어야 할 것 같은 느낌이 듭니다.

자세히 알아보기 위해서 BP를 걸고 F9로 실행시켜보겠습니다.

 

 

EAX에 입력한 이름이 들어있는 주소를 넣어주는 것을 확인할 수 있습니다.

EDX에도 "Registered User"가 들어있는 주소를 넣어줍니다.

그리고 F7을 통해서 CALL함수의 내부로 들어가 줍니다.

 

EAX의 값과 EDX의 값을 각각 ESI와 EDI에 넣어준 다음 비교해서 같으면 점프를 합니다.

점프를 하지 않으면 실패메시지가 출력되는 곳으로 점프하게 됩니다.

이 부분에서 이름은 "Registered User"가 되어야 한다는 사실을 확실하게 알 수 있습니다.

프로그램을 다시 실행시키고 이름을 "Registered User"로 한 뒤

시리얼을 비교하는 부분에 BP를 걸고 실행시켜보았습니다.

 

 

EAX에 입력한 시리얼이 들어있는 주소를 넣어줍니다.

EDX에는 "754-GFX-IER-954"라는 문자열을 넣고 CALL명령어를 실행시킵니다.

F7을 이용해서 함수의 내부를 확인해보겠습니다.

 

입력한 시리얼과 "GFX-754-IER-954"를 비교해서 같으면 점프하고 

점프하지 않으면 실패메시지가 출력됩니다.

따라서 시리얼이 "GFX-754-IER-954"가 되어야 함을 확인할 수 있습니다.

 

Flag: GFX-754-IER-954

'CodeEngn Write Up > Basic' 카테고리의 다른 글

CodeEngn Basic RCE L07 Write Up  (0) 2021.09.30
CodeEngn Basic RCE L06 Write Up  (0) 2021.09.29
CodeEngn Basic RCE L04 Write Up  (0) 2021.09.16
CodeEngn Basic RCE L03 Write Up  (0) 2021.09.16
CodeEngn Basic RCE L02 Write Up  (0) 2021.09.16