Quantcast
Channel: 记事本
Viewing all articles
Browse latest Browse all 122

vortex14

$
0
0

这道题提供了一个文件,是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盒的内容也会被改变

#!/usr/bin/python2fromCrypto.CipherimportARC4if__name__=='__main__':key="\x50\xdb\x5b\x09\x6c\xce\xf6\x98"crypto1=ARC4.ARC4Cipher(key)crypto2=ARC4.ARC4Cipher(key)ctext1="\xfb\x76\x3e\x64\xd3\x72\x94\x8f\xa6\xa9\x4d\x43\xc8\xa4\x85\xb8\x09\xc6\xc2\xfa\x69\x51\x96"ctext2="\xfb\x76\x3e\x64\xd3\x72\xab\xbf\x93\x8f\x64\x21\xae\xd8\xe3\xbe"print(crypto1.decrypt(ctext1))print(crypto2.decrypt(ctext2))

得到明文


Viewing all articles
Browse latest Browse all 122

Trending Articles