본문 바로가기

Hacking/Reversing

CodeEngn_basic_17

Basic RCE L17

 

Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가
힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고..
정답인증은 Name의 MD5 해쉬값(대문자)

 


 

이번문제는 Serial을 알아내는 다른 문제와 달리 Name을 알아내야 하는군요.

일단 실행시켜 봅시다.

 

 

 

Name과 Key에 A라는 값만 넣어서 실행시켰더니

 

 

문자열을 더 입력하라는 문구가 출력되네요

하라는대로 더 입력해봅시다

 

 

Name에 3글자를 입력했더니 아무일도 일어나지 않네요, Name은 3글자여야하나 봅니다 Key값은 맞아야 하는 값이 있으니 상관 쓰지 맙시다.

 


 

동적분석을 마쳤으니 Ollydbg로 정적 분석을 해봅시다. ( 패킹은 안되어 있구요. )

일단 Ollydbg로 들어가서 할 일은 Name이 1자리수가 되도록 바꾸어주는 것이 될거 같네요 문제에서 힌트로 Name이 한자리수라고 말해줬으니...

Name의 자릿수를 비교해주는 곳을 찾아야 되네요.

 

 

우선은 해당 비교 부분을 찾기 위해서 All referenced text strings를 통해서 우리가 본 문자열( Pleas Enter More Chars... )을 찾아봅시다. 

 

 

위로 조금 올려보니 우리가 봤던 문자열이 보이네요 해당 부분으로 진입해봅시다.

 

 

진입해보니 우리가 찾던 문자열과 약간 위에 비교문이 있네요 저 부분이 아마 Name이 몇자리인지 비교하는 것 같은데 저 부분을 수정해 준 뒤에 진행하도록 합시다.

 

 

이제 자릿수 문제는 해결했으니 Name이 뭔지 알아봐야 하는데, 저희가 가진건 Key 값 밖에 없네요.

 

 

일단 아래에는 Please Enter Not More Then 30 Chars...라는 문자열이 있는데 이건 Key의 길이를 30자리 미만으로 제한하는 것 같은데 저희가 알고 있는 Key값은 30자리 미만이기 때문에 무시해도 될 것 같구요.

 

 

더 아래로 가보면 Good Boy!!라는 문자열이 눈에 띄는데 그 위에 부분이 아마도 key값을 비교하지 않나 싶네요.

근대 JNZ위로 CMP가 보이지 않는데 바로 위에 있는 Call부분에서 진행하는 것 같은데 해당부분으로 진입해서 확인해 봅시다.

 

 

EAX와 EDX의 값을 비교하는데 서로 같으면 RETN시킨다 이 부분에서 Key값의 비교를 해주는데 내가 입력한 값과 Key값을 비교해주는것 같으니 해당 함수에 BP를 걸고 한번 실행시켜봅시다.

 

 

실행을 시켰더니 웬 이상한 값이 EDX에 들어갔다. 고정된 값과 비교를 하는데 아닌가 싶어서 Name을 B로 바꾼 뒤에 다시 한번 실해시켜 봤는데

 

 

또 다른 값이 나왓다.. Name에 맞게 Key를 생성시키는데 Name을 맞춰서 우리가 알고있는 BEDA-2F56-BC4F4368-8A71-870B값과 같은 값이 나오도록 Name을 맞춰야하는 것 같다.

그럼 윗쪽에 Key값을 생성하는 부분이 있을 것이다.

어떤 부분에서 Key를 생성시키는지 잘 모르니까 Call함수 부분에 BP를 걸어준뒤 하나하나 어디에서 만드는지 확인해 봤다. 비교문 위로 Call이 3개가 있는데 아마도 비교문 바로 위에 있는 Call 함수에서 key를 생성시켜주는 것 같다.

 

 

의심스러운 해당 Call함수 부분에 진입해봅시다.

진입한 뒤에 f7로 천천히 실행시켜보면 어느 부분에서 문자열을 만드는 것을 알수 있다.

 

 

저 부분에서 Key값을 생성시키는 걸 알수있는데, 여기서 Key값을 생성한다고 하는 이유는 EDX에 존재하는 FFE374F0이라는 값에서 앞부분인 FFE3이라는 값이 Name을 A라고 입력하면 보여주는 Key 값의 가장 앞의 부분과 같기 때문이다.

 

Name을 A로 했을 경우

 

key값을 생성하는 부분을 알았으니 해석을 해봅시다.

 

EBX = Name ( A )

ESI = EBX 

ESI += EDX

ESI *= 772

EDX = ESI

EDX *= ESI

ESI += EDX

ESI *= 474

ESI += ESI

EDX = ESI

 

이러한 과정을 거치는데 우리는 저 계산을 했을 경우에 Key값의 앞부분이 같은 Name을 찾아야 하는데, 하나하나 계산을 하기에는 너무 귀찮으니 코드를 짜기로 했다.

 

실행시켰을 경우에 우리가 알고있는 BEDA-2F56-BC4F4368-8A71-870B에서 BEDA라는 값이 있는 문자열을 찾아야 한다.

 

 

아스키코드 값으로 70인 값이 이번 문제의 Name이다.

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

CodeEngn_basic_19  (0) 2020.08.02
CodeEngn_basic_18  (0) 2020.07.24
CodeEngn_basic_16  (0) 2020.07.18
CodeEngn_basic_15  (0) 2020.07.13
CodeEngn_basic_14  (0) 2020.07.05