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 출력 성공!