안경잡이개발자

728x90
반응형

wargame.kr - keypad CrackMe 문제풀이(Write Up)

문제 분류: 리버싱(Reversing)

 

  이번 시간에 풀게 될 문제는 간단한 리버싱(Reversing) 문제입니다.

 

  ▶ 문제풀이 사이트 주소: http://wargame.kr

 

  문제에 접속하면, 패스워드를 찾아보라는 안내 메시지와 동시에 하나의 실행 파일이 존재합니다.

 

 

  프로그램을 실행하여 간단히 키패드에 아무 내용이나 입력한 뒤에 [AUTH] 버튼을 눌러봅시다.

 

 

  아무래도 정확한 패스워드 값을 넣어야 정답 처리가 되는 것 같습니다. 따라서 IDA Pro를 실행하여 해당 프로그램을 대상으로 정적 분석을 진행하겠습니다. 가장 먼저 [Shift + F4]를 눌러서 [Names View]에 'password'를 검색합니다. 그러면 위에서 확인했던 wrong password라는 값을 가지고 있는 변수를 찾아낼 수 있습니다.

 

 

  이제 이 변수는 어디에서 사용되고 있을까요? 검색 결과, sub_401740라는 함수에서 사용되고 있는 것을 확인할 수 있습니다.

 


   따라서 해당 변수를 참조하고 있는 함수인 sub_401740을 더블 클릭하여 확인해보겠습니다. 그랬더니 무언가 인증을 수행하는 느낌의 어셈블리어 코드가 나오는 것을 알 수 있습니다.

 

 

  이후에 F5를 눌러서 Hex-Ray를 사용해 봅시다. 그랬더니 다음과 같이 상당히 유추하기 쉬운 소스코드가 등장하는 것을 알 수 있습니다.

 

 

  소스코드를 있는 그대로 확인해보겠습니다. 아무래도 사용자가 입력한 값은 v3 변수에 담기는 것 같습니다. 이제 그 변수에서 숫자만 추출하여 정수형으로 만들어 v5에 담습니다. 그리고 v6에는 현재 달 정보가 담기는 것을 알 수 있습니다.

 

  따라서 -201527 * 7월 + v5 == 195934910입니다.

 

  그러므로 정답은 "현재 달(포스팅 시점은 7월) * 201527 + 195934910"입니다. 저는 계산기를 이용해 정답이 197345599인 것을 알아냈습니다. 아마 이 포스팅을 접하고 계신 분들의 현재 날짜에 따라서 정답이 달라질 것으로 예상할 수 있습니다.

 

 

  실제로 해당 값을 입력하여 [AUTH] 버튼을 누르면 성공적으로 Flag 값이 도출됩니다. 실제 Flag 값은 직접 리버싱을 통해 확인해보세요!

 

728x90
반응형