CTF-Crypto

  • A Simple Cipher——来自[Tokyo Westerns CTF 3rd 2017]
    总结:这道题卡了很久,一开始粗暴的想爆破,发现13位的key可能会跑死机,于是仔细看代码发现固定位可以利用。但还是又卡住了,因为忘记了从21开始才是第22位ORZ(以后写代码记得检查一下数字……)
    Q:简单来说就是给了python的加密源代码和输出结果,要你把输入变量跑出来。

看了下源代码发现几个点:message有个固定位已知,key长度13,message[i]+enc[i]+key[i%13] % 128 = enc[i+1]


注意message构成和加密方式,可以发现后半截只用到key
  • 首先string.decode('hex')得到encrypted='|\x15:GKj-?}?s(p>l-$:\x08>.w<ETwHf|\x15\x113?Ot^',Len(encrypted) =36。则len(message)=35,又由于len(key)=13,则len(flag)=21。
  • 由此,message[21]='|',而encrypted已知,可以一个个根据message[(i % 13)+22] = enc[i+1]-message[i]- enc[i] % 128算出来,从message[21:]用个循环先把key跑出来。再把flag跑出来。


    破解key的代码,其实手动算也挺快的(闭嘴)

    比跑key简单多了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容