서브웨이

dreamhack rev-basic-7 풀이 본문

Reverse Engineering/dreamhack

dreamhack rev-basic-7 풀이

샌드위치메이커 2021. 7. 28. 14:07

리버싱 기초 마지막 문제입니다.

 

파일을 실행합시다.

대충 입력하고 검증하는 부분을 찾습니다.

여기서

이런 검증하는 부분을 찾을 수 있습니다.

 

그럼 중단점이 걸린 검증하는 함수로 들어가봅시다.

조금 길어보입니다.

대충 정리해보면

이렇습니다.

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

 

일단 rol이 뭔지는 다음 링크를 확인해보시면됩니다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sol9501&logNo=70091168321 

 

|정수 연산 ①| 시프트와 회전 명령어 및 응용

|정수 연산 1| 시프트와 회전 명령어 및 응용 목표 : 시프트 연산의 기본적이 사용법과 응용 및 각 연산이 ...

blog.naver.com

 

정리하자면 다음과 같은 식이 됩니다.

(p[i] rol (i & 7)) ^ i == e[i]

그럼 코드를 짜 봅시다.

def rol(x, n):
    shiftBit = x << n
    shiftBit &= 255
    carryBit = x >> 8 - n
    return shiftBit | carryBit


def guess(c, i):
    for j in range(33, 128):
        if rol(j, (i & 7)) ^ i == c:
            print(chr(j), end='')
            break


encrypted = [0x52, 0xDF, 0xB3, 0x60, 0xF1, 0x8B, 0x1C, 0xB5, 0x57, 0xD1, 0x9F, 0x38, 0x4B, 0x29, 0xD9, 0x26, 0x7F, 0xC9, 0xA3, 0xE9, 0x53, 0x18, 0x4F, 0xB8, 0x6A, 0xCB, 0x87, 0x58, 0x5B, 0x39, 0x1E]

for i in range(0, 31):
    guess(encrypted[i], i)

rol 함수는 다음 블로그에서 가져다 썼습니다.

https://hacking-ai.tistory.com/68

 

어셈블리 ROL, ROR 코드 구현

리버싱 문제를 풀다가 ROL, ROR이 나왔는데, 기드라의 경우 디컴파일 결과가 단지 >>와 같이 쉬프트 연산만 수행하는 방식으로 나오는 문제를 겪었다. 따라서, 이를 해결하기 위해 파이썬으로 ROL, R

hacking-ai.tistory.com

끝.

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

dreamhack rev-basic-6 풀이  (0) 2021.07.28
dreamhack rev-basic-5 풀이  (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