ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • lvl 07
    Wargame/CodeEngn Basic RCE 2018. 12. 11. 20:17

    문제



    컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될 때 CodeEngn은 "어떤것"으로 변경되는가





    풀이


    → 프로그램을 실행한 후, 임의의 시리얼을 입력한 후 "Check"를 클릭하면 잘못된 시리얼이라는 메시지가 출력된다.







    → 디스어셈블한 후, 문제 중 컴퓨터 C드라이브의 이름이 언급됬으므로, 이에 해당하는 라이브러리 함수를 찾아본다. 적당히 "lpVolumeNameBuffer"이라는 변수가 있으며 네이밍을 봐서 드라이브 이름으로 추측할 수 있다. 게다가, 뒷 부분에 VolumeNameBuffer에 일련의 연산작업을 하는 것도 볼 수 있다. 여기에 bp를 설정한 후 디버깅한다.





    → break 후, VolumeNameBuffer의 값이 저장된 주소 값으로 따라가서, 값을 "CodeEngn"으로 변경한다.





    → "4562-ABEX"라는 문자열과, 변경한 "CodeEngn"이라는 문자열을 합친 후, 이 값에 add 연산을 통해 값을 변경하는 로직으로 넘어간다.




    → 코드 바이 코드로 분석한 결과, 마지막 분기에서 사용자 입력 값과 C드라이브 이름이 "CodeEngn"일 경우의 연산 결과 데이터를 비교하는 구문에 의해 성공 여부가 결정된다.





    → 결과는 아래와 같다.







    → 주소에 저장된 값이 변경되는게 눈에 보이는 디버깅이 확실히 편하다. 




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

    lvl 09  (0) 2018.12.12
    lvl 08  (0) 2018.12.11
    lvl 06  (0) 2018.12.11
    lvl 05  (0) 2018.12.11
    lvl 04  (0) 2018.12.11

    댓글

Designed by Tistory.