본문 바로가기

Reversing/CodeEngn

[CodeEngn] Basic RCE L17풀이

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com


그림 1

KEY 값이

BEDA-2F56-BC4F4368-8A71-870B

일 때의 NAME을 구해서 MD5 해시값으로 변환하는 게 문제이다.

 

일단 EXEINFO를 확인해주었다.

 

그림 2

패킹은 되어있지 않다.

 

그리고 문제 파일을 실행시키고 key값에 “BEDA-2F56-BC4F4368-8A71-870B”을 입력해주었는데

 

그림 3

문자를 더 입력해달라고 한다,,,

 

여튼 x32 디버거를 통해 열고 문자열 찾기를 확인하였다.

 

그림 4

근데 문자열에 찾을 수 있는 문구가 없어서 뭐지,,? 하다가 맨 아래에 있는 keygenme 어쩌구가 위의 실행파일 문구랑 같길래 해당 부분으로 이동해주었다.

 

그림 5

Keygenme 어쩌구가 나온 다음에 함수가 출력되는 것을 알 수 있었고, 해당 부분에서 실행파일과 같은 문자열들을 볼 수 있을 것이라고 생각해서 이동해주었다.

그러고 나서 다시 문자열 찾기를 해주었다.

 

그림 6

!! 아래로 쭉 내리다 보니 진짜 있었다!!

해당 부분으로 이동해주었다.

 

흐름을 파악하기 위해 그래프 모드로 확인해보았다.

 

그림 7

확인해보니 맨 위의 노드에서 name input값을 3과 비교해서 3보다 크거나 같으면 점프한다고 한다.

 

다시 이어서 확인해보니, 우리는 good boy로 가야 하는 것 같다.

 

그림 8

 

일단 위의 3을 1로 만들어서 patched 파일을 생성해주었다.

 

그림 9

 

이제 45BB61에 BP를 걸고 Name 값에 A, KEY 값에 “BEDA-2F56-BC4F4368-8A71-870B”를 넣고 실행시켜주었다.

 

그림 10

 

아래로 쭉 내리다 보니 “BEDA-2F56-BC4F4368-8A71-870B”값 외에도 “FFE3-“으로 시작하는 값이 있는 것을 확인하였다. 오른쪽 레지스터 값을 확인해보니, EAX에 내가 입력한 KEY 값이 들어가 있고,에 “FFE3-“으로 시작하는 값이 들어있는데, A라는 값을 통해 만들어진 KEY값임을 알 수 있었다.

즉, EDX값이 “BEDA-“가 되면 문제가 풀리는 것 같다.

 

그림 11

다시 돌아와서, BP를 건 위치에서 한 줄씩 내려오다 보니 40B850 함수를 지난 후, “FFE3-“이라는 값이 생겼다. 이를 통해 40B850 함수에서 NAME에 해당하는 KEY 값이 생성될 것이라고 예측할 수 있었다.

 

해당 함수로 이동해서 아래쪽을 쭉 보았다.

내리다 보니 알 수 없는 연산들을 반복하는 것을 볼 수 있다.

 

그림 12

해당 연산이 KEY값을 위한 연산이라고 예측할 수 있었고, 일단 BP를 타고 쭉 내려가 보았다.

 

그림 13

내려오다 보니 Jne 부분에서 edx에 FFE3-으로 시작하는 값이 담겨있는 것을 알 수 있었고, 해당 부분에서 KEY 값의 첫 번째 4글자가 결정된다고 예측할 수 있다.

 

그렇다면 이 위치에서 연산을 통해 EDX에 BEDA-로 시작하는 값이 들어간다면 문제가 해결될 것이라고 생각했다.

 

디버거를 통해 연산을 확인했을 때, [EBX+ECX-1]에 Name 값이 들어있었으므로, esi에 name이 들어갈 것이라고 생각했다.

 

해당 연산과 관련된 파이썬 코드를 작성해보면

 

그림 14

 

아래 결과 값들 중에 70에 beda가 있는 것을 확인할 수 있다.

따라서 name 값이 70이라는 뜻인데, 70은 문자로 F를 뜻한다.

 

즉, NAME에 들어갈 값은 F이고, 문제에서 MD5 해시 값을 구하라고 했으니 구해보면

 

800618943025315F869E4E1F09471012

이라는 값이 나온다.

 

'Reversing > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L19풀이  (0) 2021.09.13
[CodeEngn] Basic RCE L18풀이  (0) 2021.09.13
[CodeEngn] Basic RCE L16풀이  (0) 2021.09.13
[CodeEngn] Basic RCE L15풀이  (0) 2021.09.13
[CodeEngn] Basic RCE L14풀이  (0) 2021.09.13