给了一个data.txt
看了wp说是SMS短信的PDU编码,所以说是隔空传话。。。
找个网站解码:https://tool.letmetellyou.xyz/pdu/
全部解码后得到的内容:
hello,bob!what is the flag?
the first part of the flag is the first 8 digits of your phone number
那其他部分呢
看看你能从这些数据里发现什么?w465
从前两句可以知道这个意思是第一部分flag是接收者电话的前8位。
下面还有一堆16进制字符串,全部丢进010 editor可以发现png文件头
由于短信顺序是乱序的,所以不能正常打开图片,可以通过工具直接修复:https://github.com/sherlly/PCRT
直接binwalk前面的一堆16进制转好的原图,把zlib提取出来,使用命令
python2 PCRT.py -d 5B.zlib
即可恢复出完整数据,丢入winhex转换成图片即可
或者写个脚本根据时间排序
from time import strptime,mktime
from smspdu.codecs import GSM
from binascii import unhexlify
with open('data2.txt') as f:
lines = f.readlines()
mydic = {}
for line in lines:
Year = '20' + line[34:36][::-1]
Month = line[36:38][::-1]
Day = line[38:40][::-1]
Hour = line[40:42][::-1]
Minute = line[42:44][::-1]
Second = line[44:46][::-1]
time = '{}-{}-{} {}:{}:{}'.format(Year, Month, Day, Hour, Minute, Second)
timestamp = int(mktime(strptime(time, r"%Y-%m-%d %H:%M:%S")))
mydic[lines.index(line)] = timestamp
mydic = sorted(mydic.items(), key=lambda item: item[1], reverse=False)
with open('flag.png','wb') as f:
for line_num in mydic:
line_num = line_num[0]
pducode = lines[line_num][50:330]
data = GSM.decode(pducode)
if len(data) == 160:
f.write(unhexlify(data))
else:
pass
最后得到了一张CRC校验错误的图片,然后根据前面提示:w465,将宽度改为465,得到正确图片