CTF攻防世界小白刷题自学笔记16

1.Broadcast,难度:1,方向:Crypto(密码学)

题目来源:2019_Redhat

题目描述:粗心的Alice在制作密码的时候,把明文留下来,聪明的你能快速找出来吗?

给一下题目链接:攻防世界Crypto方向新手模式第4题。

打开下载的附件,发现有一大堆文件,吓我一跳,发现了唯一认识的Python文件。

打开了直接看到了flag,我都有的不相信这么简单,输入后结果还真是,所以说千万不要被随便吓到。

2.hidden key,难度:1,方向:Crypto

题目来源:江苏工匠杯

题目描述:你可以找到合适的key吗?

给一下题目链接:攻防世界Crypto方向新手模式第5题。

打开一看是一个Python文件。

代码解析

  1. 导入模块

    • Crypto.Util.number:用于数值相关的工具。
    • random:用于生成随机数。
    • hashlib:用于计算哈希值。
    • os:用于生成随机字节。
  2. 生成密钥

    • 使用 os.urandom(8) 生成了一个8字节的随机密钥。
  3. 随机种子初始化

    • 随机数生成器通过密钥的 MD5 哈希值进行初始化,确保对于相同的密钥,生成的随机数是相同的。
  4. 标志加密

    • 标志被逐字节加密。
    • 对于标志的每个字节,调用 rand(256) 生成一个0到255之间的随机值,然后将这个值与标志字节进行异或(XOR)运算。
  5. 输出

    • 打印加密后的标志(以整数列表的形式)和一个根据密钥生成的整数。

反向操作

为了找回原始的标志,我们需要:

  1. 使用提供的密钥重新生成用于加密的随机数。
  2. 将这些随机数与加密后的字节进行异或运算,得到原始的标志。

解密步骤

  1. 重新生成随机数
    使用相同的密钥作为种子,重新生成与加密过程中相同的随机数序列。

  2. 异或解密
    使用得到的随机数与加密值进行异或运算,恢复原始的标志。

几个关键知识点:

1. 异或操作的含义

异或 (XOR) 是一种在数字电路和计算机科学中常用的逻辑运算。其基本规则是:

  • 当两个输入相同(0与0或1与1)时,输出为0。
  • 当两个输入不同(0与1或1与0)时,输出为1。

用一个简单的真值表表示:

表格

ABA XOR B
000
011
101
110

在代码中,行 f = c[i] ^ rand(256) 对于 c[i] 和 rand(256) 进行异或,这说明 f 是从原始密文字节 c[i] 和随机生成的字节组合而来的。这里生成的 rand(256) 是一个随机数,它应当模拟在加密过程中使用的随机数。

恢复的机制

假设我们知道加密过程如下:

  • 原始字节 m[i] 与一个随机字节 r[i] 异或后得到的密文 c[i]

c[i]=m[i]⊕r[i]c[i]=m[i]⊕r[i]

在解密时,如果我们知道 r[i] 和 c[i],我们可以利用异或的特性来恢复原始字节 m[i]

m[i]=c[i]⊕r[i]m[i]=c[i]⊕r[i]

因为异或操作具有以下性质:

  • x⊕x=0x⊕x=0 (相同的数异或结果为0)
  • x⊕0=xx⊕0=x (与0异或返回自身)

因此,只要我们能够获得正确的 r[i],我们就可以恢复出原始数据。

2.random.seed(int(hashlib.md5(key).hexdigest(), 16)) 这句干什么的?为什么感觉后面没有用到?

这段代码 random.seed(int(hashlib.md5(key).hexdigest(), 16)) 用于初始化随机数生成器的种子,确保在下面的代码中生成的随机数是可预测的。让我们详细解析一下它的功能和用途:

1. 初始化随机数生成器的种子

  • hashlib.md5(key).hexdigest():

    • 这部分代码计算给定 key 的 MD5 哈希值,并以十六进制字符串形式返回。MD5 哈希函数是确定性的,意味着相同的输入总是产生相同的输出。
  • int(..., 16):

    • 将得到的十六进制字符串转换为一个整数。这一转换是为了使这个哈希值可以作为随机数生成器的种子。
  • random.seed(...):

    • 用这个整数来初始化随机数生成器。这意味着接下来的随机数序列是基于这个种子的,而同样的种子会生成相同的随机数序列。

2. 为什么这句代码重要?

虽然在表面上看,它似乎没有被直接用到,但实际上,这一步是在设置随机数生成器的初始状态,以影响后续所有的 random 函数调用的结果。例如,当你调用 random.randrange(256) 或 rand(256)(其中 rand 使用了 random.randrange),生成的数是基于设定的种子的。

  • 可重复性
    • 由于种子是基于 key 的哈希值,使用相同的 key 每次运行程序都会生成相同的随机数序列,这在某些情况下可以帮助进行调试或复现实验。

即 相同的秘钥作为种子生成相同的随机数(种子相同,生成的随机数相同)

3.使用vscode等工具打开Python文件时,出现导入库问题。

先安装库在终端下输入命令pip install pycryptodome,

如果还是不行,多半是编译器版本问题,请看下面文章,大佬很厉害,说的清晰透彻。

使用vscode导入库失败解决方法_vscode中编写python 导入manim时报错-CSDN博客

下面是解码代码,不是我写的,是这位大佬写的,放在这里纯粹方便复制查看。

from Crypto.Util.number import *
import  random
import hashlib
import osokey=2669175714787937<<12
c=[140, 96, 112, 178, 38, 180, 158, 240, 179, 202, 251, 138, 188, 185, 23, 67, 163, 22, 150, 18, 143, 212, 93, 87, 209, 139, 92, 252, 55, 137, 6, 231, 105, 12, 65, 59, 223, 25, 179, 101, 19, 215]def rand(rng):return rng - random.randrange(rng)for kk in range(2**12):key=long_to_bytes(okey+kk)flag = []random.seed(int(hashlib.md5(key).hexdigest(), 16))for i in range(len(c)):rand(256)f=c[i]^rand(256)flag.append(f)if all(c < 256 for c in flag):flag=bytes(flag)if(flag.startswith(b'flag')):print(flag)

运行完代码直接出现flag了。

 

总结:Python真的很重要,我后悔之前没有学,根本问题是之前根本不会导入库,很多代码根本运行不了,查了很多解决方法都没有用,非常劝退人,环境不能配置出错,否则出现各种运行不起来,希望以后可以自己总结一个软件环境新人痛苦安装合集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20373.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

企业供配电及用电一体化微电网能源管理系统

企业能源管理痛点 信息孤岛 1.保护类、监测类、控制类、治理类、重要负荷等子系统多、分散、独立 2.数据异构、融合困难、数据分析困难 3.用户无法通过一套系统完整的了解整个企业的供电、配电、用电情况&#xff1b; 资源浪费 1.服务器资源浪费 2.应用软件浪费 3.数据…

windows实现VNC连接ubuntu22.04服务器

最近弄了一个700块钱的mini主机&#xff0c;刷了ubuntu22.04系统&#xff0c;然后想要在笔记本上通过VNC连接&#xff0c;这样就有了一个linux的开发环境。最后实现的过程为&#xff1a; 安装vnc服务器 安装 VNC 服务器软件&#xff1a; sudo apt update sudo apt install t…

强化学习数学原理学习(四)

前言 今天是时序差分学习 正文 首先,明确一点,时序差分也是无模型的情况下的强化学习方法,TD学习是蒙特卡洛思想和动态编程&#xff08;DP&#xff09;思想的结合。最基础的时序差分学习估计状态值&#xff0c;而后续提出的Sarsa和Q-learning方法则直接对动作值进行估计。 …

【Redis 探秘】Redis 性能优化技巧

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

RTSP播放器EasyPlayer.js播放器在webview环境下,PC和安卓能够正常播放,IOS环境下播放器会黑屏无法播放

流媒体技术分为顺序流式传输和实时流式传输两种。顺序流式传输允许用户在下载的同时观看&#xff0c;而实时流式传输则允许用户实时观看内容。 流媒体播放器负责解码和呈现内容&#xff0c;常见的播放器包括VLC和HTML5播放器等。流媒体技术的应用场景广泛&#xff0c;包括娱乐…

C语言零基础入门

一、输入输出 &#xff08;1&#xff09;scanf scanf 是C语言中的一个标准库函数&#xff0c;用于从标准输入&#xff08;通常是键盘&#xff09;读取数据。scanf 函数定义在 <stdio.h> 头文件中。 #include <stdio.h>int main(void) {//读取整数 int num;print…

经典的网络安全技术

以我的理解&#xff0c;“黑客”大体上应该分为“正”、“邪”两类&#xff0c;正派黑客依靠自己掌握的知识帮助系统管理员找出系统中的漏洞并加以完善&#xff0c;而邪派黑客则是通过各种黑客技能对系统进行攻击、入侵或者做其他一些有害于网络的事情&#xff0c;因为邪派黑客…

D73【 python 接口自动化学习】- python 基础之正则表达式

day73 正则表达式-元字符匹配 学习日期&#xff1a;20241119 学习目标&#xff1a;正则表达式--133 正则表达式-元字符匹配 学习笔记&#xff1a; 元字符匹配 数量匹配 实践操作 总结 字符串的r标记表示&#xff0c;字符串内转移字符无效&#xff0c;作为普通字符使用正则…

实验一 顺序结构程序设计

《大学计算机&#xfe63;C语言版》实验报告 实验名称 实验一 顺序结构程序设计 实验目的 &#xff08;1&#xff09;掌握C语言中常量和变量的概念。 &#xff08;2&#xff09;掌握C语言中常见的数据类型。 &#xff08;3&#xff09;掌握C语言中变量的定义和赋值方法。 …

在Linux上如何利用NTP使客户端和服务端的时间同步

对于服务端 一、先在服务端安装相关配置-----yum install chrony -y-----并启动 二、进入chrony的文件里----在第三行修改为阿里云时间服务地址 三、在服务端重启chrony 四、进行测试------chronyc sources -v 五、进入chrony的文件里添加客户端的ip地址---在第26行&#…

IDEA2023 SpringBoot整合Web开发(二)

一、SpringBoot介绍 由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。SpringBoot提供了一种新的编程范式&#xff0c;可以更加快速便捷…

[C语言]第十三节 指针一基础知识到高级技巧的全景探索

目录 13.1. 内存和地址 13.1.1. 内存和地址 13.2. 指针变量和地址 13.2.1 取地址操作符&#xff08;&&#xff09; 13.1.2 指针变量和解引⽤操作符&#xff08;*&#xff09; 13.1.3 指针变量的⼤⼩ 13.3. 指针变量类型 13.3.1 指针的解引⽤ 13.3.2 指针-整数 13…

hhdb数据库介绍(9-24)

计算节点参数说明 failoverAutoresetslave 参数说明&#xff1a; PropertyValue参数值failoverAutoresetslave是否可见是参数说明故障切换时&#xff0c;是否自动重置主从复制关系默认值falseReload是否生效否 参数设置&#xff1a; <property name"failoverAutor…

基于Java Springboot网络相册系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

未来已来:少儿编程竞赛聚焦物联网,激发创新潜力

随着人工智能与物联网技术&#xff08;IoT&#xff09;的快速发展&#xff0c;少儿编程教育正在迎来新的变革浪潮。近年来&#xff0c;各类少儿编程竞赛纷纷增加了物联网相关主题&#xff0c;要求学生结合编程知识和硬件设备设计智能家居、智慧城市等创新项目。这一趋势不仅丰富…

什么是客户关系管理

客户关系管理&#xff08;CRM&#xff09;是一套用于管理企业与现有客户及潜在客户互动的策略和技术。提升客户满意度、优化销售流程、增强客户忠诚度是其核心目标。通过系统化的方法&#xff0c;CRM帮助企业收集、分析并利用客户数据&#xff0c;从而制定更有效的市场营销策略…

C# MethodTimer.Fody 使用详解

总目录 前言 NET开发过程中&#xff0c;经常会使用Stopwatch 来测量方法的执行所需时间&#xff0c;以便了解代码的执行效率。这里介绍一个开源库&#xff1a;MethodTimer.Fody。它可以辅助我们更为方便快速的完成方法执行效率的测量。 一、MethodTimer.Fody 是什么&#xff1…

sourceInsight常用设置和功能汇总(不断更新)(RGB、高亮、全路径、鼠标、宏、TODO高亮)

文章目录 必开配置设置背景颜色护眼的RGB值&#xff1f;sourceInsight4.0中如何设置选中某个单词以后自动高亮的功能&#xff1f;sourceinsight中输入设置显示全路径&#xff1f; 常用sourceInsight4.0中文乱码怎么解决&#xff0c;注意事项是什么&#xff1f;如何绑定鼠标中键…

东土科技孵化的“网联汽车高速通信技术”前沿产品亮相2024WICV大会

2024世界智能网联汽车大会&#xff08;WICV&#xff09;于近日在北京召开。本次大会发布了由中国汽车工程学会组织全球200余位专家&#xff0c;联合评审遴选出未来十年对于智能网联汽车发展具有重要影响的十大技术趋势&#xff0c;包括“面向高级别自动驾驶的超级人工智能”“网…

kvm-dmesg:从宿主机窥探虚拟机内核dmesg日志

在虚拟化环境中&#xff0c;实时获取虚拟机内核日志对于系统管理员和开发者来说至关重要。传统的 dmesg 工具可以方便地查看本地系统的内核日志&#xff0c;但在KVM&#xff08;基于内核的虚拟机&#xff09;环境下&#xff0c;获取虚拟机内部的内核日志则复杂得多。为了简化这…