| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- programmers
- TryHackMe
- AWS 보안 사고 사례 모음
- reversing
- reversing.kr
- IAM Federation
- dreamhack
- 네트워크
- Amazon S3
- python
- AWS 사고 사례 분석
- 운영체제
- AWS 3 Tier Architecture
- AWS 아키텍처 분석
- 프로그래머스
- AWS IAM Role
- operating system
- C
- AWS 인프라 분석
- 드림핵
- AWS
- terraform
- AWS 침해 사고 사례 분석
- AWS 침해사고 사례 분석
- network
- 리버싱
- AWS Active Directory
- 침입 차단 시스템(IPS)
- AWS 인프라 아키텍처
- AWS 보안 아키텍처 분석
- Today
- Total
lhywk 님의 블로그
[Dreamhack] rev-basic-3 본문
문제
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.
해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!
문제 풀이
먼저 exe 파일을 실행해볼게요.

실행해보면 input에 값을 받고 조건을 검사하고 Wrong을 출력하네요.
이걸 correct가 뜨게 만드는 입력값을 찾는게 문제에요.

main을 바로 디컴파일 해볼게요.
char형 배열 v4에 256개의 원소가 들어갈수있는 배열이 있고
memset으로 0으로 초기화하네요.
그 다음 v4에 입력값을 받고 sub_140001000에 인자로 주고 반환값이 True라면 Correct를 출력해줘요.

그럼 이제 조건문의 함수인 sub_140001000을 디컴파일 해볼게요.
for문을 24회 반복하면서 if문을 체크해요.
그런데 반복문안에 if문이 조건에 맞으면 return 0;이기 때문에 항상 조건이 성립하지 않아야 해요.

해당 배열을 확인해보면 49h~ dup(0)의 값을 가지고 있네요.

Hex view로 정렬되게 확인할수 있어요.

Shift+E를 눌러 Export data를 해서 해당 값을 편하게 복사 붙여넣기 할게요.
단축키가 설정이 안되어있다면 Options -> Shortcuts 에서 Export data 단축키를 설정해주세요.
data = bytearray([0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D, 0x45])
for i in range(24):
tmp = data[i] - 2 * i
tmp = tmp % 256
tmp = tmp ^ i
print(chr(tmp), end='')
플래그를 찾기 위해 역연산을 진행해볼게요.
24바이트의 입력값이 a1일때 (i ^ *(unsigned __int8 *)(a1 + i)) + 2 * i)의 결과가 익스포트한 값과 일치해야 합니다.
*(unsigned __int8 *)(a1 + i)은 a1[i]으로 해석이 되고 양변에서 2 * i를 빼주고 i로 XOR 연산을 해주면 역연산이 마무리 되요.
해당 코드는 이 로직을 구현한 파이썬 코드에요.

역연산이 알맞게 됐다면 플래그를 획득합니다.
'Reversing > Dreamhack' 카테고리의 다른 글
| [Dreamhack] rev-basic-4 (1) | 2025.12.16 |
|---|---|
| [Dreamhack] WinDbg Exercise 2 (0) | 2025.12.15 |
| [Dreamhack] WinDbg Exercise 1 (0) | 2025.12.15 |
| [Dreamhack] patch (1) | 2025.12.13 |
| [Dreamhack] randzzz (0) | 2025.11.21 |