解压得到字符串 4nXna/V7t2LpdLI44mn0fQ==
使用python尝试base64解码结果为
b'xe2uxe7kxf5{xb7bxe9txb28xe2ixf4}'
这样可能不够直观,将奇数位的16进制字符删去后为:
?u?k?{?b?t?8?i?}
可以看到偶数位的数都是正确的。所以再输出ASCII码看一下
226,117,231,107,245,123,183,98,233,116,178,56,226,105,244,125
可以看到奇数位的数ASCII值很大,这显然不正确。结合题目 7+1 = 8,一个字符也是8bit。可打印的字符的ASCII范围在125以内,转换为二进制也只需要7位,对于大于128的数,将最高位置零后,则刚好是可打印的字符。具体演示如下:
例如第一位为226,转换为二进制数后为 1110 0010
将最高位(第一位)置0后为 0110 0010
再转换回来十进制为 98
对应的字符为 'b'
那么现在可以理解作者的意图了。将7bit的字符转换为8bit,则是在其最高位进行 +1和+0。因为+0后值不变,所以偶数位的值是正常的。exp如下:
from base64 import b64decode
enc = '4nXna/V7t2LpdLI44mn0fQ=='
dec = b64decode(enc)
flag = ''
for i in range(len(dec)):
if i % 2 == 0: #奇数位的数下标为偶数 flag += chr(dec[i] & 0x7f) # 0x7f : 0111 1111
else:
flag += chr(dec[i]) print(flag)
#bugku{7bit28bit}
原文始发于微信公众号(CSJH网络安全团队):Bugku--7+1+0--WP
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论