일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 해킹
- 시스템
- 네트워크보안
- Webhaking
- 비박스
- 소프트웨어보안
- 모의해킹
- WarGame
- 리버싱
- 소프트웨어
- dreamhack
- 네트워크
- ftz
- XSS
- CodeEngn
- 워게임
- 알고리즘
- 웹해킹
- System
- 시스템해킹
- hacking
- 순서도
- Web
- TCP
- network
- bee-box
- 웹
- 드림핵
- webhacking
- reversing
- Today
- Total
Without a Break
[Dreamhack] rev-basic-3 본문
문제 파일을 디버거로 실행하면 위와 같이 뜬다.
"correct"가 출력되는 입력값을 찾아야하니 문자열로 가보자
correct가 있는 위치로 이동하면
위와 같은 위치로 이동한다.
어셈블리 코드를 확인해보면 test eax,eax에서 입력값과 정답을 비교하는 것을 확인할 수 있었다.
그 위의 7FF799851000의 위치에 플래그가 있는 것 같으니 이동해보자
rcx(input값)와 7FF799853000의 값을 한 글자씩 18번 비교한다.
7FF799853000의 위치에 정답이 있는 것 같음
7FF799853000의 HEX DUMP는 위와 같다.
24개의 문자열이 있고, 이 문자들로 xor 연산을 통해 입력값과 비교한다.
따라서 HEX 값을 문자열로 변환시키기 위해서는 역연산을 해야한다.
1. (input[i]^i)+(i*2)=str[i] => 기본 연산식
2. (input[i]^i)=str[i]-(i*2) => 양변에 -(i*2) 추가
3. input[i]=(str[i]-(i*2))^i => 양변에 ^i 추가 == 역연산 식
C를 사용해서 코드를 작성해봄
실행시켜봤더니 플래그가 나타났다!
참고
https://mingkang.tistory.com/entry/DreamHack-rev-basic-3-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4
[DreamHack] rev-basic-3 문제 풀이
rev-basic-3 문제 문제는 다음과 같다. 해당 파일을 실행했을 때, Input에 틀린 답을 입력했는지 Wrong이 출력된다. Correct를 출력하기 위해 올바른 답을 찾아보자. 풀이 값을 입력받는 곳까지 실행해준
mingkang.tistory.com
'Reversing > Wargame' 카테고리의 다른 글
[Dreamhack] rev-basic-6 (0) | 2023.08.16 |
---|---|
[Dreamhack] rev-basic-4 (0) | 2023.08.16 |
[Dreamhack] rev-basic-1 (0) | 2023.08.13 |
[Dreamhack] rev-basic-0 (0) | 2023.08.13 |
[CodeEngn] Advance RCE L01 (1) | 2023.05.23 |