또 뭐하지
[Dreamhack] rev-basic-8 본문
728x90
풀이
main 함수이다. sub_140001000 함수를 살펴봐야할 것 같다.
a1에 -5를 곱한 값이 byte_140003000의 값과 일치하면 된다. 그런데 여기서 unsigned 값을 사용하기 때문에 쉽게 구할 수 는 없을 것 같다.
byte_140003000 값을 얻어오자.
a = "AC F3 0C 25 A3 10 B7 25 16 C6 B7 BC 07 25 02 D5 C6 11 07 C5 00 00 00 00 00 00 00 00 00 00 00 00"
a = a.split()[:21]
a = [int(x, 16) for x in a]
tmp = []
for t in a:
for x in range(256):
if (x * 251) % 256 == t:
tmp.append(x)
break
for i in range(21):
print(chr(tmp[i]),end='')
modular inverse 값을 얻어서 어찌저찌하면 될 것 같지만 일단 확실한 전수조사를 해보는 코드를 작성해봤다. 여기서 -5는 %256상에서 251이므로 그 값과 곱하여 t가 되는 x값을 구하는 코드를 작성했다.
파이썬 코드를 실행시켜보면 이와 같은 결과가 나온다.
파일을 실행해 확인해보면 맞는 값인 것을 확인할 수 있다.
** 모듈러 역수를 이용해서 구하는 코드
tmp = []
inv = pow(-5, -1, 256)
for t in a:
tmp.append((t*inv)%256)
for i in range(21):
print(chr(tmp[i]),end='')
'Write-up > Reversing' 카테고리의 다른 글
[Dreamhack] secure-mail (0) | 2024.05.20 |
---|---|
[Dreamhack] rev-basic-9 (1) | 2024.05.18 |
[Dreamhack] rev-basic-7 (0) | 2024.05.14 |
[Dreamhack] rev-basic-6 (0) | 2024.05.14 |
[Dreamhack] rev-basic-5 (0) | 2024.05.14 |