ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CodeEngn Advance08 (미완)
    Reversing/Codengn Advance 2018. 8. 15. 15:44
    반응형

    CodeEngn Advance 08 문제풀이

    문제 지문 

    Key 값이 5D88-53B4-52A87D27-1D0D-5B09 일때 Name은 무엇인가 
    힌트 : Name은 두자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 
    정답인증은 Name의 MD5 해쉬값(대문자) 


    (그림 1)

    (사진 1)위 화면은 로드? 작업이라고 얼추 들은 기억이난다.(초심잡고 다시하는 중)

    (그림 2)

    로드하는 화면에서 F9(실행)을 하게되면 프로그램 실제코드로 이동하게 된다.

    (그림 3)

    리버싱을 수행할 때 마다 문자열 체킹하면 단서가 나오기 때문에 위(그림 3) 또한 정답시 출력하는 문자열로 추정되는 "Good Boy!!!"가 보인다. 

    (그림 4)

    "Good Boy!!!"루틴으로 이동한 화면이다. 파란색 박스는 내가 Name에 입력한 값의 개수를 CMP구문으로 비교하는 것입니다.

    3개 보다 적을경우 첫 번째 빨간색박스 문자열을 출력하고,  

    16진수 1E == 10진수 30보다 많을 경우 두 번째 빨간색박스 문자열을 출력합니다.


    ※EAX 범용 레지스터: 산술, 논리연산을 수행하며, 함수의 반환 값이 저장되는 레지스터이다.

    *반환 값을 통해 호출 함수의 성공여부를 알 수 있다. 

    -참고 사이트-


    ※JGE, JLE 분기명령어: 

    JGE(Jump if greater than or equal):  ">="와 같이 표현되며, C언어에서는 '<' 로 코딩해야 JGE가 나온다.

    ※JLE(Jump if less or equal): "<="와 같이 표현되며, C언어에서는 '>'로 코딩해야 JLE가 나온다.

    -참고 사이트-


    (그림 5)

    첫 번째 빨간색 박스를 보면 글씨가 빨간걸 볼 수 있는데, 기존 CMP EAX,3에서 2로 패치하였다. 

    이유는 문제지문에서 나와있듯 Name은 두 글자인데, 비교구문에서는 3으로 되어있기에 수정하였다.


    두 번째 빨간색박스에서 Name에 입력한 두 글자를 알고리즘을 돌려서 시리얼 키로 만드는 작업을 한다.

    그 후 지문에 나온 "5D88-53B4-52A87D27-1D0D-5B09" 와 동일한 킷값인지 비교하는 구조이다.

    key 생성알고리즘에서 단서를 얻을 수 있을 것이라 추정하고 루틴을 따라 들어갔다.  


    ※JNZ(Jump if not zero) 분기명령어: Zero Flag값이 0이 아니라면 점프하는 구문이다.

    * "!="로 표현되며 C언어에서는 "=="이다. 

    * 결과 값이 같다면 점프하지 않는다.


    (그림 6)

    알고리즘 구간이다. 밑에 도 반복 루틴이 많지만, 이 부분만 캡처해 보았다.


    .... 시간 날 때 이어 올리겠습니다.

    반응형

    'Reversing > Codengn Advance' 카테고리의 다른 글

    [Codeengn Advance] challenge 01  (0) 2019.03.11
    CodeEngn Advance 06  (0) 2017.01.17
    CodeEngn Advance 05  (0) 2017.01.16
    CodeEngn Advance 04  (0) 2017.01.16
    CodeEngn Advance 03  (0) 2017.01.16
Designed by Tistory.