codeengn basic 17번 문제다.

오.. 드디어 뭔가 좀 바뀐 느낌이다. 이전과는 다르게 키 값을 통해 Name값을 알아내야 하는 것 같다. 그

리고 한자리라는 뭔가 제한적인 것도 있을 것 같다. 

파일부터 실행해보자. name이 1자리라고 해서 넣어봤더니 더 입력하란다. 뭔가 조건으로 막고 있는 것 같다.

패킹은 안되어 있으니 그냥 열어보자. 떡하니 점프문 앞에서 3이랑 비교를 하고 있다. 이걸 CMP EAX,1

로 수정하면 일단 한글자입력은 가능해진다. 


그렇다면 이제 분석을 해보자. 여기저기 BP 걸고 삽질하면서 하나씩 실행하다보니 0045B850 함수를 통해 내가 입력한 name값을 가지고 키 값을 만들어 내는걸 알 수 있었다.

 그 다음 00404C3C 함수를 통해 분기문 조건이 설정되는데 결과 값을 보니 다음과 같이 EAX값은 고정

되어 있고 입력한 name값에 따라 EDX의 값이 달라진다.


직감적으로 EAX와 EDX의 ASCII 값이  같아질 수 있도록 만들면 JMP문 안으로 들어올 것 같다. 어차피

한글자 밖에 안되니 Brute force 방식을 쓰면 될 것 같다. 알파벳아니면 숫자라했으니 하나씩 천천히 넣

어보자. 몇 번 넣어보니 F에서 동일 한 값이 나오고 정상적으로 성공화면이 나온다.


사실 생각보다 오래 걸린 문제였다. 중간에 네임값으로 키값을 만들어내는 함수가 있는데 함수 내부로

들어가서 알고리즘을 파악해보고 입력해야될 값을 알아내려다 결국 실패했다. 아직 실력이 확실히 부족

한 것 같다.이런식으로 풀어서 얻는게 있긴 하는걸까 생각이 든다. 웹쪽 워게임을 집중적으로 하고 있어

서 좀더 시간투자를 하지는 못했지만 다음에는 검색을해서 도움을 받아서라도  알고리즘을 꼭 분석하고

넘어가겠다. 아직도 갈길이 먼 것 같다.


'Wargame > CodeEngn' 카테고리의 다른 글

code engn basic 19번  (0) 2018.02.04
code engn basic 18번  (0) 2018.02.04
code engn basic 16번  (0) 2018.02.04
code engn basic 15번  (0) 2018.02.04
code engn basic 14번  (0) 2018.02.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,