BUUCTF---传感器
题目
5555555595555A65556AA696AA6666666955
这是某压力传感器无线数据包解调后但未解码的报文(hex)
已知其ID为0xFED31F,请继续将报文完整解码,提交hex。
tips:flag是flag{破译出的明文}
提示1:曼联
解题
根据提示曼联,查询获取得知是曼彻斯特编码
曼彻斯特编码
曼彻斯特编码(Manchester Encoding),也叫做相位编码( Phase Encode,简写PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。它在以太网媒介系统中的应用属于数据通信中的两种位同步方法里的自同步法(另一种是外同步法),即接收方利用包含有同步信号的特殊编码从信号自身提取同步信号来锁定自己的时钟脉冲频率,达到同步目的。
IEEE 802.4(令牌总线)和低速版的IEEE 802.3(以太网)中规定, 按照这样的说法, 01电平跳变表示1, 10的电平跳变表示0。
对给的未解码的报文
5555555595555A65556AA696AA6666666955转为二进制,根据01->1,10->0。可得到
0101->11
0110->10
1010->00
1001->01
decode得到
11111111 11111111 01111111 11001011 11111000 00100110 00001010 10101010 10011111
bin->hex,对比ID并不重合,根据八位倒序传输协议将二进制每八位reverse,转hex即可
flag:FFFFFED31F645055F9
脚本
点击查看代码
cipher='5555555595555A65556AA696AA6666666955' #这里可以修改
def iee(cipher):
tmp=''
for i in range(len(cipher)):
a=bin(eval('0x'+cipher[i]))[2:].zfill(4) #新字符串希望的宽度,这里是4
tmp=tmp+a[1]+a[3]
print(tmp)
plain=[hex(int(tmp[i:i+8][::-1],2))[2:] for i in range(0,len(tmp),8)]
print(''.join(plain).upper())
iee(cipher)
本文作者:TTDB
本文链接:https://www.cnblogs.com/ttdb-huu/p/18280439
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步