[0xGame 2024] week4 完结

到最后总是不能AK,一直遗憾。不会的也记一下感受

Crypto

AES

看了官WP,也没有复现的想法。这种题还是算了,保持不会吧。积分法如果不拿到github的原码是不会的。

DES

差分法也不会。不过自己作的另外一种方法。

在加密的时候只有两轮,每轮L,R只有一侧被加密,这样两轮过后有一侧是只加密过一次的。

P(S_box(EP(R)^key))^L

S_box 将48位密钥分成8块,每块0,5位用来找s_box对应的行,其它4位用来找块里的行列。是个6到4位的映射。因为密文里只出现例里对应的4位值。不能确定行。

当输入的明文为0时,L.R都是0,其实只是加密了key即 P(S_box(key)),对于P可以直接逆过来,S_box比较麻烦,它本身是个6->4的映射,本身是不能完全逆回的。不过也就只差了2位而已。再用一个正常明文来测试一下即可。

前边部分代码是原代码,只加了后边两个函数:r_P,S2

'''
加密只有两轮L                      R 
1:            R               L^P(S_box(EP(R)^sub_key))
2:  L^P(S_box(EP(R)^sub_key))         ...
Out          ...              L^P(S_box(EP(R)^sub_key))#1
所以当输入\0*8时L,R,EP(R)==0, 右侧= P(S_box(sub_key))
通过右侧求key
key通过S_box将6位(05组成行号1-4组成列号,并按轮依次使用box的块取值)转成4位
所以逆向出来每段都有4种情况,8段组合共65536种
#2
输入个普通明文得到密文
用爆破出的key本地加密得到相同密文的为正确的key
'''
from functools import reduce
from operator import add__p = [15,  6, 19, 20, 28, 11, 27, 16,0, 14, 22, 25,  4, 17, 30,  9,1,  7, 23, 13, 31, 26,  2,  8,18, 12, 29,  5, 21, 10,  3, 24]__ep = [31,  0,  1,  2,  3,  4,3,  4,  5,  6,  7,  8,7,  8,  9, 10, 11, 12,11, 12, 13, 14, 15, 16,15, 16, 17, 18, 19, 20,19, 20, 21, 22, 23, 24,23, 24, 25, 26, 27, 28,27, 28, 29, 30, 31,  0
]__s_box = [[[14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7],[ 0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8],[ 4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0],[15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13]],[[15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10],[ 3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5],[ 0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15],[13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9]],[[10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8],[13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1],[13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7],[ 1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12]],[[ 7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15],[13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9],[10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4],[ 3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14]],[[ 2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9],[14, 11,  2, 12,  4,  7, 13,  1,  5,  0, 15, 10,  3,  9,  8,  6],[ 4,  2,  1, 11, 10, 13,  7,  8, 15,  9, 12,  5,  6,  3,  0, 14],[11,  8, 12,  7,  1, 14,  2, 13,  6, 15,  0,  9, 10,  4,  5,  3]],[[12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11],[10, 15,  4,  2,  7, 12,  9,  5,  6,  1, 13, 14,  0, 11,  3,  8],[ 9, 14, 15,  5,  2,  8, 12,  3,  7,  0,  4, 10,  1, 13, 11,  6],[ 4,  3,  2, 12,  9,  5, 15, 10, 11, 14,  1,  7,  6,  0,  8, 13]],[[ 4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1],[13,  0, 11,  7,  4,  9,  1, 10, 14,  3,  5, 12,  2, 15,  8,  6],[ 1,  4, 11, 13, 12,  3,  7, 14, 10, 15,  6,  8,  0,  5,  9,  2],[ 6, 11, 13,  8,  1,  4, 10,  7,  9,  5,  0, 15, 14,  2,  3, 12]],[[13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7],[ 1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2],[ 7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8],[ 2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11]]
]def EP(data):return [data[x] for x in __ep]def P(data):return [data[x] for x in __p]def S_box(data):output = []for i in range(0, 48, 6):row = data[i] * 2 + data[i + 5]col = reduce(add, [data[i + j] * (2 ** (4 - j)) for j in range(1, 5)])output += [int(x) for x in format(__s_box[i // 6][row][col], '04b')]return outputdef bytes2bin(m):return [int(i) for i in bin( int(m.hex(), 16) )[2:].zfill(8 * len(m))]def bin2bytes(m):return int(''.join([str(i) for i in m]), 2).to_bytes(length = len(m)//8, byteorder='big')def encrypt(plain, key):pt = bytes2bin(plain)sub_key = bytes2bin(key)L, R = pt[:32], pt[32:]for i in range(2):prev_L = LL = Rexpanded_R = EP(R)   #32->48xor_result = [a ^ b for a, b in zip(expanded_R, sub_key)]substituted = S_box(xor_result)permuted = P(substituted)R = [a ^ b for a, b in zip(permuted, prev_L)]cipher = R + Lreturn bin2bytes(cipher)#逆P
def r_P(data):return [data[__p.index(i)] for i in range(32)]def S2(data,i): #通过8个box实现6->4的映射row = data[0] * 2 + data[5]col = int(''.join([str(j) for j in data[1:5]]),2)output = __s_box[i][row][col]return outputfrom pwn import *
context.log_level = 'debug'io = remote('118.195.138.159', 10008)#当plain置0时获取密文
io.sendlineafter(b'[+] choice:\n>', b'E')
io.sendlineafter(b'[+] encrypt:\n>', b'0'*16)
io.recvuntil(b'[+] result: ')
pskey = bytes.fromhex(io.recvline().strip().decode())[4:]#不够简化,懒得改,就是从4行里分别找着列号组回6位
#pskey = b';\xa5:/'
#pskey = P(S_box(sub_key))
skey = r_P(bytes2bin(pskey))
subkey =[]
for i in range(8):r = int(''.join([str(v) for v in skey[i*4:i*4+4]]), 2)tmp = []for j in range(64):data = [int(v) for v in bin(j)[2:].zfill(6)]out = S2(data,i)if out == r:tmp.append(j)subkey.append(tmp)#计算可能提65536个密钥          
allkey = []
def getallkey(tmp, i):#print(tmp,i)if i>=8:key = bytes([int(tmp[j:j+8],2) for j in range(0,48,8)])allkey.append(key)returnfor v in subkey[i]:getallkey(tmp + bin(v)[2:].zfill(6),i+1)getallkey('',0)#加密一个普通密文
plain = '0123456789abcdef'
io.sendlineafter(b'[+] choice:\n>', b'E')
io.sendlineafter(b'[+] encrypt:\n>', plain.encode())
io.recvuntil(b'[+] result: ')
enc2 = bytes.fromhex(io.recvline().strip().decode())#验证key中哪个正确
plain = bytes.fromhex(plain)
for v in allkey:tmp = encrypt(plain, v)if tmp == enc2:print('Found:',v.hex())break io.sendlineafter(b'[+] choice:\n>', b'F')
io.sendlineafter(b'[+] guess:\n>', v.hex().encode())
io.recvline()io.interactive()

Coppersmith-I

 h = q >> 253 ,这里q是512位,已知高位但稍有点少,coppersmith极限是249吧,所以需要爆破几位。

hh = h<<253
for i in range(1024):print(i, end= ',')P.<x> = PolynomialRing(Zmod(N))f = hh + x*2^11 + i*2 + 1res = f.monic().small_roots(X=2^242, beta=0.499, epsilon=0.02)if res != []:print(res)p = f(res[0])print(p)breakp = 13295508573884639199620553314279276555713267931632686232046557121192374259545996147310645724590265408681531835562935842452272815109085991754142293560427829
long_to_bytes(int(pow(c, inverse_mod(e,p-1),p)))

RNG

 这里说是RNG,实际上看是random的算法MT19937,随便拿个什么现成的软件一弄就行。

不过回溯之后并不能拿到原值。通过第1组state的生成方法,可以很容易通过1恢复0

from pwn import *
from gmpy2 import invert 
from extend_mt19937_predictor import ExtendMT19937Predictor
context.log_level = 'debug'p = remote('118.195.138.159', 10006)#远程通过种子生成624个32位值。求种子
p.recvuntil(b'[+] result:')
v1 = eval(p.recvuntil(b']'))
print(v1)pr = ExtendMT19937Predictor()
#导入已知的624个数据,导入后指向尾部
for i in range(624):pr.setrandbits(v1[i], 32)#向前回溯
for i in range(624):_ = pr.backtrack_getrandbits(32)#取出state
mt3 = []+pr.__dict__['_mt']
#得到的state的mt[0]不正确,通过 mt[1] = 1812433253 * (mt[0] ^ mt[0] >> 30) + 1
yy = (mt3[1]-1)*invert(1812433253, 1<<32)%(1<<32)
# yy = y^y>>30 
y = yy^yy>>30p.sendlineafter(b'[+] seed = ?', str(y).encode())p.interactive()

SIDH

 后量子同态密码,一看就深,不过题目并不深,只要把题目运行一下即可。远程这边就复制粘贴上就行了。

PWN

uaf

在2.31上已经有tcache了,有uaf就等于直接可以任意地址写了。略。

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

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

相关文章

11.1组会汇报-基于区块链的安全多方计算研究现状与展望

基础知识 *1.背书&#xff0c;这个词源来自银行票据业务&#xff0c;是指票据转让时&#xff0c;原持有人在票据背面加盖自己的印鉴&#xff0c;证明该票据真实有效、如果有问题就可以找原持有人。 区块链中的背书就好理解了。可以简单的理解为验证交易并声明此交易合法&…

MSC“名实之辩”:精准鉴定只为精准治疗

前 言 MSC是一群来源广泛、能够体外增殖分化的异质性细胞。MSC具有免疫调节、促进组织修复等作用&#xff0c;应用于多种疾病的治疗。由于科学进程、习惯等原因&#xff0c;MSC具有多种名称。自先秦以来&#xff0c;就有“名实之辩”&#xff0c;今日我们就讲一讲MSC的名称与…

CST联合Isight进行天线DOE设计

本期我们转载一篇国外工程师Matthias MEIENHOFER&#xff0c;利用CST和Isight联合进行DOE设计的案例。 本文通过模拟设计一个双频带&#xff08;GSM和WLAN&#xff09;天线来研究天线的几何尺寸变化和性能的关系。如果我们改变天线里的某些宽度或长度参数&#xff0c;天线的性…

微信小程序寓言童话创作APP设计与实现

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 本文通过对现有寓言童话创作APP的调研和分析&#xff0c;取其精华去其糟粕&#xff0c;遵循软件工程方法进行系统分析、…

越来越多人不喜欢十六薪了

十六薪是个坑 大家好,我是青玉白露。 最近刷各种论坛&#xff0c;发现有个有意思的职场现象。 不少人开始对"十五薪"、“十六薪”敬而远之。 曾经让人眼红的福利,现在却成了让人望而却步的"坑"。这是咋回事呢? 乍一看,十五薪确实挺诱人。比如月薪3万,年收…

【命令执行waf绕过】

一、绕过空格 二、绕过黑名单 三、绕过长度限制 四、练习 发现了两个文件&#xff0c;cat读取&#xff0c;但是被过滤了&#xff1a; 用 I F S IFS IFS绕过读出index的源码&#xff0c;发现过滤了很多东西&#xff0c;黑名单过滤&#xff1a; 字符串拼接绕过&#xff1a; …

MongoDB笔记02-MongoDB基本常用命令

文章目录 一、前言二、数据库操作2.1 选择和创建数据库2.2 数据库的删除 3 集合操作3.1 集合的显式创建3.2 集合的隐式创建3.3 集合的删除 四、文档基本CRUD4.1 文档的插入4.1.1 单个文档插入4.1.2 批量插入 4.2 文档的基本查询4.2.1 查询所有4.2.2 投影查询&#xff08;Projec…

六、SpringMVC的视图

文章目录 1. ThymeleafView2. 转发视图3. 重定向视图4. 视图控制器view-controller 1. ThymeleafView 2. 转发视图 3. 重定向视图 4. 视图控制器view-controller

springboot系列十三: 异常处理

springboot异常处理 基本介绍拦截器VS过滤器默认异常页面应用实例debug取出状态码和错误信息 全局异常基本说明应用实例Debug处理流程 自定义异常基本说明应用实例Debug处理流程注意事项和细节 基本介绍 1.默认情况下&#xff0c;SpringBoot 提供 /error 处理所有错误的映射&a…

无人机手势控制工作原理和算法!

一、无人机手势控制的工作原理 无人机手势控制的工作原理基于计算机视觉技术和图像识别技术。具体来说&#xff0c;无人机上配备的摄像头会捕捉用户的手势动作&#xff0c;并将这些图像数据传输到无人机内置的处理器中。处理器通过内置的算法对图像进行处理和解析&#xff0c;…

雷池社区版 7.1.0 LTS 发布了

LTS&#xff08;Long Term Support&#xff0c;长期支持版本&#xff09;是软件开发中的一个概念&#xff0c;表示该版本将获得较长时间的支持和更新&#xff0c;通常包含稳定性、性能改进和安全修复&#xff0c;但不包含频繁的新特性更新。 作为最受欢迎的社区waf&#xff0c…

自动驾驶---理想汽车智驾进展

1 背景 自媒体---“电车通”从2024年初开始推出智能化评测相关栏目&#xff0c;尤其是针对智能驾驶这一功能做了大量的实测工作&#xff1b;根据综合表现&#xff0c;给测试车型给出了能够直观展示其能力的评分。当评测的对象达到一定数量后&#xff0c;对整个国内车市智驾能力…

跨越科技与文化的桥梁——ROSCon China 2024 即将盛大开幕

在全球机器人技术飞速发展的浪潮中&#xff0c;ROS&#xff08;Robot Operating System&#xff09;作为一款开源的机器人操作系统&#xff0c;已成为无数开发者、研究人员和企业的首选工具。为了进一步推动ROS的应用与发展&#xff0c;全球知名的机器人操作系统会议——ROSCon…

制作并量化GGUF模型上传到HuggingFace和ModelScope

llama.cpp 是 Ollama、LMStudio 和其他很多热门项目的底层实现&#xff0c;也是 GPUStack 所支持的推理引擎之一&#xff0c;它提供了 GGUF 模型文件格式。GGUF (General Gaussian U-Net Format) 是一种用于存储模型以进行推理的文件格式&#xff0c;旨在针对推理进行优化&…

docker+nacos

安装数据库 以docker安装为例&#xff08;实际建议实体&#xff09; 初始化数据库 /******************************************/ /* 数据库全名 nacos_config */ /* 表名称 config_info */ /******************************************/ CREATE TABLE config_i…

Linux入门(2)

林纳斯托瓦兹 Linux之父 1. echo echo是向指定文件打印内容 ehco要打印的内容&#xff0c;不加任何操作就默认打印到显示器文件上。 知识点 在Linux下&#xff0c;一切皆文件。 打印到显示器&#xff0c;显示器也是文件。 2.重定向 >重定向操作&#xff0c;>指向的…

PL端:HDMI 输出实验

实验环境 vivado 2024.1 实验任务 做一个 HDMI 输出的彩条 硬件介绍 开发板没有HDMI编码芯片&#xff0c;是将FPGA的3.3差分IO直接连接到HDMI连接器&#xff0c;FPGA 完成 24 位 RGB 编码输出TMDS 差分信号。 HDMI传输要素&#xff1a; TMDS 差分信号 TMDS&#xff08…

江协科技STM32学习- P35 硬件I2C读写MPU6050

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

39页PDF | 华为数据架构建设交流材料(限免下载)

一、前言 这份报告是关于企业数据架构建设的交流材料&#xff0c;详细介绍了数据架构在企业架构中的重要性&#xff0c;阐述了数据架构的定义、包含的四个核心组件&#xff08;数据资产目录、数据标准、数据模型和数据分布&#xff09;&#xff0c;并通过交通和城市政务服务的…

三周精通FastAPI:27 使用使用SQLModel操作SQL (关系型) 数据库

官网文档&#xff1a;https://fastapi.tiangolo.com/zh/tutorial/sql-databases/ SQL (关系型) 数据库 FastAPI不需要你使用SQL(关系型)数据库。 但是您可以使用任何您想要的关系型数据库。 这里我们将看到一个使用SQLModel的示例。 SQLModel是在SQLAlchemy和Pydantic的基础…