这道题提供了一个文件,是hexdump了server和client的通信
首先根据<和>的个数及前后字符,我们判断出通信的流程是:server->client, client->server, server->client。这是因为我估计当<或>前面是换行(\x0a),后面是空格时,才代表通信;否则是密文或>和>
开始想着是不是在第一次server把key传给client(应该是两个dash后面的部分),然后简单地做异或与。但试了下不对。但观察后两次通信内容,每个对应字符的最高位都是同为0或同为1,这说明后两次通信很有可能是用同样的key做异或与的,但就是不知道算法……
后来在看一篇APT的介绍中提到他们用RC4来加密通信,于是试了下,果然是RC4……
从hexdump恢复文件,用xxd:
$ xxd -r overthewire/vortex/vortex14.txt > vortex14
然后可以通过head与tail结合打印某一行,比如第二行:
$ head -2 vortex14 | tail -1 | hexdump -v -e '"\\""x" 1/1 "%02x" ""'`
python2里有crypto的库。但两次decrypt用的是各自的crypto,因为根据RC4的定义,一旦开始解密,S盒的内容也会被改变
得到明文