Wargame/CodeEngn
code engn basic 17번
JeonYoungSin
2018. 2. 4. 15:15
codeengn basic 17번 문제다.
오.. 드디어 뭔가 좀 바뀐 느낌이다. 이전과는 다르게 키 값을 통해 Name값을 알아내야 하는 것 같다. 그
리고 한자리라는 뭔가 제한적인 것도 있을 것 같다.
파일부터 실행해보자. name이 1자리라고 해서 넣어봤더니 더 입력하란다. 뭔가 조건으로 막고 있는 것 같다.
패킹은 안되어 있으니 그냥 열어보자. 떡하니 점프문 앞에서 3이랑 비교를 하고 있다. 이걸 CMP EAX,1
로 수정하면 일단 한글자입력은 가능해진다.
그렇다면 이제 분석을 해보자. 여기저기 BP 걸고 삽질하면서 하나씩 실행하다보니 0045B850 함수를 통해 내가 입력한 name값을 가지고 키 값을 만들어 내는걸 알 수 있었다.
그 다음 00404C3C 함수를 통해 분기문 조건이 설정되는데 결과 값을 보니 다음과 같이 EAX값은 고정
되어 있고 입력한 name값에 따라 EDX의 값이 달라진다.
직감적으로 EAX와 EDX의 ASCII 값이 같아질 수 있도록 만들면 JMP문 안으로 들어올 것 같다. 어차피
한글자 밖에 안되니 Brute force 방식을 쓰면 될 것 같다. 알파벳아니면 숫자라했으니 하나씩 천천히 넣
어보자. 몇 번 넣어보니 F에서 동일 한 값이 나오고 정상적으로 성공화면이 나온다.
사실 생각보다 오래 걸린 문제였다. 중간에 네임값으로 키값을 만들어내는 함수가 있는데 함수 내부로
들어가서 알고리즘을 파악해보고 입력해야될 값을 알아내려다 결국 실패했다. 아직 실력이 확실히 부족
한 것 같다.이런식으로 풀어서 얻는게 있긴 하는걸까 생각이 든다. 웹쪽 워게임을 집중적으로 하고 있어
서 좀더 시간투자를 하지는 못했지만 다음에는 검색을해서 도움을 받아서라도 알고리즘을 꼭 분석하고
넘어가겠다. 아직도 갈길이 먼 것 같다.
|