워게임/CodeEngn

[CodeEngn] Basic RCE L06

name2965 2022. 5. 12. 21:46
728x90

 

 

 

문제 설명을 보면, 파일을 분석하기 전에 unpack을 해야할것으로 보입니다.

 

일단 exeinfope로 까보면

 

 

 

 

32비트 기반 실행파일이고, UPX로 packing 되어있다는것을 알수 있습니다. 

그러므로 upx라는 패킹툴을 이용해서 unpacking을 진행해야 합니다.

 

 

 

 

upx 언패킹은 툴을 이용해서 간단하게 할수 있습니다.

 

이제 다시 exeinfope를 통해서 까보면

 

 

 

 

이렇게 정상적으로 언패킹이 되어있는 모습을 확인할수 있습니다.

 

그리고 프로그램은 C++로 작성되었다는 것을 알수있습니다.

 

이제 IDA를 통해서 분석해보기 전에 프로그램을 실행시켜 보겠습니다.

 

 

 

 

프로그램을 실행시키면 다음과 같이 시리얼 번호를 입력할수있는 박스와 시리얼번호 체크를 시작하는 버튼이 있습니다.

 

여기에 임의의 값을 넣으면

 

 

 

 

다음과 같이 Wrong serial!! 이라는 문자열이 나옵니다.

그러므로 이 문자열이 있는 함수가 시리얼번호를 판별하는 함수라고 짐작할수 있습니다.

 

이제 IDA를 통해서 분석을 시작해야합니다.

 

 

 

 

우선 아까전에 메세지박스로 나온 문자열이 어디있는지 찾아봐야합니다.

 

문자열 검색을 해보면

 

 

 

이 위치에 문자열이 있다는것을 확인해볼수 있습니다. 이 위치로 따라가보면

 

 

 

 

다음과 같이 시리얼번호를 판별하는듯한 함수가 보입니다.

 

위에서부터 분석해보면

 

입력받은 문자열을 이 함수로 넘겨받아서 Str2라는 곳에 복사를 하고

 

Str1과 Str2 문자열을 _strcmp 함수에 push 시킵니다.

 

strcmp 함수는 두개의 문자열이 서로 같을경우 0을 반환하고, 서로 다를경우 대소관계에따라 반환값이 달라집니다.

 

그리고 test eax, eax 를 거치면서 만약 eax(strcmp함수의 반환값)이 0 이라면 Good Job!으로 시작하는 문자열이 출력되고, 0이 아니라면, 아까전에 봤었던 실패 메세지가 출력되는 구조로 파악됩니다.

 

그러므로 우리가 입력해야하는 값은, Str1에 있는 번호와 같아야 합니다. 

그러므로 Str1이 저장된곳을 확인해 보겠습니다.

 

 

 

 

Str1의 데이터를 확인해보면 'AD46DFS547' 라는 문자열이 있으므로

 

시리얼번호는 이 문자열이라는 것을 확인할수 있습니다

 

 

 

728x90

'워게임 > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L08  (0) 2022.05.19
[CodeEngn] Basic RCE L07  (0) 2022.05.12
[CodeEngn] Basic RCE L05  (0) 2022.05.08
[CodeEngn] Basic RCE L04  (0) 2022.05.04
[CodeEngn] Basic RCE L03  (0) 2022.05.04