ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Easy Crack
    $ 리버싱 $/reversing.kr 2019. 9. 11. 11:34

    문제를 실행해보면 아래와 같은 창이 뜹니다.

     

    Serial 값을 찾는 문제 인것 같습니다.

     

    틀리면 Incorrect Password 라는 문자열이 나옵니다.

     

    올리디버거로 분석해 보겠습니다.

    틀렸을때 나오는 문자열을 검색해서 들어가보면 40113C 주소에 존재 합니다.

     

    그래서 위로 좀 올려서 401080에 BP를 걸고 F9를 눌러서 1234를 입력해 줬습니다.

     

    아래로 내리다 보면 GetDlgItemTextA함수를 지나고 CMP 함수가 등장을 합니다.

     

    ESP+5 와 61이라는 값을 비교 합니다.

    ESP+5 자리에는 저희가 입력한 1234의 값중에서 2라는 값이 들어 있는 주소입니다.

    61은 16진수의 값이므로 a를 의미합니다.

    그래서  두번째글자가 a면 분기를 뛰어 넘어가지 않고 그냥 계속 진행됩니다.

    그대로 진행을 해보면 

     

    401135주소로 분기 되어서 Incorrect Password 를 띄우게 됩니다.

     

    이번엔 1abc를 넣어 보았습니다.

    분기 되지 않고 그다음 주소였던 4010B7로 넘어간 것을 확인 할 수 있습니다.

     

    바로 아래에 4010B7에서 PUSH 2를 하고 4010BD 주소에서 LEA ECX, DWORD PTR SS:[ESP+A]를 하는거로 보아 ECX에 ESP+A에서 부터 크기가2만큼 값을 가져오는것 같습니다. 즉, 우리가 입력한 bc를 가져옵니다.

     

     

    그리고 5y라는 값을  push 하고 그 뒤로 바로 bc가 있는 ECX를 Push해서 비교 할것 같습니다.

     

    4010C3에서 401150을 CALL 하는데 여기서 2개의 값을 비교 합니다.

     

    좀 아래로 내려가 보면 다음과 같은 CMP 함수가 보이고 b와 5를 비교합니다.

    이렇게 비교를 하고 해당 함수를 나가면 eax에 0이라는 값을 반환하게 됩니다.

     

    1a5y를 입력해 보겠습니다.

    EAX의 값이 0이므로 분기 되지 않고 4010CF로 잘 넘어 가게 됩니다.

     

     

    ESI에 R3versing 이라는 문자열을 넣어 둡니다.

     

    ESP+10 주소를 EAX에 넣어 둡니다.

     

    즉, EAX에는 19F6F8이 들어갑니다.

    하지만 저는 1a5y만 적었기 때문에 위의 사진을 보면 ESP+10위치에 아무런 값이 없어서 아래와 같은 코드가 나타납니다.

     

     

    EAX의 값 즉, 입력값중 5번째 입력된 값을 DL에 넣는데 Stack DS:[0019F998]에 00 인 NULL 값이 있습니다.

     

    다시 실행해야 하는데 입력값을 1a5yR3versing 으로 입력 해보겠습니다.

     

    EAX는 제가 입력한 ESP+10에서부터 9글자를 가져왔습니다.

    ESI는 4010D1에서 넣어둔 문자열입니다.

    두 문자열을 비교할 것 같아 보이네요.

     

    사진으로 일일히 찍기에는 좀 길어질것 같아서 코드 해석은 글로 작성하겠습니다.

     

    4010DA : 입력한값의 5번째 위치에 해당하는 값을 DL에 넣기

    4010DC : ESI에 있는 값 맨 앞자리를 BL에 넣기

    4010DE : DL의 값 CL로 옮기기

    4010E0 : DL과 BL 비교, 즉 R과 R 비교

    4010E2 : 같기 때문에 분기 X 

    4010E4 : TEST 명령어로 CL의 값이 00 이면 분기, 하지만 지금은 R이라는 값이 들어있기 때문에 루프에서 못빠져 나온다.

    TEST 를 넣은 이유는 결국 R3versing을 다 비교하고 맨마지막 00이 되면 끝내기 위해서 넣어둔 코드.

     

    4010E8, 4010EB : EAX+1의 값, ESI+1의 값을 넣는 것으로 보아 하나씩 주소가 커지면서 R3versing을 비교하는것으로 보인다.

     

    위의 루프를 9번 반복하면 루프를 빠져나오게되고, 4010FE로 나오게 된다.

     

    4010FE에서 앞서 사용한 EAX를 0으로 바꾸고 JMP 명령수행.

    401108에서도 앞서 사용한 R3versing을 제거(pop)

     

    401109에서 앞에서 EAX를 0으로 만들었으니 자연스럽게 40110D까지 이동해 보겠습니다.

     

     

    처음 시작할때 문자열 중에서 2번째 문자열부터 비교했었는데 마지막에서 맨 앞자리를 비교하네요!

     

    맨앞자리의 HEX값은 45입니다.

     

    결국 Serial 값은 Ea5yR3versing 입니다!

     

     

     

    댓글

Designed by Tistory.