서브웨이

dreamhack rev-basic-5 풀이 본문

Reverse Engineering/dreamhack

dreamhack rev-basic-5 풀이

샌드위치메이커 2021. 7. 28. 13:26

자 다음문제를 풀어봅시다.

 

일단 실행시켜봅시다.

일단 아무거나 입력해놓고 검증하는 부분을 여느때와 같이 찾아봅시다.

일단 참조된 문자열을 검색하고 거기서 검증 부분을 찾습니다.

그럼 중단점이 걸린 저 부분이 검증하는 함수로 이동하는 부분이 됩니다.

 

저 함수로 들어가봅시다.

뭐 딱히 길진 않습니다.

 

한번 분석해보면

이렇게 정리됩니다.

암호문은 다음과 같습니다.

 

이걸 다시 한번 요약하면

str[i] + str[i+1] == enc[i]

이렇게 암호화가 되는것을 알 수 있습니다.

 

자 그럼 올바른 입력값을 찾아야하는데, 처음부터 찾는건 경우의 수가 많아져서 거의 불가능합니다.

하지만 마지막 암호문이 00이므로 마지막 평문도 00이라는것을 알 수 있습니다.

그럼 마지막에서 두번째 평문은 당연히 마지막에서 두번째 암호문과 같겠죠?

그럼 이제부터 뒤에서부터 차례대로 구해나가면 됩니다.

구하는 코드는 다음과 같습니다.

encrypted = [0xAD, 0xD8, 0xCB, 0xCB, 0x9D, 0x97, 0xCB, 0xC4, 0x92, 0xA1, 0xD2, 0xD7, 0xD2, 0xD6, 0xA8, 0xA5, 0xDC, 0xC7, 0xAD, 0xA3, 0xA1, 0x98, 0x4C, 0x00]
latest = 0
flag = []

for i in range(23, -1, -1):
    latest = encrypted[i] - latest
    flag.append(chr(latest))

flag.reverse()
print(''.join(flag))

결과는 다음과 같습니다.

'Reverse Engineering > dreamhack' 카테고리의 다른 글

dreamhack rev-basic-7 풀이  (0) 2021.07.28
dreamhack rev-basic-6 풀이  (0) 2021.07.28
dreamhack rev-basic-4 풀이  (0) 2021.07.28
dreamhack rev-basic-3 풀이  (0) 2021.07.21
dreamhack rev-basic-2 풀이  (0) 2021.07.21
Comments