ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • lvl 01
    Wargame/CodeEngn Basic RCE 2018. 12. 9. 18:11


    문제



    HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가





    풀이


    → 프로그램을 실행한다.






    → 음.. CD-ROM Drive가 아니라고 Alert 메시지가 나타난다.




    → 디스어셈블을 해보았다. 프로그램 구조가 대충 파악된다.





    → GetDriveTypeA 함수를 실행한 후, eax 레지스터와 esi 레지스터를 비교한 결과를 통해 성공 유무를 파악한다.


    → 적당한 곳에 bp를 찍고 디버깅한다.




    → GetDriveTypeA 함수를 실행한 직후, eax 레지스터의 값이 "3"임이 확인된다.




    → eax 레지스터는 값이 1이고, esi 레지스터는 401003인 것을 알 수 있다.


    → 따라서, cmp eax, esi 코드가 실행되기 전, esi 레지스터를 강제로 1로 맞추고 코드가 실행되도록 레지스터를 변경한다.




    → ZF 값이 1이 되었으며, 정상적으로 성공분기로 실행된다.




    → 성공.





    → 방법은 여러가지 생각해볼 수 있다.


    → 레지스터 값 변경, 제로플래그 값 변경, 레지스터 값이 아닌 바이너리 패치로 jz 코드를 jnz와 같은 코드로 변경하는 방법도 가능할 것 같다.





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

    lvl 06  (0) 2018.12.11
    lvl 05  (0) 2018.12.11
    lvl 04  (0) 2018.12.11
    lvl 03  (0) 2018.12.10
    lvl 02  (0) 2018.12.09

    댓글

Designed by Tistory.