ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • lvl 12
    Wargame/CodeEngn Basic RCE 2018. 12. 27. 15:41

    문제



    Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다 

     이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 

    0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 


    문제 : Key값과 + 주소영역을 찾으시오 

    Ex) 7777777???????? 





    풀이


    → 프로그램을 실행한다. 






    → 임의의 키 값을 입력한 후, 체크를 눌러도 반응하지 않는다. 일단 키 값을 찾기 위해, 디스어셈블한다.


    → 다음과 같은 결과 포인트를 확인할 수 있다.





    → eax 레지스터와, 7A2896BFh 와 비교한 후, 성공메시지를 출력한다. 해당 값이 사용자 입력 값에 결정되는 것을 확인하기 위해, 다음과 같은 함수도 확인할 수 있다.




    → GetDlgItemInt 함수와 cmp eax, 7A2896BFh 명령어에 bp를 설정한 후, 디버깅한다. 사용자 입력 값에, 테스트로 "1234"를 입력한다.




    → Check 버튼을 클릭하면, 디버깅 중이므로, GetDlgItemInt 함수에 Break되며, 해당 함수가 실행된 후 반환되는 eax레지스터는 4D2이다. 




    → 해당 값은 입력 값 "1234"의 16진수 값임을 알 수 있다.






    → 그 후, cmp eax, 7A2896BFh 명령어가 실행되기 전 일련의 연산작업을 진행하지만, 해당 분기가 실행되기 전 eax레지스터 값이 그대로 4D2임을 알 수 있다. 따라서, 중간에 일련의 연산작업은 해당 분기 결과에 영향을 미치지 않으므로, 신경쓰지 않도록 한다.



    → 결국 성공분기로 실행되기 위해선, eax레지스터를 7A2896BFh 값으로 만들어야 하므로 해당 값의 10진수 값을 알아본다.




    → 알아낸 10진수 값으로 사용자 입력 값을 넣어보면 다음과 같이 성공적인 메시지가 나타난다.




    → 문제에서 성공 메시지 대신 key 값이 출력되도록 바이너리 패치를 요구하기 때문에, 해당 문자열을 검색하여 key 값으로 패치한다.





    → 패치한 바이너리를 테스트한 결과 정상이다.








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

    lvl 14  (0) 2019.01.03
    lvl 13  (0) 2019.01.03
    lvl 11  (0) 2018.12.27
    lvl 10  (0) 2018.12.13
    lvl 09  (0) 2018.12.12

    댓글

Designed by Tistory.