一、XorTool
基于 XOR(异或)运算实现。它可以帮助您快速地对文本、二进制文件进行加密解密操作。
认识XorTool工具:
让我们先去认识一下工具:
xortool.py 是基于 python 的脚本,用于完成一些 xor 分析,包括:
猜想 key 的长度
猜想 key 的值
解密一些经过 xoe 加密的文件
也就是说当遇到不知道文件类型的文件,可以尝试去看看它是否被xoe加密了吗?
安装:
sudo pip install docopt cd /data/src git clone https://github.com/hellman/xortools.git cd xortool sudo python setup.py install (PS:安装不了一点,我老是报错) 直接pip3 install xortool
使用:
加密命令
python xortool-xor.py -f ./text/cmd.exe -s "secret_key" -n -o binary_xored_cmd
-f表示待加密的原文件,-s是密钥,-o是输出文件
注意,必须加上-n保证加密内容就是原本文件,不然会把原本文件加个-n再加密,这样解密出来的文件会多个\n。我不清楚作者为什么这么设计,但还是保留了下来。
输出文件用-o来指定,不要用作者的>重定向来保存,这是win版最大的区别。
上述代码是加密二进制文件的示例,还可以加密字符串,具体的看xortool-xor.py的帮助说明
解密命令:
python xortool.py binary_xored_cmd -l 10 -c 00 xortool -c 20 cipher
其中-l就是指定密钥长度,-c表示出现频率最高的字符。这个需要根据经验,比如文本内容一般是空格(20),二进制文件一般是00
例题:攻防世界:5-1
在刷攻防遇到的题MulTzor:WP中需要使用到xortools这个解密工具。
了解后,先分析一道简单的题:攻防世界:5-1(PS:哦其实也不简单,)
将文件放到vscode中怀疑是二进制文件,所以用xortool工具试一试?
xortool -c 20 cipher
cipher就是要解密的文件
这里拿到key:GoodLuckToYou
之后对原文件异或:用python2跑
key = 'GoodLuckToYou' flag = '' with open('cipher') as f: con = f.read() for i in range(len(con)): flag += chr(ord(con[i]) ^ ord(key[i%13])) f = open('flag.txt', 'w') f.write(flag) f.close()
拿到flag
例题:攻防世界:MulTzor
(PS:看了WP才知道题目错了,最后面少了个2)
我的分析:
一眼十六进制数据。尝试16进制转文件。打开后就不知道怎么做了
16进制转文件脚本:
hex_data = "48656c6c6f20576f726c64" # 这是填十六进制表示 bytes_data = bytes.fromhex(hex_data) # 将十六进制数据转换为字节对象 with open('output.bin', 'wb') as f: # 以二进制写入模式打开文件 f.write(bytes_data) # 写入字节数据
WP:
16进制转文件后用到的是XorTool解密
xortool -c 20 cipher
(那这个不是文本文件啊,应该是二进制文件,为什么不是 -c 00)
解密后查看,有个flag,结果是假的
文章中很明显每隔四个正确的字符就有一个错误的字符。但是它怎么推测出密钥的第一位是错误的?
T-e fla" is: DCTF{udcea3q5ba46s80b0bv23d8a}10643 9}
密钥:w3\xffSY\x8b
之后的思路就是异或。T-e本来为The 现在密钥的第一位w是错的,-和w异或拿到Z。再将Z和h异或拿到正确密钥2
正确密钥:23\xffSY\x8b
后面就卡住了不知道哪里出了问题,这个题到此为止吧。
学到一个新思路:文本文件、二进制文件、词频统计就想到XorTool工具
参考文章:
[CTF] 攻防世界MISC高手区部分题目WriteUp_ctfer2333-CSDN博客
攻防世界 MISC - MulTzor_攻防世界 multzor-CSDN博客