给了一个data.txt
    隔空传话 - 图1
    看了wp说是SMS短信的PDU编码,所以说是隔空传话。。。
    找个网站解码:https://tool.letmetellyou.xyz/pdu/
    全部解码后得到的内容:

    1. hello,bob!what is the flag?
    2. the first part of the flag is the first 8 digits of your phone number
    3. 那其他部分呢
    4. 看看你能从这些数据里发现什么?w465

    从前两句可以知道这个意思是第一部分flag是接收者电话的前8位。
    下面还有一堆16进制字符串,全部丢进010 editor可以发现png文件头
    由于短信顺序是乱序的,所以不能正常打开图片,可以通过工具直接修复:https://github.com/sherlly/PCRT
    直接binwalk前面的一堆16进制转好的原图,把zlib提取出来,使用命令

    1. python2 PCRT.py -d 5B.zlib

    即可恢复出完整数据,丢入winhex转换成图片即可
    或者写个脚本根据时间排序

    1. from time import strptime,mktime
    2. from smspdu.codecs import GSM
    3. from binascii import unhexlify
    4. with open('data2.txt') as f:
    5. lines = f.readlines()
    6. mydic = {}
    7. for line in lines:
    8. Year = '20' + line[34:36][::-1]
    9. Month = line[36:38][::-1]
    10. Day = line[38:40][::-1]
    11. Hour = line[40:42][::-1]
    12. Minute = line[42:44][::-1]
    13. Second = line[44:46][::-1]
    14. time = '{}-{}-{} {}:{}:{}'.format(Year, Month, Day, Hour, Minute, Second)
    15. timestamp = int(mktime(strptime(time, r"%Y-%m-%d %H:%M:%S")))
    16. mydic[lines.index(line)] = timestamp
    17. mydic = sorted(mydic.items(), key=lambda item: item[1], reverse=False)
    18. with open('flag.png','wb') as f:
    19. for line_num in mydic:
    20. line_num = line_num[0]
    21. pducode = lines[line_num][50:330]
    22. data = GSM.decode(pducode)
    23. if len(data) == 160:
    24. f.write(unhexlify(data))
    25. else:
    26. pass

    最后得到了一张CRC校验错误的图片,然后根据前面提示:w465,将宽度改为465,得到正确图片