ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CodeEngn Basic RCE 17
    $ 리버싱 $/CodeEngn Basic RCE 2019. 5. 7. 16:10

    Name이 한자리라는 것을 알수 있기 때문에 파일을 열어서 보면

     

    문자열을 더 적으라고 되어있습니다. 일단은 한자리가 답이기 때문에 한자리만 입력해도 가능 하도록 변경해 보겠습니다.

     

    ↑ 패킹 되어 있지 않기 때문에 올리디버거 에서 열어 보겠습니다.

    문자열이 뜨는 걸 확인 해서 들어가 보면

     

    위쪽에 비교 구문이 있습니다.

    \

    CMP EAX,3 으로 3자리 이상인지 확인하는 것 같습니다.

    이 것을 CMP EAX,1로 변경해서 저장해 보겠습니다.

    ↑ 변경전                                                 ↑ 변경후

     

    그리고 한자리 수 중에서 Key 값이 BEDA-2F56-BC4F4368-8A71-870B인 숫자를 찾는 것이 남은 문제 입니다.

     

    일단 Name에 따라서 바뀌는 Key값이 만들어지는 알고리즘을 찾아 보겠습니다.

     

     

    45BBA9에서 JNZ를 통해 분기를 하는부분입니다. 

    살짝 위로 올라가면 EDX에 EBP-14 의 값을 옮기는 부분이 있는데 그부분은 아마 Key값을 EDX에 넣기 위함 인것 같습니다.

     

    그렇다는 것은 현재 BP가 걸려있는 45BB9B에서 45B850을 참조하기 때문에 45B850이 Key값을 만드는 알고리즘이 들어 있을 것이라는 것을 의미합니다.

     

    안으로 들어가 보겠습니다.

    입력은 위와 같이 했습니다.

     

    이 부분이 Key 값을 만드는 알고리즘 입니다.

     

    우리가 Name을 입력하면 해당 Name을 통해서 Key값의 앞자리 4자리를 생성 한다는 것을 알았습니다.

    한번 보시죠!

     

    해당 알고리즘 부분을 지나고 난뒤의 ESI를 확인해 보면 66EE46F0라고 적혀 있습니다. 

     

    그리고 해당 함수를 아예 빠져 나간 뒤의 Key값 전체를 확인해 보겠습니다.

     

     

    Key 값이 66EE-3EEC-2A139188-8B4F-79E2 라는 것을 알수 있습니다.

     

    아까 ESI 의 앞 4자리와 Key값의 앞 4자리가 일치 하는 것을 알수 있습니다.

     

    그렇다는 것은 위의 알고리즘을 코드로 작성하여 어떤 Name의 값이 우리가 받은 BEDA-2F56-BC4F4368-8A71-870B 이러한 키값에서 앞 4자리인 BEDA가 되는 지를 찾으면 됩니다.

     

    코드를 작성하면 다음과 같습니다.

     

    F 에서 BEDA가 발견 되었습니다.

     

     

     

     

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

    CodeEngn Basic RCE 20  (0) 2019.05.07
    CodeEngn Basic RCE 19  (0) 2019.05.07
    CodeEngn Basic RCE 16  (0) 2019.05.07
    CodeEngn Basic RCE 15  (0) 2019.05.07
    CodeEngn Basic RCE 14  (0) 2019.05.07

    댓글

Designed by Tistory.