ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Easy Crack
    Wargame/reversing.kr Challenge 2019. 1. 10. 16:49

    → 프로그램을 실행한다. 사용자 입력 값에 임의의 값 1234를 입력한 후 확인할 시 잘못된 패스워드를 알려주는 메시지 창을 확인할 수 있다.






    → IDA 도구를 이용하여 분석을 시작한다. 함수명을 살펴보는 중, strncmp 함수를 확인할 수 있고 해당 프로그램에서 키 값을 확인하는 과정에서 strncmp 함수가 쓰일 것으로 추측할 수 있다.






    → strncmp 함수의 xrefs 확인하면 2개가 나타나지만, 1번 주소 값이 내가 찾고자 하는 부분이다. (직접 분석)





    → sub_401080 함수에서 strncmp 함수가 사용되고 있으며, GetDlgItemTextA 함수를 통해 사용자로부터 값을 입력받는 부분도 확인할 수 있다.





    → 키 값을 확인하는 분기로 생각되는 부분에 bp 를 설정하고 사용자 입력 값 "1234"를 넣고 디버깅을 시작한다.






    → [esp+68h+var_63] 에 저장된 데이터는 32h이며 이 값을 61h 와 비교하는 로직이다. 32h 는 아스키 값으로 "2"이며 사용자 입력 값 "1234"중 2번째로 입력되는 값임을 알 수 있다.





    → 위의 분기에서 2번째 데이터를 61h로 변경해야 하므로, 입력 값을 "1a34"를 입력한다. (61h는 아스키 값 "a")


    → 정상적으로, 다음 분기로 EIP가 이동했으며, 이번에는 33h인 사용자 입력 값 3번째로 입력되는 값을 "5y"라는 값과 비교하는 것을 확인할 수 있다.





    → 사용자 입력 값 3번째 데이터를 5y로 맞춰야 한다. 따라서, 입력 값을 "1a5y5678" 을 입력한다. 뒤에 5678은 다음 분기에서 체크하는 데이터를 알아보기 쉽도록 임의로 넣은 데이터이다.


    → 다음 분기에서는 입력 값의 5번째 데이터(5)부터 "R3versing" 값을 1바이트씩 돌아가면서 비교하는 구문을 확인할 수 있다.





    → 위의 분기에서 정확히 값을 맞추면, 현재 사용자 입력 값은 "1a5yR3versing"이다. 다음에 마지막 비교 분기를 확인할 수 있다.





    → 사용자 입력 값 "1a5yR3versing" 중 1번째 값인 "1"을 45h와 비교하는 분기이다. 45h는 아스키 값 "E"이다. 따라서 사용자 입력 값은 "Ea5yR3versing"로 변경한다.


    → 정답을 확인한다.


    댓글

Designed by Tistory.