일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 제주코딩베이스캠프
- dreamhack reversing
- 파이썬
- 위니브
- 간단한 깃허브 블로그
- 티스토리챌린지
- 리버싱 플래그
- 인프런 강의 추천
- 자바스크립트 강의
- 안드로이드 모바일 앱 모의해킹
- 리버싱
- 오블완
- adb 옵션
- 드림핵 플래그
- 안드로이드 adb start-server
- 깃허브 포트폴리오
- 깃허브 블로그 만들기
- 안드로이드 adb
- 인프런 파이썬 강의
- 깃허브 블로그
- 드림핵 리버싱
- 안드로이드 리버싱
- 웃긴 파이썬
- 제주ICT
- 더오름
- 자바스크립트
- 강의 체험단 1기
- 인프런 깃허브 강의
- 잔디 심기
- adb
- Today
- Total
해보자고
[드림핵]rev-basic-2 본문
# 문제
문제 링크 | https://dreamhack.io/wargame/challenges/16
rev-basic-2
Reversing Basic Challenge #2 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출
dreamhack.io
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 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 (1) | 2024.04.27 |
[크랙미 ] crackme1 (1) | 2024.04.21 |
[드림핵]rev-basic-1 (1) | 2024.04.12 |
[드림핵] rev-basic-0 (0) | 2024.04.11 |