보안/리버싱

reversing.kr - Easy ELF

병뚜 2024. 8. 26. 08:44

1. 기드라 디컴파일

 

- scanf 함수를 보면, 입력값이 &DAT_0804a020 위치에 저장됨

- FUN_08048451() 함수 내부에서 scanf로 입력받은 위치를 검사하고 있음.

 

2. 조건

 

- DAT_0804a020 == 0x78
- DAT_0804a021 == '1'
- DAT_0804a022 == 0x7c
- DAT_0804a023 == 0xdd
- DAT_0804a024 == 'X'
- DAT_0804a025 == '\0'

올바른 입력값을 얻기 위해, 각 문자에 XOR 해주면 되겠다.

* XOR의 특징 이용

 

# input 값을 구하기
result = [0x78, '1', 0x7c, 0xdd, 'X', '\0']
input = []

input.append(result[0] ^ 0x34)
input.append(ord(result[1]))
input.append(result[2] ^ 0x32)
input.append(result[3] ^ 0x88)
input.append(ord(result[4]))  

input2ascii = ''.join(chr(i) for i in input)

print(input2ascii)

 

=> L1NUX