170815 WarGames-Krypton(0-6)

1625-5 王子昂 总结《2017年8月15日》 【连续第317天总结】
A. WarGames-Krypton
B.

Level 0

提示为密码被base64加密,直接解密得到password:
KRYPTONISGREAT

Level 1

在文件系统里摸了半天啥都没有,提示文件在/krypton中
于是重新cd /krypton/krypton1
找到README和krypton2文件
读README得知使用了ROT13加密,凯撒13位
把krypton2读出来脚本跑一下:

a='YRIRY GJB CNFFJBEQ EBGGRA'
b=''
for i in a:
    c=ord(i)
    if (c >= 65 and c <= 91):
        c=c-13
        if(c<65):
            c=c+26

    b=b+chr(c)
print(b)

LEVEL TWO PASSWORD ROTTEN
Level 2

这个出题人话太多了(:з」∠)大段说明对我的英文水平是个严峻的考验
基本上就是说这次密码凯撒加密放在目录下了,你读不了它但是给你了加密程序(目录果然还是错的,自己跑回去)
你要用它得搞个krypton3有权限的临时目录,于是照葫芦画瓢制作一个
思路有两个,
一个是自己写一个样本加密,得到密钥,然后加密密码文件,还原两次得到password
另一个是进行逆向;试了一下发现关键文件keyfile.dat不可读,于是无法下载,只好乖乖走密码

krypton2@krypton:/tmp/tmp.PHVWR8f6qf$ echo 'a' > a
krypton2@krypton:/tmp/tmp.PHVWR8f6qf$ /krypton/krypton2/encrypt a
krypton2@krypton:/tmp/tmp.PHVWR8f6qf$ cat ciphertext 
M//密钥为‘M’-'A'
krypton2@krypton:/tmp/tmp.PHVWR8f6qf$ /krypton/krypton2/encrypt /krypton/krypto2/krypton3 
krypton2@krypton:/tmp/tmp.PHVWR8f6qf$ cat ciphertext 
AYCQYPGQCYQW
krypton2@krypton:/tmp/tmp.PHVWR8f6qf$ 

把上一关的脚本直接拿过来改下密钥再跑两遍
值得一提的是这玩意儿果然不区分大小写,我刚开始还以为有a到M那么远呢

#a='AYCQYPGQCYQW'
a='OMQEMDUEQMEK'//第一次解密结果,即krypton3中内容
b=''
for i in a:
    c=ord(i)
    if (c >= 65 and c <= 91):
        c=c-(ord('M')-ord('A'))
        if(c<65):
            c=c+26

    b=b+chr(c)
print(b)

CAESARISEASY

是我英文太差了吗,说明里明明写着

The password for level 3 is in the file krypton3. It is in 5 letter group ciphertext.

(╯‵□′)╯︵┻━┻

Level 3

这次更高级了,简单替换算法,但是密钥和加密都未知,不过给了大量的数据
提示是词频分析
自己临时写的脚本太简陋,只能分析字母频率,由于样本量的问题可能还是差了点;最好再结合两字、三字词
http://www.richkni.co.uk/php/crypta/freq.php这个网站进行任意组合的词频分析
http://quipqiup.com/这个网站可以直接将原文还原出来
S出现频率最高,jds在三字词中频率最高,猜测s=e,jds=the等等
得到码表:

密文a b c d e f g h i j k l m n o p q r s t u v w x y z
明文b o i h g k n q v t w y u r x z a j e m s l d f p c

解password:
KSVVW BGSJD SVSIS VXBMN YQUUK BNWCU ANMJS
WELLDONETHELEVELFOURPASSWORDISBRUTE
整理:
well done, the level four password is brute

Level 4

维吉尼亚解密,相当于分组的凯撒加密
首先用quipqiup网站进行词频分析,发现三字词中xri的出现频率最高,猜测它是由the用同样的密钥加密得到的(还有可能是其他词恰好用其他密钥加密得到的,但三字词的可能性就很低了)
计算每两个xri的间隔,猜测密钥长度
我刚开始猜3,一直不太对劲
回过头谷歌翻译了再读一遍提示发现已经给出密钥长度为6了(:з」∠)吃了文化的亏
知道密钥长度就简单了,写个脚本将其依次分成6组,每组内就是用同一个密钥加密的凯撒了,用之前的脚本计算一下字母频率,最高的依次为“JVIOIC”
分别与王者字母’E’计算差,得到key“FREKEY”
再回过头解密“HCIKV RJOX”
注意分组的时候需要把found数据的所有空格也删除,否则第六组的数据全是空格,使全盘数据顺序都乱套~
还要注意中间那个空格别进行解密(干脆手工删了),第一遍解出来CLEAR<MSKN,想起来空格这玩意儿使得key偏移了
得到password:CLEARTEXT

Level 5

这题就不给长度了,不过我们可以自己求~
将三个found数据合起来求词频,最多的是”ZAL”
查到它在found1出现的位置分别是24,87,312,663
相邻作差,求最大公约数得9
那么key的长度就是9啦,下面跟上一关一样,直接跑脚本:

#初始化
length=9
a={}
for i in range(26):
    a[chr(i+65)]=0
str=[' 'for x in range(length)]
#分组
for i in range(len(f1)):
    str[i%length]=str[i%length]+f1[i]
for i in range(len(f2)):
    str[i%length]=str[i%length]+f2[i]
#计数
for s in str:
    for i in s:
        if i is not ' ':
            a[i]=a[i]+1
    print(sorted(a.items(),key=lambda item:item[1],reverse=True))
    for i in range(26):
        a[chr(i + 65)] = 0
#解密
c="BELOS Z"#密文
key="OICPIRZXL"#与‘E’对应的字符
for i in range(len(c)):
    sub=ord(c[i])-(ord(key[i%len(key)])-ord('E'))
    if(sub<ord('A')):
        sub=sub+26
    print(chr(sub),end='')

同样注意found和密文的空格要去除~

Level 6

这次详细介绍了一大堆,基本上就是说增加密钥的长度和随机性,使得计算频率不可行
提示好像很难的样子,给了密文生成器,表示数字是随机的
然而你这随机是固定的啊(╯‵□′)╯︵┻━┻
比前一关简单多了
读密码文件生成密文,观察长度发现是15位
以’a’x15的明文生成密文,得到基准文件
重复生成发现密文不变,即随机数是不变的……
论随机数种子随时间变化的重要性(那就没法做了(。
那跟第二关还有啥区别╮(╯_╰)╭随机key很厉害但是拿到生成器就不堪一击了
AAAAAAAAAAAAAAA→EICTDGYIYZKTHNS
          ?→TVWDOEJEPPUZROW
拿上一关解密部分的脚本,把’E’改成’A’跑两遍不就完了吗~
第一遍得到krypton7中的密文,再跑一遍得到password:LFSRISNOTRANDOM

Level 7

登录进去真正的空空如也TmT
连Congratulations都没有~这届制作者不行~
C. 明日计划
WarGames-NATAS
这次是web的基础了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值