Reversing Basic Challenge #5
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요! 획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요. 예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}
sub_140001000 함수

- 입력된 문자열이 인자로 전달되어 a1에 저장됨.
- 반복문 0x18 = 24번 반복
- byte_140003000 배열 값

- AD D8 CB CB 9D 97 CB C4 92 A1 D2 D7 D2 D6 A8 A5 DC C7 AD A3 A1 98 4C → 23개
마지막 00
AD D8 CB CB 9D 97 CB C4 92 A1 D2 D7 D2 D6 A8 A5 DC C7 AD A3 A1 98 4C 00→ 총 24개
- if 조건문 → a1[i+1] + a1[i]값이 byte_140003000 배열 값과 동일하면 1 리턴함.
a1 구하기
- a1[i+1] + a1[i] = byte_140003000[i]
- → a1[i] = byte_140003000[i] - a1[i+1]
- 마지막이 0이므로 뒤에서부터 하나씩 구할 수 있을 것으로 보인다.
#include<stdio.h>
int main(){
int byte[] = {
0xAD, 0xD8, 0xCB, 0xCB, 0x9D,
0x97, 0xCB, 0xC4, 0x92, 0xA1,
0xD2, 0xD7, 0xD2, 0xD6, 0xA8,
0xA5, 0xDC, 0xC7, 0xAD, 0xA3,
0xA1, 0x98, 0x4C, 0x0
};
int input[24];
int last = 0;
int i;
for (i=23 ; 0<=i ; i--){
last = byte[i] - last;
input[i] = last;
}
printf("Flag is DH{");
for (i=0 ; i <24 ; i++){
printf("%c", input[i]);
}
printf("}");
return 0;
}

'Reversing > Dreamhack : Reverse Engineering' 카테고리의 다른 글
| [Dreamhack] rev-basic-7 (0) | 2025.04.21 |
|---|---|
| [Dreamhack] rev-basic-6 (0) | 2025.04.21 |
| [Dreamhack] rev-basic-4 (0) | 2025.04.21 |
| [Dreamhack] rev-basic-3 (0) | 2025.04.21 |
| [Dreamhack] rev-basic-2 (0) | 2025.04.21 |