[Rev] Struct reversing 문제 풀이

KBC·2024년 9월 4일

리버싱

목록 보기
11/11

5. ex shuffle_connection

IDA로 열어보면

요런 함수가 나온다. 뭐 길게 헤멜것 없이 요약하면 다음과 같다

말로는 shuffle 이기는 한데 정작 나오는 결과는 flag에 Reverse를 취한 것일 뿐이다.

따라서 아래와 같이 나오는 문자열이 고정된다


그러면 이런식으로 flag의 format String을 이용해 Random한 XOR int 배열을 알아낼 수 있다.
따라서 서버사이드에 요청을 보내서 암호화된 플래그를 받아 위의 방식으로 Random한 int들을 알아내고 해당 값으로 복호화를 진행한다.

hex_string = ""

result = [f"0x{hex_string[i:i+2]}" for i in range(0, len(hex_string), 2)]
target_list = [int(result[-2], 16), int(result[-1], 16), int(result[-5], 16), int(result[-4], 16), int(result[-3], 16)]
string_list = ["C", "K", "{", "F", "T"]

find_list = []
index_first = 0
for j in target_list:
    index = 0
    for i in range(255):
        if (j ^ i) == ord(string_list[index_first]):
            find_list.append(i)
        index += 1
    index_first += 1
decoded_list = []
temp_idx = 0
for i in result:
    decoded_list.append(chr(int(i, 16) ^ find_list[temp_idx % 5]))
    temp_idx += 1

index = -1
for i in decoded_list:
    print(decoded_list[index], end="")
    index -= 1

KCTF{w0w_you_flnd_th3_l0c4tlon_0f_flag_format!}

profile
AI, Security

0개의 댓글