본문 바로가기
étude/reverse engineering

easy_crackme1

by mummoo 2023. 1. 7.

옳은 숫자를 입력해야 답이 나옴을 알 수 있다.

답의 입력을 기준으로 wrong!과 correct!로 나뉠 것이기 때문에

문자열 참조로 wrong!을 검색 후 해당 함수로 들어갔다.

커서가 위치한 함수는 "%d %d"를 출력하는 함수이고, 

그 후에 위치한 함수에서 사용자의 값이 입력될 것이다.

그 함수에서의 입력값을 기준으로 결과가 correct! 또는 wrong!으로 나눠질 것임을 알 수 있다.

또한 eax == 0일 경우 wrong!으로 가기 때문에, eax != 0 이어야 함을 알 수 있다.

 

따라서 그 함수로 들어가 보면

첫 번째 cmp : [rsp+20] <= 2000 이어야 eax != 0 충족 가능

두 번째 cmp : [rsp+28] <= 2000 이어야 eax != 0 충족 가능

rsp+20 = A / rsp + 28 = B 라고 하면

A*B == 0x6AE9BC => 10진수로는 7006652

B^A == 0x12FC => 10진수로는 4860

A/B == 0x4를 만족해야 한다.

 

이는 수기로 하기 어렵기 때문에 코드를 작성해서 해결해야 한다.

 

답은 5678 1234임을 알 수 있다.

'étude > reverse engineering' 카테고리의 다른 글

dreamhack : rev_basic_1  (0) 2023.01.12
dreamhack : rev_basic_0  (0) 2023.01.10
rev_basic_1  (0) 2022.11.02
rev_basic_0  (1) 2022.11.02
writeup__easycrackme1  (0) 2022.10.09