워게임/CodeEngn

[CodeEngn] Basic RCE L14

name2965 2022. 7. 6. 20:06
728x90

 

 

 

 

이번 문제는 다음과 같습니다.

이름이 주어지고 시리얼값을 구하는 문제인데

설명에서 친절하게 5자리 숫자이고 브루트포싱을 해야한다고 가이드라인을 잡아주네요

 

 

우선 exeinfope로 열어보면

 

 

 

 

어셈블리어로 작성된듯한 32비트 실행파일입니다. 패킹은 따로 탐지되진 않네요

 

 

이제 프로그램을 실행시켜보면

 

 

다음과 같은 구조의 프로그램이 실행되고 여기에 CodeEngn을 이름으로 넣고 시리얼은 아무값이나 넣어보면

 

 

 

다음과 같은 메세지박스가 출력됩니다.

 

그럼 이것들을 기반으로 분석을 해보겠습니다.

 

 

 

 

먼저 메세지박스에 있는 문자열을 찾아보면 다음과 같이 쓰이는곳이 보입니다.

 

이 문자열이 쓰이는 함수로 진입해보면

 

 

 

 

조금 복잡해보이는 구조이지만 일단 분석을 진행해보겠습니다.

 

 

 

우선 코드는 다음과 같습니다.

 

앞에있는 코드들은 프로그램의 메세지박스를 구성하는 코드이므로 

본격적인 값을 받은뒤 시리얼키를 생성하는 로직부터 보면 됩니다.

 

 

 

먼저 이름칸과 시리얼칸에 아무값도 없을 경우 프로그램을 종료시키고

값이 있다면 그다음부터 그 값들을 이용해서 시리얼값을 생성합니다.

 

먼저 v5라는 변수에 이름을 통해서 이루어진 연산값을 이름의 길이인 8번만큼 연산한뒤 저장합니다.

 

그다음으로 연산이 끝나면 입력받은 5자리의 시리얼값을 sub_401383 함수에 인자로 넘겨서

그 반환값이 v5와 같아야만 합니다.

 

sub_401383 함수를 살펴보면

 

 

다음과 같은 연산구조를 가지고 있습니다.

 

이 문제에서 시리얼값을 알아낼수있는 방법은 브루트포싱이라고 알려줬습니다.

 

그런데 이 코드를 잘 분석해보면, 그저 매개변수인 문자열을 10진수인 정수로 변환하는

함수인것으로 확인됩니다.

 

그러므로 이 함수는 그다지 분석하기 어렵진않습니다.

그렇다면 CodeEngn이라는 문자열이 어떤 연산을 통해서 결과적으로 나오는값이 뭔지를 알아야 합니다.

 

그값이 바로 시리얼키일것이기 때문입니다.

 

 

 

이때 v5의 값은 CodeEngn을 통해서 연산된 값이고

함수의 반환값은 입력한 시리얼값이 문자열에서 정수로 변환된것일 뿐입니다.

 

그러므로 이때 v5(esi) 값을 확인해보면

 

 

129A1 라는 값이 나옵니다.

이 값을 10진수로 변환해보면

76193 이라는 5자리의 숫자가 나옵니다.

그러므로 한번 이 값을 시리얼키로 사용해보면

 

 

 

다음과 같이 올바른 시리얼값이란것을 확인할수 있습니다.

 

그러므로 이 문제의 정답은 76193 입니다.

 

 

728x90

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

[CodeEngn] Basic RCE L16  (0) 2022.07.08
[CodeEngn] Basic RCE L15  (0) 2022.07.06
[CodeEngn] Basic RCE L13  (0) 2022.07.06
[CodeEngn] Pro RCE L01  (0) 2022.07.04
[CodeEngn] Crypto Analysis L02  (0) 2022.07.04