-
문자열 을 찾아본다.
아래와 같이 실패 , 성공 했을때의 경고문이 나온다.
그럼 주변을 찾아본다.
위와 같이 조건분기를 엄청 많이 하는것을 확인 할 수있다.
조건분기를 보기쉽게 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 댓글