每日一练:攻防世界:5-1 MulTzor

2024-06-24 10:36
文章标签 世界 每日 攻防 multzor

本文主要是介绍每日一练:攻防世界:5-1 MulTzor,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、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博客

这篇关于每日一练:攻防世界:5-1 MulTzor的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089900

相关文章

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1(错误经验) #include <iostream>#include <string>using namespace std;int main() {string s;string ret;int count = 0;while(cin >> s)for(auto a : s){if(count == 0){if( a <=

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

每日一题——第八十一题

打印如下图案: #include<stdio.h>int main() {int i, j;char ch = 'A';for (i = 1; i < 5; i++, ch++){for (j = 0; j < 5 - i; j++){printf(" ");//控制空格输出}for (j = 1; j < 2 * i; j++)//条件j < 2 * i{printf("%c", ch

每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积

乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。 考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。 对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1