难点读程序,写exp
*(unsigned __int8 *)(i + a1) >> 4
:
- 这将字节
i + a1
右移 4 位,提取出字节的高 4 位。
*(_BYTE *)(i + a1)
:
- 这获取原字节的低 4 位(即,
i + a1
位置的字节的低 4 位)。
(16 * *(_BYTE *)(i + a1))
:
- 这是将低 4 位的值乘以 16,用于计算位权值。
(unsigned __int8)((*(unsigned __int8 *)(i + a1) >> 4) | (16 * *(_BYTE *)(i + a1)))
:
- 高 4 位和低 4 位相加得到最终的字符值
def convert_to_string(a): result = [] for i in range(len(a)): byte_value = a[i] high_nibble = byte_value >> 4 low_nibble = byte_value & 0x0F char_value = high_nibble | (low_nibble * 16) result.append(chr(char_value)) return ''.join(result) # 输入数组 a = [228, 53, 53, 52, 69, 100, 183, 212, 100, 52, 245, 7, 39, 3, 118, 39, 67, 214, 214, 150, 230, 118, 245, 150, 55, 245, 22, 119, 86, 55, 3, 214, 51, 215] # 调用函数并输出结果 output_string = convert_to_string(a) print(output_string) //NSSCTF{MFC_pr0gr4mming_is_awes0m3}