본문 바로가기

Wargame/Reversing-W

CodeEngn basic 17

17번 문제다. 키 값이 "BEDA-2F56-BC4F4368-8A71-870B"일 때

Name을 찾으라고한다.



일단 실행시켜서 Name에 아무값이나 넣어주고

Key값에 "BEDA-2F56-BC4F4368-8A71-870B"을 넣어주고 Check it!



더 입력하란다..? 분명 Name 1개의 문자나 숫자라했는데

좀 이상하다



스트링 검색을 했더니 Well Done!이 보인다.

Well Done! 부분으로 찾아가보자.



0045BB24부분을 보면 CMP EAX,3 이라고해서

문자가 3개인지 비교한다. 좀 더 밑으로 내려가면 1E랑 비교해서

문자의 최소 수, 최대 수를 비교한다. 그럼 최소 수를 바꿔주면 1개의 입력이 가능해진다.



CMP EAX,1 로 패치해주고 실행시켜보자.



똑같이 값을 넣고 Check it!을 해봤지만 반응이 없다.

틀렸다.



본격적으로 분석해서 찾은 키 값을 만들어내는 루틴이다.

이 루틴이 "BEDA-2F56-BC4F4368-8A71-870B"에서 BEDA를 만들어내는 루틴이다.



두번째 루틴이다.

이 루틴은 "BEDA-2F56-BC4F4368-8A71-870B"에서 2F56을 만들어내는 루틴이다.



세번째 루틴이다.

이 루틴은 "BEDA-2F56-BC4F4368-8A71-870B"에서 8A71을 만들어내는 루틴이다.



네번째 루틴이다.

이 루틴은 "BEDA-2F56-BC4F4368-8A71-870B"에서 870B를 만들어내는 루틴이다.


루틴들을 참고해서 파이썬으로 코드를 짜고, 코드 안에서 일치하는 부분의 문자나 숫자가 정답이 되겠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
edx = 0
ecx = 0
ebx = 0
for i in range(65,90):
    edx = 0
    esi = i
    esi += edx
    esi *= 1906
    edx = esi
    edx = edx * esi
    esi += edx
    esi |= esi
    esi = esi * 1140
    esi += esi
    edx = esi
    print hex(edx)+" "+chr(i)
 
for i in range(65,90):
    edx = 0
    edx = i
    edx += 17
    edx -= 5
    edx = edx * 146
    edx += edx
    edx = edx * 2073
    print hex(edx)+" "+chr(i)
 
 

cs

이렇게 짜줬다. 첫번째 루틴과 두번째 루틴만 비교하고, 그 둘 비교에서
공통으로 같은 문자를 찾아서 입력하였다.


첫번째 루틴을 실행하고, 그 안에서 beda를 찾으면

중간에 저렇게 beda가 박힌 문자가 하나 나온다.



두번째 루틴에서 2f56을 찾으면

2f56이 박혀있는 문자가 하나 나온다.

둘의 문자가 일치하니까 저 문자를 입력해보자.



Name에 F를 넣고

키 값에 제시된 키 값을 넣고 Check it!



맞았다. 끝


반응형

'Wargame > Reversing-W' 카테고리의 다른 글

CodeEngn basic 20  (0) 2017.07.19
CodeEngn basic 18  (0) 2017.07.19
CodeEngn basic 16  (0) 2017.07.18
CodeEngn basic 15  (0) 2017.07.18
reversing kr CSHOP  (0) 2017.07.13