일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- dreamhack reversing
- 제주코딩베이스캠프
- adb 옵션
- adb
- 안드로이드 리버싱
- 리버싱 핵심 원리
- 안드로이드 adb
- 자바스크립트강의 후기
- 리버싱
- 제주ICT
- 안드로이드 adb start-server
- 리버싱 초보
- 드림핵 리버싱 풀이
- 위니브
- 자바스크립트 강의 추천
- 드림핵 플래그
- 자바스크립트
- 드림핵 리버싱
- 리버싱핵심원리
- rev-basic 풀이
- 더오름
- 리버싱 스터디
- 리버싱 입문
- 티스토리챌린지
- 안드로이드 모바일 앱 모의해킹
- 자바스크립트 강의
- 리버싱 플래그
- 강의 체험단 1기
- 오블완
- 인프런 강의 추천
- Today
- Total
해보자고
[드림핵]rev-basic-1 본문
# 문제
문제 링크 | https://dreamhack.io/wargame/challenges/15
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.
해당 바이너리를 분석하여 correct를 출력하는 입력값을 알아내세요.
1. main 함수 찾기
rev-basic-0 문제와 마찬가지로 f8로 쭉 코드를 진행하면서 input : 문자열이 활성화되는 시점에 BP를 걸어 main 함수를 찾아주었다.
2. 디버깅
input 값으로 ABC를 먼저 입력해주고, BP를 걸어둔 Call 함수를 살펴보기로 하였다.(call 함수 다음 test도 eax 값을 확인하여 분기해주고 있기 때문에)
차례대로 rcx(ABC가 저장되어 있다.)의 값을 rsp+8 주소에 넣어준다.
[rcx + rax]의 주소의 내용을 eax에 넣어주면 RAX에는 A가 들어가게 된다.
그리고 이런식으로 eax의값과 cmp 값의 문자열을 비교해주는데 같으면 계속해서 문제에서 지정해둔 문자열과 비교하고, 한 번이라도 같지 않으면 jmp chall1.7FF69197128E 를 통해 ret로 이동하게 되고 해당 함수는 종료된다.
특히 문제가 될 수 있는 부분은 jmp chall1.7FF69197128E 를 통해 곧바로 ret로 이동할 경우 mov eax,1 을 거치지 못해 해당 함수가 종료되면 eax는 0이 된다는 것이다.
이게 왜 문제..? 라고 생각할 수 있지만 이 함수 뒤에 곧바로 test eax, eax로 eax의 값이 0인지 아닌지를 확인하고 correct와 wrong으로 분기해주기 때문에 eax는 0 이외의 값이 나와야 한다.
따라서 mov eax, 1을 무조건 거쳐야 하고 따라서 cmp로 비교하는 모든 문자열과 나의 input 값이 같아야 한다.
그 비교하는 문자열은 주석에 바로 보여지고 해당 값들을 모두 합쳐보면 Compar3_the_ch4ract3r 이다.
참고자료:
https://m.blog.naver.com/stop2y/221049321800
'리버싱' 카테고리의 다른 글
[리버싱] rev-basic-4 (0) | 2024.04.28 |
---|---|
[드림핵]rev-basic-3 (0) | 2024.04.27 |
[드림핵]rev-basic-2 (0) | 2024.04.27 |
[크랙미 ] crackme1 (1) | 2024.04.21 |
[드림핵] rev-basic-0 (0) | 2024.04.11 |