문제:
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가 나옴을 확인할 수 있다.
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 |