[HNCTF 2022 WEEK2]getflag-入土为安的二十一天

难点读程序,写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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值