ROL, ROR 질문

def ROL(num, shift):
return ((num << shift) & 0xFF) | (num >> (8 - shift))

def ROR(num, shift):
return (num >> shift) | ((num << (8 - shift)) & 0xFF)

byte_140003000 = [
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, 0x58, 0x39, 0x1E, 0x00
]

flag = ''
for i in range(0x1F):
flag += chr(ROR(byte_140003000[i] ^ i, i & 7&))
print("DH{" + flag + "}")

으로 작성하고 vscode에서 실행해봤습니다.
그런데 right!가 아닌, righD!가 출력되더군요....

  1. 코드에서 잘못 구현한 부분이 있을까요?
  2. 추가로, 출력 값이 DH{} 꼴로 나와야 하는데, DH{ 꼴로 나옵니다. (마지막 '}' 가 출력되질 않습니다. vscode 상의 문제일까요?
#reversing
작성자 정보
답변 1
kimht
공부벌레

byte_14000300 리스트에서 원소 하나가 잘못된 값이어서 t 대신 D가 나오는 것으로 보입니다.

...
0x6A, 0xCB, 0x87, 0x58, 0x58, 0x39, 0x1E, 0x00
]

위에서 0x58 부분이 0x5b 여야 계산 결과 문자 t가 나옵니다.


}를 출력하지 않는 이유에 대해서는,

...
0x6A, 0xCB, 0x87, 0x58, 0x58, 0x39, 0x1E, 0x00
]

위에서 0x1E 부분이 계산 결과 널바이트(\x00)가 됩니다.

따라서 flag 문자열 마지막에 널바이트(\x00)가 들어가게 되는데 터미널 환경에 따라 뒤에 존재하는 문자를 출력하지 않을 수 있습니다.

2023.03.20. 15:16
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기