Kilkat

[dreamhack] rev-basic-3 본문

Security/reverse engineering

[dreamhack] rev-basic-3

KimKwangWoon 2024. 12. 10. 23:30

ida로 f5를 눌러 디컴파일을 수행하면 다음과 같이 main function의 코드를 확인할 수 있음

 

프로그램 동작 로직을 분석하면 다음과 같음

1. 사용자 입력값 대기

2. 사용자 입력값 비교

3. Correct 출력 or Wrong 출력

 

if구문에서 사용자 입력값과 비교를 하는 function(sub_7FF62D5D1000)을 따라가보면 다음과 같음

사용자 입력값과 XOR연산을 통해 값을 byte_7FF62D5D3000[i] 값과 비교하고 있음

 

byte_7FF62D5D3000을 확인해보면 49h ~ dup(0)까지 데이터가 포함되어 있는 것을 확인 가능함

 

XOR의 특성인 a ^(xor) b = c, c ^(xor) b = a 해당 내용이 성립하는 것을 활용하여 복호화 시킬 수 있음

(byte_7FF62D5D3000[i] - 2 * i) ^ i != a1 + i

arr = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D, 0x45]

for i in range(len(arr)) :
    flag = (arr[i] - (2 * i)) ^ i
    print(chr(flag), end = '')

 

성공!

Comments