• Crackme 08 풀이

    2021. 5. 19.

    by. TONY07

    문자열 을 찾아본다.


    아래와 같이 실패 , 성공 했을때의 경고문이 나온다.
    그럼 주변을 찾아본다.


    위와 같이 조건분기를 엄청 많이 하는것을 확인 할 수있다.
    조건분기를 보기쉽게 IDA 로 확인해보자

    위에 사진으로 보니까 한눈으로 직관적으로 볼 수 있다.
    문자를 입력하지 않았을 경우에 jz 조건문에 의해 Please enter  1 or more chars! 경고문을 띄운다.
    아래 조건문에 의해 어떤 경고문이 뜰지 살펴본다.

     

    edi + i 번째 위치한것을 byte만큼 eax에 옮긴다.
    그 후 al 과 특수문자(AD,9A,97....) 와 and 연산을 한 후 에 ZF가 0 이거나 위에 연산 결과가 0이 아니라면 점프한다.



    AD : 1010 1101
    9A : 1001 1010
    97 : 1001 0111
    BF  : 1011 1111
    5FC5 : 0101 1111 1100 0101
    D6 : 1101 0110

    길이는 6이어야 한다. 위에 데이터와 and 연산 후 ZF가 되어야 한다. 그러기에 답은 여러가지 가 나올 수 있다.

    나는 @!@@"!  를 입력하였다.

    0100 0000  and  1010 1101    @
    0010 0001  and  1001 1010     !
    0100 0000  and  1001 0111    @
    0100 0000  and  1011 1111    @
    0010 0010  and  0101 1111 1100 0101    “
    0010 0001  and 1101 0110     !

     

     

    위와 같이 입력하기에 and 연산에 모두 0이 되기에 조건분기를 하지 않는다.

     

    만약 크래킹으로 하려고하면 jne를 je로 바꿔주면 다른 문자열이 여도 정상 동작한다.

     

    '리버싱' 카테고리의 다른 글

    crackme-reverse 입문 튜토리얼 01  (0) 2021.05.19
    Crackme 04 풀이  (0) 2021.05.19
    Crackme 02 풀이  (0) 2021.05.19
    Crackme 05 풀이  (0) 2021.05.19

    댓글