给了一个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,mktimefrom smspdu.codecs import GSMfrom binascii import unhexlifywith 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)] = timestampmydic = 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,得到正确图片
