在一道LOTTARY题目上卡了2个小时,结果题目系统崩了,好吧,系统o( ̄▽ ̄)d
文章目录
前言
加解密有异或这种方式
XORTOOL
脚本
一、异或(XOR)运算进行加密解密
什么是异或运算
异或运算是在二进制数中的一种按维进行计算的逻辑运算符。其真值表为:
左操作数 右操作数 结果
0 0 0
0 1 1
1 0 1
1 1 0
加密过程
从上面的真值表中可以看出,我们可以取右操作数(左操作数)当做加密密钥,记为key,取左操作数(右操作数)作为待加密文本,记为message。
前提:首先得确保通信发送方和通信接收方都存储了相同的key;
加密:通信发送方将message与key作一次异或运算(message XOR key)后就可以得到一段加密文本(encyptedMessage)。我们就可以通过在网络中传输这段加密文本,就保证了我们的消息在网络传输过程中的安全性,因为如果别有用心的人通过一定手段从网络中截取我们的通信文本,拿到的也只是encyptedMessage,由于没有key,该别有用心的人是无法读懂这段encyptedMessage的;
解密:通信接收方收到通信发送方的encyptedMessage后,将encyptedMessage与key再次进行异或运算就可以得到通信发送方本来想发送的文本message,从而读懂通信发送方的意图。
二、XORTOOL
1.引入库
xortool是一个多字节异或加密破解工具。作者只是适配了linux版,在使用过程中如果缺什么模块就自己装,pip install 模块名
解密文件示例:
python xortool.py binary_xored_cmd -l 10 -c 00
其中-l就是指定密钥长度,-c表示出现频率最高的字符。这个需要根据经验,比如文本内容一般是空格(20),二进制文件一般是00
KEY最有可能的长度是13,接下来要猜测KEY是什么内容
得到key
三.异或的脚本
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()
这里的CIPHER就是密文的意思,就是刚刚打开的不知道是什么鬼的那串数据,
运行就可以得到XOR解码后的明文了,