Writeup
[Dreamhack] 리버싱 rev-basic-3 Writeup
이둥둥
2025. 2. 20. 21:48
IDA에 실행파일을 로드해서 흐름을 살펴보면
Input: 여기서 인풋을 받고 검증을 통해 correct, wrong을 출력한다
Correct를 출력하는 조건이 뭔지 loc_140001193을 살펴보자
sub_140001000에서 인풋을 비교한다
더블클릭해서 들어가니까 수식이 있다
일단 byte_140003000에 hex 값으로 힌트를 찾을 수 있는지 보면
뭔가 hex 값이 있긴 한데 플래그로 보이는 문자는 아닌 것 같다
위에 나온 수식이 유일한 해결책인 것 같아서 다시 분석해 보겠음
arr[i] != (i ^ *(unsigned __int8 *)(a1 + i)) + 2 * i
hex_value값을 이미 알고 있으니까 역으로 연산하는 식을 구하면 되겠다
arr[i] != (i ^ a1[i]) + 2 * i
arr[i] = (i ^ a1[i]) + 2 * i
arr[i]-2 * i = (i ^ a1[i])
a1[i]=(arr[i]-2 * i)^i
arr = [73, 96, 103, 116, 99, 103, 66, 102, 128, 120, 105, 105, 123, 153, 109, 136, 104, 148, 159, 141, 77, 165, 157, 69]
for i in range(24):
print(chr((arr[i] - 2 * i) ^ i), end="")
이거 코드 짜느라 30분 넘게 걸린 듯..ㅎㅎ
결과적으로 성공!
내가 리버싱 하면서 이런 말을 하게 될 줄은 몰랐는데..
꽤 재밌는 것 같다
