Dreamhack - rev-basic-3

m0ng·2025년 4월 9일

[Reversing] rev-basic-3 문제풀이


문제가 요구하는건 rev-basic-2랑 비슷한거 같다.
일단 이번엔 ida를 이용을 해서 풀어볼려고 한다.

분석

ida는 파일 자체에 디컴파일 기능이 있다

Input 문자열을 출력하고 > 사용자로부터 입력을 받아서 v4에 저장
입력값을 함수에 넣고 맞고 틀린지 결과가 나온다.
일단 sub_7FF77D761000 주소로 들어가보자

주소를 따라 가보니 7FF77D763000이라는 배열이 존재하고 이 부분을 HexView로 확인해보면 문자열값이 나온다.

디컴파일한 검증 함수를 보면

int i;

for (i = 0; i < 24; ++i) {
    if ( byte_140003000[i] != (i ^ input[i]) + 2 * i )
        return 0;
}
return 1;
입력값은 24바이트여야 함.

각 문자는 아래 수식을 만족해야 함:
byte_140003000[i] == (입력[i] ^ i) + 2 * i

→ 이걸 역으로 풀면:

입력[i] = (byte_140003000[i] - 2 * i) ^ i

결과

그래서 이걸 푸는 계산을 파이썬으로 하면


이렇게 flag가 출력된다.

0개의 댓글