main
함수에서 일치하는지 확인하는 함수
if
문을 역연산 하면 된다
일단 byte_140003000
에서 hex
값을 빼오자
byte_140003000
를 더블클릭, shift+E
로 hex
값을 가져올 수 있다
__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
해주면 된다
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)
__ROL1__
의 존재를 몰라서 구글링을 했다
Bit Shift
와 뭐가 다른지 잘 몰라서 찾느라 시간을 조금 허비했다
ROL
을 알면 2단계? 치고 굉장히 쉬운 문제였다