[Dreamhack] rev-basic-7

pandas·2024년 9월 22일
0

Dreamhack

목록 보기
3/14

00. 문제 파일

01. 바이너리 분석


main함수에서 일치하는지 확인하는 함수
if문을 역연산 하면 된다

일단 byte_140003000에서 hex값을 빼오자


byte_140003000를 더블클릭, shift+Ehex값을 가져올 수 있다

__ROL1__을 모르겠다

모든 bits이 왼쪽으로 밀려(shift)난다
왼쪽에 위치한 가장 높은 bit가 Carry flag와 가장 낮은 오른쪽 마지막 bit에 복사된다.

(출처: https://whoishoo.tistory.com/136 [HOOAI:티스토리])

python으로 구현하면

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

로 표현할 수 있다

그럼 이제 Brute Force해주면 된다

02. 역연산

result = [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]

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

ans = list()

for i in range(0x1F):
    for j in range(0x1, 0xFF):
        if i^rol(j, i&7) == result[i]:
            ans.append(j)

answer = "".join([chr(i) for i in ans])

print(answer)

03. Review

__ROL1__의 존재를 몰라서 구글링을 했다
Bit Shift와 뭐가 다른지 잘 몰라서 찾느라 시간을 조금 허비했다
ROL을 알면 2단계? 치고 굉장히 쉬운 문제였다

profile
KDMHS 23 WP

0개의 댓글

관련 채용 정보