일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리버싱 입문
- 안드로이드 adb
- 리버싱 초보
- 제주코딩베이스캠프
- 리버싱핵심원리
- 안드로이드 리버싱
- 자바스크립트강의 후기
- 제주ICT
- 안드로이드 모바일 앱 모의해킹
- 드림핵 리버싱 풀이
- 티스토리챌린지
- 자바스크립트 강의 추천
- 리버싱 플래그
- 강의 체험단 1기
- dreamhack reversing
- adb 옵션
- 인프런 강의 추천
- 드림핵 리버싱
- 리버싱 스터디
- 드림핵 플래그
- rev-basic 풀이
- 리버싱
- 리버싱 핵심 원리
- 자바스크립트 강의
- 오블완
- 더오름
- 자바스크립트
- 위니브
- adb
- 안드로이드 adb start-server
- Today
- Total
해보자고
[드림핵]rev-basic-2 본문
# 문제
문제 링크 | https://dreamhack.io/wargame/challenges/16
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.
해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!
1. main 함수 찾기
가장 먼저 main 함수를 찾아주는데, BP만 잘 걸 수 있다면 이제 main 함수는 금방 찾을 수 있다. f9로 쭉 실행하다가 exe 터미널이 활성화 되는 함수에 BP를 걸어준다.
2. 실행 흐름 파악하기
전체적으로 wrong과 correct로 분기하는 로직은 rev-basic-0, 1과 같다.
이제 살펴봐야 할 부분은 test eax, eax 전 무엇을 eax에 담는지, 즉 call cha112.7FF638CE1000을 살펴봐야 한다.
3. 디버깅
call cha112.7FF638CE1000 함수로 들어오면 가장 눈에 띄게 작동하는 부분은 r8+rdx 주소의 값을 edx에 저장하고 edx에서는 이 값을 rcx+rax*4 주소의 값과 비교해주고 있다.
나는 input에 LOVE를 입력했다. 그리고 위의 두 명령어를 실행하면 RDX에는 L이 있는 것으로 보아 r8+rdx 주소의 첫 글자를 edx에 저장해주고, 이 값을 rcx+rax*4 주소의 값과 비교해주는 것 같다.
심지어 비교를 한 후 두 값이 같으면 jmp cha11.7FF638CE1012를 통해 계속계속 비교를 해주는 것 같다. 그렇다면 비교해주는 rcx+rax*4에 저장된 값이 플래그일 것이라고 추측해볼 수 있고 해당 주소로 이동해보자.
확인하고 싶은 주소를 따라가기 위해 해당 명령어를 마우스로 우클릭 -> follow in Dump -> Address: RCX+RAX*4 를 클릭 클릭해주면 된다.
그럼 해당 주소의 dump로 이동을 할 수 있다. 해당 문자열을 모아보면 Comp4re_the_arr4y 플래그가 나오는 것을 확인할 수 있다.
'리버싱' 카테고리의 다른 글
[리버싱] rev-basic-4 (0) | 2024.04.28 |
---|---|
[드림핵]rev-basic-3 (0) | 2024.04.27 |
[크랙미 ] crackme1 (1) | 2024.04.21 |
[드림핵]rev-basic-1 (0) | 2024.04.12 |
[드림핵] rev-basic-0 (0) | 2024.04.11 |