또 뭐하지

[Dreamhack] rev-basic-8 본문

Write-up/Reversing

[Dreamhack] rev-basic-8

mameul 2024. 5. 14. 01:47
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