zoukankan      html  css  js  c++  java
  • 攻防世界-密码学-sleeping-guard

    1.题目信息

    点击还原比赛场景后,会给出镜像服务器的ip以及连接端口。且提示:“只有真正的hacker才能看到这张图片”

    2. 分析

    连接上服务器之后,服务器返回的数据看上去像base64编码,对此,解码即可;根据题目的提示,flag藏在图片中,解码后文件头数据不是png,jpg,bmp文件头格式(说明不是直接解码这么简单),也不是zip,rar,7z文件头格式(说明不是将图片加密压缩);实际上,原比赛的此题还有一个Python脚本,大致意思是使用长度为12的密钥与图片数据进行(循环)异或加密,有了这个信息之后,尝试使用各种图片格式的文件头与加密数据进行异或得到密钥,使用png格式的文件头与加密数据进行异或时,得到的结果“很像”密钥;接下来使用密钥解密即可。

    3. 解题

    首先从服务器接收全部的数据,再进行base64解码(将解码后的数据存入文件data);

    然后通过png文件头解出密钥,然后通过密钥解密,实现的Python脚本如下:

    from base64 import b64decode
    from binascii import unhexlify
    from Crypto.Util.strxor import strxor
    
    def enc(data,key):
        key=(key*(len(data)/len(key)+1))[:len(data)]
        return strxor(data,key)
    
    def solve(data):
        head=unhexlify('89504e470d0a1a0a0000000d49484452')
        key=strxor(head,data[:16])
        with open('sleeping-guard.png','wb') as f:
            f.write(enc(data,key[:12]))
    
    if __name__=='__main__':
        with open('data','rb') as f:
            solve(f.read())
    

    最后解密出图片

  • 相关阅读:
    SDWebImage
    ios面试题
    IOS推送功能push
    NSString什么时候用copy,什么时候用strong
    OC点语法和变量作用域
    iOS 常用几种数据存储方式
    JSON与XML的区别比较
    IOS开发——网络编程OC篇&Socket编程
    IOS-UI控件大全
    使用sql语句备份一张表
  • 原文地址:https://www.cnblogs.com/coming1890/p/13598809.html
Copyright © 2011-2022 走看看