ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CodeEngn Basic RCE 1
    $ 리버싱 $/CodeEngn Basic RCE 2019. 3. 27. 00:35


     
    프로그램을 실행하면 다음과 같은 문구가 나옵니다.
     
    CD-ROM 아니라고 나옵니다.
     
    올리디버거를 이용해서 확인해 보겠습니다.
     
    내려가 보면 40100E에서 메시지 박스가 뜨고 나서 401024에서 CMP명령을 이용해서 EAX ESI 비교를 합니다.
     
    그리고 401028에서 CMP 반환값을 가지고 참인지 거짓인지 판별후 JMP 할지 안할지를 결정하는 문장입니다.
     
    이때 Error 가기 때문에 YEAH!! 갈수 있도록 해야 하는데 방법이 4가지가 있습니다.
     
    #1. EAX ESI 값을 동일하게 만들어서 성공으로 보내는 방법
    #2. JE조건문을 바꿔서 성공으로 보내는 방법
    #3. 실패화면을 성공으로 보내는 방법(문자열 변경)
    #4. C드라이브를 진짜 CD-ROM으로 인식하게 하는 방법
     
    저는 가장 많이 사용되는 1번과 2 방법으로 풀이를 해보겠습니다.
     
    1 풀이 :
    CMP명령어가 있는 401024주소 까지 내려와 보면
    비교하는 EAX 값과 ESI 값이 다릅니다.
    ESI 값이 3인데 401003으로 뜨는 이유는..
    다른 분들은 그냥 3으로 나오지만 저는.. 저렇게 나옵니다.
    아마.. ESI 레지스터의 용도를 보면 출발지 주소(Source Index) 저장됩니다.
    근데 처음 시작 401000주소로 시작해서 아마 ESI 값이라고 추측이 됩니다.
     
    EAX=1,ESI=3 나오는 과정은 다음과 같습니다.
    40101D 이전 : C:\ 의미하는 값인 3 EAX 들어간다. EAX=3, ESI=0
    40101D : ESI 1증가. EAX=3, ESI=1
    40101E : EAX 1감소. EAX=2, ESI=1
    401021 : ESI 1증가. EAX=2, ESI=2
    401022 : ESI 1증가. EAX=2, ESI=3
    401023 : EAX 1감소. EAX=1, ESI=3
     
    그래서 EAX=1, ESI=3 입니다.
    두개의 값을 같게 해주기 위해서 다음과 같이 수정해 줍니다.
     
    이렇게 하고 다음으로 넘어가보니
    점프선이 보이게 되었습니다. 이대로 진행하면 성공 출력!
     
    2 풀이 :
    401026주소에서 JE명령어로 CMP 거짓을 판별해서 JMP 하게 됩니다.
    참이면 40103D 점프하고 아니면 그냥 401028 가는 명령인데 굳이 판별 안하고 JE JMP 변경하면 바로 점프 하게 됩니다.
    이렇게 바꿔 주시면 성공메시지로 바로 점프하게 됩니다.

    '$ 리버싱 $ > CodeEngn Basic RCE' 카테고리의 다른 글

    CodeEngn Basic RCE 6  (0) 2019.03.27
    CodeEngn Basic RCE 5  (0) 2019.03.27
    CodeEngn Basic RCE 4  (0) 2019.03.27
    CodeEngn Basic RCE 3  (0) 2019.03.27
    CodeEngn Basic RCE 2  (0) 2019.03.27

    댓글

Designed by Tistory.