-
Crackme 05
위와 같이 어셈블리 코드들을 확인할 수 있다.
그러면 일단 프로그램을 실행시켜보도록 하겠습니다.
위와 같이 The serial you entered is not correct! 와 같이 입력한 일련 번호가 일치하지 않다고
한다. 그리고 나서 프로그램이 종료된다.그러면 우리는 저 문자열이 스택에 저장되어 있을거라고 믿고 스택에 저장하는 push 명령어를 찾아보록 하겠습니다.
그러면 아래와 같이 문자열들이 저장되어 있는 것을 확인할 수 있었습니다.
이제 이 push 명령어(0040109E)로 들어가보겠습니다.
위와 같이 push 명령를 확인 할 수있고 jne 조건 분기를 확인할 수 있었고 문자열 “The serial you entered is not correct!” 와 “Yep, you entered a correct serial” 가 담겨있다.
표에서 보기와 같이 004010FF 에서 je 조건문을 확인 할 수 있었고 위에 cmp eax,0 이 같다면 조건분기를 하는 로직 이었다.그런데 잘보면 위에 사진을 보면 4023F3 에 “4562-ABEX” 이 담겨있고 4023FD 에 “L2C-5781” 이 들어가 있는것을 확인할 수 있었다.
위에 코드에서 4010A8에서 lstrcatA 가 나온다. lstrcatA(str1,str2) str1뒤에 str2를 붙이는것이다.
그러므로 4023F3 주소값을 40225C에 문자열에 결합된다.그리고
dl(edx 8비트)를 2 로 설정하고, 40225C에 들어있는 문자열들을 1씩 증가시키는데 dl를 1씩 감소한다.
jne 는 ZF가 0으로 설정되어 있으므로 조건분기는 한번 실행된다.
40225C ~ 40225F 는 1 만큼 증가된다.
그리고 4010D9 와 004010F7에서 lstrcmpiA 를 이용해 “L2C-5781” 와 “6784-ABEX”를 스택에 저장 후 402000에 “L2C-57816784-ABEX” 로 결합된 후 402324(입력값) 과 4010F7 에서 lstrcmp 즉 비교한다.그럼 다시 실행시켜 이 L2C-57816784-ABEX 를 입력시켜보겠다.
그럼 위와 같이 성공한 것을 볼 수 있다.
'리버싱' 카테고리의 다른 글
crackme-reverse 입문 튜토리얼 01 (0) 2021.05.19 Crackme 08 풀이 (0) 2021.05.19 Crackme 04 풀이 (0) 2021.05.19 Crackme 02 풀이 (0) 2021.05.19 댓글