python byte vs bytearray
우리가 파이썬으로 pwntools를 다루면서 바이트를 정말 많이 다룬다.
근데 최근에 다음과 같은 상황이 있었다.
data = p.recv() 로 8바이트 ( 주소값 ) 을 받았고 이 주소값에서 3번째 인덱스에 0x25를 xor 해야 하는 상황이었다.
나는 그래서 data[2] 이런식으로 사용하려했는데 오류가 계속 발생했다. 그렇다. 바이트는 인덱스 접근을 하면 int가 나온다.
BYTE VS BYTEARRAY
BYTE
바이트는 우리가 흔히 아는 b”ABCD\x05” 와 같은 데이터이다.
우리는 이 데이터에 슬라이스로 접근을 한다. 따라서 한바이트를 자를려면 BYTE[2:3] 와 같이 접근을 해야한다.
만약 인덱스로 접근을 할려고 하면
C
b = b'ABC'
print(b[2]) # 67 (int, 'C')다음과 같이 int 형으로 바뀌어 버린다.
BYTEARRAY
말 그대로 바이트의 array이다. 근데 바이트 보다 훨씬 개개인의 항목에 접근할 때 편리하다.
슬라이스 접근을 하면 → 잘린 BYTEARRAY가 나오게 되고
인덱스 접근을 하면 → int형으로 나오게 된다.
C
b = bytearray(p64(ret))
b[2] ^= ( randnum & 0xFF )
ret = u64(bytes(b))다음과 같이 접근이 정말 편리하다. 바이트 각각 접근할때 애용하자
바이트 → bytearray() → bytearray
bytearray → bytes() → 바이트