rev-basic-5 풀이

2021. 11. 3. 15:44Dreamhack Wargame

728x90

문제 제목
문제 정보
main()
sub_140001000()
byte_140003000

rev-basic-4 문제에서 그랬던 것처럼 byte_140003000안에 들어있는 16진수들로 char형 배열을 만들어줍니다.

 

그리고 sub_140001000() 함수의 if문 조건식을 보겠습니다.

저번 문제와 동일하게 조건식을 통과하면 Correct 판정이 되는 형식입니다.

 

이번 문제는 바로 식이 나오지 않아서 직접 배열을 그려가며 풀었습니다

 

5 4 8 3 2 1

위와 같은 배열이 있을 때 각 배열의 값은 아래와 같을 것입니다.

(맨 마지막 인덱스는 0)

 

1=a[5]+0
2=a[4]+a[5]
3=a[3]+a[4]
8=a[2]+a[3]
4=a[1]+a[2]
5=a[0]+a[1]

 

이렇게 됐을 때 뒤부터 차례대로 계산을 하게 되면 사용자가 입력한 배열인 a를 알 수 있게 됩니다.

주어진 Hex로 예시를 들어보자면 0xA1-(0x98-(0x4C-0x00))와 같은 식으로 뒤부터 뺄셈을 하면 됩니다.

이제 이를 코드로 구현해보겠습니다.

 

#include<cstdio>
#include<iostream>
using namespace std;

// a1[i+1]+a[i]가 arr랑 같으면 통과 -> flag 
char flag[24]={0xAD,0xD8,0xCB,0xCB,0x9D,0x97,0xCB,0xC4,0x92,0xA1,0xD2,0xD7,0xD2,0xD6,0xA8,0xA5,0xDC,0xC7,0xAD,0xA3,0xA1,0x98,0x4C,0x00};
char arr[24];//사용자 입력 배열 
//플래그는 23글자 

int main(){
	for(int i=0;i<24;i++){
		printf("%c",flag[i]);
	}
	cout<<endl;
	for(int i=0;i<23;i++){
		arr[23-i-1]=flag[23-i-1]-arr[23-i];
	}
	for(int i=0;i<24;i++){
		printf("%c",arr[i]);
	}
}

FLAG 획득 완료

얻은 FLAG를 DH{}로 감싸서 제출해보겠습니다.

 

문제 풀이 성공

728x90

'Dreamhack Wargame' 카테고리의 다른 글

rev-basic-7 풀이  (0) 2021.11.10
rev-basic-6 풀이  (0) 2021.11.03
rev-basic-4 풀이  (0) 2021.10.29
rev-basic-3 풀이  (0) 2021.10.28
rev-basic-2 풀이  (0) 2021.10.28