rev-basic-7

if 문부터 천천히 보면 1000번 함수를 봅시다.
0부터 1F 까지 → i 에 대해서
i ^ ROL1 (*(ai + i) , i&7) == byte140003000[i] 일때 문제가 성립합니다
ROL이 뭔지 모르겠구, byte140003000 부터 확인해 보자면
0x52,0xDF,0xB3,0x60,0x0F1,0x8B,0x1C,0xB5,0x57,0x0D1,0x9F,0x38,0x4B,0x29,0xD9,0x26,0x7F,0xC9,0xA3,0x0E9,0x53,0x18,0x4F,0xB8,0x6A,0xCB,0x87,0x58,0x5B,0x39
__ROL1__ 에 대해서 알아보니
*(a1+i) → value, i&7 → count 이고, Rotate Left 인거같다 ㅇㅇ
대충 파이썬으로 구현된 걸 가져와서 사용한다.
def __ROL__(num, count, bits=8): return ((num << count) | (num >> (bits - count))) & ((0b1<<bits) - 1)
Python
a1 이 입력값이니까
wl = [0x52,0xDF,0xB3,0x60,0x0F1,0x8B,0x1C,0xB5,0x57,0x0D1,0x9F,0x38,0x4B,0x29,0xD9,0x26,0x7F,0xC9,0xA3,0x0E9,0x53,0x18,0x4F,0xB8,0x6A,0xCB,0x87,0x58,0x5B,0x39] res = "" def __ROL__(num, count, bits=8): return ((num << count) | (num >> (bits - count))) & ((0b1<<bits) - 1) def __ROR__(num, count, bits=8): return ((num >> count) | (num << (bits - count))) & ((0b1<<bits) - 1) for i in range(0,len(wl)): res += chr(__ROR__(wl[i] ^ i,i&7)) print(res)
Python
이렇게 짜면 나오겠지
Roll_the_left!_Roll_the_right!