Writeup

[Dreamhack] 리버싱 rev-basic-6 Writeup

이둥둥 2025. 2. 28. 20:38

 

드림핵의 6번째 리버싱 워게임 문제다

앞 시리즈와 동일하게 인풋을 입력하면 Correct/Wrong이 출력되고

Correct를 출력하는 플래그 값을 찾으면 된다

 

 

대략 위와 같은 구조의 프로그램

디컴파일해서 살펴보자

 

 

ㄴㄹ

플래그를 찾는 함수와 조건을 찾았다

위의 함수를 간편하게 바꿔보자

byte_140003020[*(unsigned __int8 *)(a1 + i)] != byte_140003000[i]

byte_140003020[a1[i]]!= byte_140003000[i]

 

첫 번째 배열에 있는 요소와 두 번째 배열 요소가 일치하면 인덱스를 플래그에 추가해서

chr() 이렇게 변환하면 되겠다

 

편의를 위해서 배열 이름은 f1[a1[i]] = f2[i] 이렇게 바꿔서 코드를 짜겠음

일단 두 배열의 요소들을 보면 Hex 값 수십개가 있다

 

 

각각 f1, f2라는 배열에 넣고 중첩 루프문을 짰음

두 배열의 값을 비교하다가 일치하는 요소가 있으면 해당 인덱스를 result에 넣음

그리고 result 값을 chr로 변환하고 플래그가 된다

 

 

correct 출력 성공!