옳은 숫자를 입력해야 답이 나옴을 알 수 있다.
답의 입력을 기준으로 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 |