ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • lvl 15
    Wargame/CodeEngn Basic RCE 2019. 1. 3. 17:33

    문제



    Name이 CodeEngn일때 Serial을 구하시오 





    풀이


    → 프로그램을 실행한다. 





    → PEiD 도구로 프로그램을 살펴본 결과, Delphi 프로그램으로 확인된다.






    → IDA 도구를 이용하여 디컴파일한 결과, Check it 버튼 시 실행되는 것으로 추측되는 함수를 찾을 수 있다. 따라서, 적절한 명령어에 bp를 설정한다. (함수명:_TForm1_Button1Click)






    → 디버깅을 진행하면, cmp eax, ds:dword_45B844 명령어에서 break되며, 이 때의 레지스터 값을 살펴본다. 여기서 사용자 입력 값과, 명령어 그리고 레지스터 값들의 관계를 분석하면서 진행한다.


    → 디버깅 시, 사용자 입력 값은 문제에서 주어진 값인 "CodeEngn" 값을 입력하고, 시리얼 값은 임의의 값인 "1234" 값을 입력한다.





    → cmp eax, ds:dword_45B844 명령어에서 break된 후 EAX 레지스터의 값은 "4D2"이며 해당 값은 사용자가 입력한 임의의 값 "1234"의 16진수임을 알 수 있다. 그렇다면, 사용자 입력 값과 ds:dword_45B844에 저장된 데이터와 비교하는 것을 알 수 있다.




    EAX 레지스터: 사용자 입력 값

    ds:dword_45B844: 체크하는 시리얼 값


    → ds:dword_45B844 공간에 저장된 값을 Trace하면 아래와 같다.





    → 6160h 값이 저장된 것을 확인할 수 있으며, 해당 값의 10진수 값은 아래와 같다.





    → 알아낸 시리얼 값을 입력하면 다음과 같은 성공메시지를 확인할 수 있다.


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

    lvl 17  (0) 2019.01.06
    lvl 16  (0) 2019.01.04
    lvl 14  (0) 2019.01.03
    lvl 13  (0) 2019.01.03
    lvl 12  (0) 2018.12.27

    댓글

Designed by Tistory.