CodeEngn Write Up/Basic

CodeEngn Basic RCE L06 Write Up

서원근양학계정 2021. 9. 29. 23:52

문제:Unpack을 한 후 Serial을 찾으시오.
정답인증은 OEP + Serial
Ex) 00400000PASSWORD

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com

 

일단 이 프로그램을 실행시켜보겠습니다.

간단하게 시리얼을 입력하는 창이 뜹니다.

 

여기에 아무 문자열이나 넣고 Check Serial버튼을 누르면...

당연하게도 ERROR가 출력됩니다.

 

이제 Ollydbg로 열기 전에 PEiD로 열어보도록 하겠습니다.

UPX로 패킹되어있는 것을 확인할 수 있습니다.

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

https://brainfreeee.tistory.com/33

 

패킹(Packing)에 대하여

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

brainfreeee.tistory.com

 

 

패킹이 되어있는 것을 확인했으니 언패킹 도구를 이용해서 언패킹 해보겠습니다.

 

이제 Ollydbg를 이용해서 분석해보겠습니다.

일단 문제에서 요구하는 것이 두 개가 있는데 OEP와 시리얼입니다.

OEP는 간단하게 설명하면 패킹된 프로그램에서의 진짜 시작 주소를 의미합니다.

나중에 자세히 다루도록 하겠습니다.

우리는 이미 언패킹을 완료했으니 시작 지점의 주소가 OEP가 됩니다.

 

OEP는 00401360이 됩니다. 

OEP는 찾았으니 이제 시리얼을 찾아보겠습니다.

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

 

코드를 분석해보면 GetDlgItemTextA함수를 이용해서 입력한 문자열을 받아옵니다.

그리고 00401073에 있는 CALL함수를 거친 뒤 TEST EAX, EAX를 통해서 EAX의 값을 확인하고 분기합니다.

TEST명령어는 AND연산을 실행하는 명령어로 주로 똑같은 피연산자를 비교해서 값이 0인지 확인하는 용도로 쓰입니다.

이제 저 CALL이 중요하다는 사실을 깨닫게 되었으니 F7로 내부를 확인해보겠습니다.

 

"AD46DFS547"이라는 값과 입력한 시리얼을 비교합니다.

따라서 "AD46DFS547"이 시리얼이라는 사실을 알 수 있습니다.

 

답:00401360AD46DFS547

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

CodeEngn Basic RCE L08 Write Up  (1) 2021.10.05
CodeEngn Basic RCE L07 Write Up  (0) 2021.09.30
CodeEngn Basic RCE L05 Write Up  (0) 2021.09.23
CodeEngn Basic RCE L04 Write Up  (0) 2021.09.16
CodeEngn Basic RCE L03 Write Up  (0) 2021.09.16