OverTheWire Krypton Level 5 → Level 6

Reading time ~1 minute

题目传送门在此

题目中英语漫漫长,就以吾等这英语水平,只能表示不明觉厉了。

最后大概总结出来,这题就是要选择明文攻击,然后HINT1也说了The 'random' generator has a limited number of bits, and is periodic,那这就好办了。

首先我们尝试明文:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

得到对应密文:

EICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXY

很明显可以看出是循环的,循环节长度为30。

然后尝试明文:

BBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

得到密文:

FJDUEHYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXYCPFUEOCKRNEICTDGYIYZKTHNSIRFXY

发现只有前6个字母变了,那么看来应该是一位只会影响对应的一位,那么我们直接枚举每一位为A-Z的情况,分别加密,然后拿我们的加密了的password来对比,即可得到password的原文了。

程序如下:

import subprocess

ans = []
for i in xrange(26):
    fp = open('/tmp/kry/foo', 'w')
    fp.write(chr(i + ord('A')) * 30)
    fp.close()
    ret = subprocess.call(['/krypton/krypton6/encrypt6', '/tmp/kry/foo', '/tmp/kry/bar'])
    fp = open('/tmp/kry/bar', 'r')
    ans.append(fp.read())
    fp.close()
    
s = 'PNUKLYLWRQKGKBE'
plain = ''
for i in xrange(len(s)):
    for j in xrange(26):
        if s[i] == ans[j][i]:
            plain += chr(j + ord('A'))
            
print(plain)

至此,整个krypton得以解决,不得不说,krypton感觉就是入门级的题,没有什么难度。

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017