s2를 문자로 변환한 뒤 reverse_transform로 복원 후 각 바이트에 대해 니블 스왑(상·하위 4비트 교환) → 짝/홀 인덱스별로 XOR(짝수: 3, 홀수: 2) → 각각 2/-3 보정을 거침
위치는 인덱스 짝수는 뒤에서부터 배치, 홀수는 제자리 배치로 재조합하며 이렇게 역연산을 적용하면 원래 입력 문자열이 나온다
def reverse_transform(s1):
s = [''] * len(s1)
v12 = len(s1)
v10 = 0
for i in range(v12):
if (i & 1) != 0: # 홀수 인덱스
v8 = ord(s1[v10])
v8 = ((v8 >> 4) | (16 * v8)) & 0xFF
v8 ^= 2
v8 -= 3
s[i] = chr(v8)
else: # 짝수 인덱스
v9 = ord(s1[v10])
v9 = ((v9 >> 4) | (16 * v9)) & 0xFF
v9 ^= 3
v9 -= 2
s[v12 - 1 - i] = chr(v9)
v10 += 1
return ''.join(s)
# 주어진 s2를 사용하여 원래 입력 값 s를 찾습니다.
s2 = [
0xC7, 0xA7, 0x37, 0x77, 0x43, 0x37, 0x63, 0x87, 0x63, 0x87,
0x26, 0x47, 0x67, 0x06, 0x63, 0x53, 0x13, 0xE7, 0x26, 0x77,
0x13, 0xB7, 0xE7, 0x77, 0x86, 0x63, 0x37, 0x86, 0x65
]
# s2를 문자열로 변환
s2_str = ''.join(chr(x) for x in s2)
# 원래 입력 값 찾기
original_input = reverse_transform(s2_str)
print(f"Original input: {original_input}")