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]


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


    CTF-Crypto_第2张图片
    破解key的代码,其实手动算也挺快的(闭嘴)

    CTF-Crypto_第3张图片
    比跑key简单多了

你可能感兴趣的:(CTF-Crypto)