본문 바로가기

리버싱

[codeengn]코드엔진 basic RCE L17

반응형

문제:

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

 

일단 Ollydbg로 열어서 Key값을 넣고 Name에 아무거나 한자리를 넣어보도록 한다.

문제에선 한글자라고 분명 그랬는데,

'Please Enter More Chars' -> 글자를 더 넣어라 라고 되어있다.

 

이 부분을 바꿔봐야겠다.

일단 text strings를 확인한다.(Search for -> ~referenced text strings)

이 부분으로 이동한다.

이 부분으로 이동한 후, 위를 봤는데

EAX가 3이랑 비교하는 걸 보니,

3글자 이상이어야 이 부분을 통과할 수 있는 듯 하다.

더블클릭해서 CMP EAX, 0x1로 바꾼다.

여기에 BP를 걸고 다시 실행한다.

실행할 때 BP를 건 부분을 바꾸면서 실행해보니

'Please Enter More Chars'부분은 보이지 않는다.

 

이제 text strings를 확인해본다.

이 빨강색 부분에 있는 상황이다.

"Good Boy"로 간다.

Good Boy가 있는 곳으로 와서 일단 BP를 걸어주었다.

CALL과 JNE가 있는 곳이 단서가 될 것이다.

근데 옆에 023F8E08이 상당히 수상하다.

그 위의 45B850으로 이동한다.

 

좀 진행을 해보았는데, 여기서 루프를 돈다.

이렇게 진행을 해봤는데, 여기서 ESI가 상당히 많이 사용되고,

MOV EDX, ESI인 것을 보니, 그 ESI값을 EDX에 복사함을 확인할 수 있다.

그럼 결과는 EDX 66EE46F0이다. 

이제 돌아와서 레지스터 창을 다시 봤다.

EDX가 '66EE46F0'이었는데 

근데 이 부분에서 EDX는 바껴있었고 '66EE-~~'로 바뀌었음을 확인할 수 있다.

 

여기서 중요한 단서를 얻을 수 있다.

CALL 45B850로 인해 EDX에 어떤 값이 저장되고 그게 키란 것이다.

 

일단, 문제에서 제시된 키는 BEDA-2F56-BC4F4368-8A71-870B 이다.

그럼 CALL 45B850을 끝내고 나온 4개의 문자가 BEDA가 나와야 한다.

그럼 여기 루프 안에서의 연산을 통해 나온 EDX, 즉 ESI값이 BEDA로 시작하게 해야 한다.

근데 역추적은 귀찮고, 그냥 brute-force를 사용한다.

ADD ESI,EDX는 그냥 값을 맞춰주기 위함이므로 필요없다.

그럼 위에 빨강색으로 표시한 부분만 FOR문을 돌려 brute-force해보면 된다.

0x30~0x7A까지 for문을 돌려보면 되는데, 이 이유는 한글자이고 숫자,소문자,대문자의 범위이기 때문이다.

연산하면 이와 같다.

그럼 이렇게 beda가 나옴을 확인할 수 있다.

https://www.easycalculation.com/finance/finance.php

70의 ASCII값을 알아낼 수 있다.

이걸 MD5로 바꾸면 된다.

반응형

'리버싱' 카테고리의 다른 글

[Reversing.kr]Easy crack 1번  (0) 2020.08.07
[codeengn]코드엔진 Basic RCE L19  (0) 2020.08.06
[CodeEngn]코드엔진 basic RCE L16  (0) 2020.07.30
[CodeEngn]코드엔진 Basic RCE L15  (0) 2020.07.29
[CodeEngn]코드엔진 basic RCE L14  (0) 2020.07.27