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) |
첫번째 루틴을 실행하고, 그 안에서 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 |