bugku_进制转换解题报告

本文解析了一串复杂的前缀编码,通过八进制、十进制、二进制和十六进制的转换,揭示了其实际含义并展示了如何将其转化为可读的字符串。最终解密出的旗标为flag{1e4bf81a6394de5abc005ac6e39a387b}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击文本内容如下:

d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101
b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20
b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141
d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102
d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001
d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65
b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125
x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64
d32 o164 b1101001 x6d o145 x7e

我们发现有b、o、d、x这四种前缀,百度得:

八进制(逢八进一),Octal,缩写OCT或O,一种以8为基数的计数法,用O表示,为了不与数字0混淆,有时也用Q来表示八进制数。

十进制(逢十进一),英文为Decimal System,缩写Dec或D,来源于希腊文Decem,用D表示。

十六进制(逢十六进一),英文名称:Hexadecimal,是计算机中数据的一种表示方法。它由0-9,A-F组成,字母不区分大小写,前缀用0x表示。

二进制(逢二进一),Binary,用b表示。

D:十进制数Decima
B:二进制数Binary
0x(H):十六进制数Hexadecimal
O:八进制数Octal

因此,我们将这些统一转化为十六进制表示,然后转为字符串就可以得到答案。

这里贴上大佬的进制转换代码脚本:

#! /usr/bin/env python
#coding=utf-8
s=["d87","x65","x6c","x63","o157","d109","o145","b100000","d116","b1101111","o40","x6b","b1100101","b1101100","o141","d105","x62","d101","b1101001","d46","o40","d71","x69","d118","x65","x20","b1111001","o157","b1110101","d32","o141","d32","d102","o154","x61","x67","b100000","o141","d115","b100000","b1100001","d32","x67","o151","x66","d116","b101110","b100000","d32","d102","d108","d97","o147","d123","x31","b1100101","b110100","d98","d102","b111000","d49","b1100001","d54","b110011","x39","o64","o144","o145","d53","x61","b1100010","b1100011","o60","d48","o65","b1100001","x63","b110110","d101","o63","b111001","d97","d51","o70","d55","b1100010","d125","x20","b101110","x20","b1001000","d97","d118","o145","x20","d97","o40","d103","d111","d111","x64","d32","o164","b1101001","x6d","o145","x7e"]
s1=""
t=""
t1=""
for i in s:
    s1=i
    for j in range(1):
        if s1[0:1]=='d':
            t=str(hex(int(s1[1:])))
            t=t[2:]+" "
            t1=t1+t
        if s1[0:1]=='x':
            t=s1[1:]+" "
            t1=t1+t
        if s1[0:1]=='o':
            t=str(hex(int(s1[1:],8)))
            t=t[2:]+" "
            t1=t1+t            
        if s1[0:1]=='b':
            t=str(hex(int(s1[1:],2)))
            t=t[2:]+" "
            t1=t1+t
print t1   

运行得到下列16进制数串:
在这里插入图片描述
我们将这一串十六进制数转换成字符串的形式可得到:

Welcome to kelaibei.
Give you a flag as a gift.flag{1e4bf81a6394de5abc005ac6e39a387b} . Have a good time~

所以flag即:

flag{1e4bf81a6394de5abc005ac6e39a387b}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值