ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • lvl 14
    Wargame/CodeEngn Basic RCE 2019. 1. 3. 13:13

    문제



    Name이 CodeEngn 일때 Serial을 구하시오
    (이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요)
    Ex) 11111





    풀이


    → 프로그램을 실행한다. 적당한 값을 입력한 후, CHECK 버튼을 클릭하면 잘못된 시리얼 번호를 알려주는 메시지가 나타난다.





    → PEiD 도구를 이용하여 프로그램을 확인한 결과, UPX로 패킹된 것으로 확인된다.






    → 언패킹된 프로그램을 IDA로 디컴파일한다. 그리고 적절한 분기에 bp를 설정한다.







    → 분석을 진행하며 변하는 레지스터들의 값을 살펴본다. 이 때, 마지막에 설정한 bp인 cmp eax, esi 명령어에서의 레지스터 값을 살펴본다. 해당 명령어에 도달하기 전 Name 값을 문제에서 주어진 "CodeEngn"과 시리얼 번호는 임의의 값 "1234"를 입력한다.






    → 아래 그림과 같은 EIP에서, EAX 레지스터와 ESI 레지스터를 비교하는 명령어를 확인할 수 있으며 EAX 레지스터는 시리얼 값인 "1234"의 16진수 값인 "4D2"이고 ESI 레지스터는 Name 변수의 값에 의존하여 생성되는 임의의 값임을 알 수 있다.






    → 따라서, Name 변수에 "CodeEngn"이라는 값이 들어간 경우, ESI 레지스터는 0x000129A1 이고 해당 값을 프로그램 텍스트필드로 입력할 경우 10진수로 넣어야 하므로 0x000129A1 값을 10진수로 변경한다.





    → 확인한 10진수의 값으로 입력 시, 다음과 같은 성공 메시지를 확인할 수 있다.



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

    lvl 16  (0) 2019.01.04
    lvl 15  (0) 2019.01.03
    lvl 13  (0) 2019.01.03
    lvl 12  (0) 2018.12.27
    lvl 11  (0) 2018.12.27

    댓글

Designed by Tistory.