[RITSEC CTF 2025] Crypto

news2025/3/30 9:50:45

这个忘打了,难度不小。

Alien Encryption 101

一个很小的RSA,略

Cuwves 2 Electric Boogaloo

已知p,在p^2下的两个椭圆曲线的j不变量,直接用函数

Mothership

AES_CBC加密给出密文和IV,通过调整IV来修改明文

import base64
import os
import signal

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

COORDS = open("coordinates.txt").read().strip()


def encrypt(message, key, iv):
    cipher = AES.new(key, AES.MODE_CBC, iv)
    padded = pad(message.encode(), AES.block_size)
    ciphertext = cipher.encrypt(padded)
    return base64.b64encode(iv + ciphertext).decode()


def validate(data, key):
    try:
        data = base64.b64decode(data)
        iv = data[:16]
        ciphertext = data[16:]
        cipher = AES.new(key, AES.MODE_CBC, iv)
        decrypted = unpad(cipher.decrypt(ciphertext), AES.block_size).decode()

        return decrypted == "SHIP:FIRE"
    except:
        print("Invalid transmission.")
        raise SystemExit(1)


def main():
    print("=== Alien Transmission System ===")
    print("Welcome to the transmission system.")

    signal.alarm(11)
    for i in range(200):
        key = os.urandom(16)
        iv = os.urandom(16)

        print("\nSAFE TRANSMISSION:", encrypt("SHIP:SAFE", key, iv))
        data = input("SEND TRANSMISSION: ")
        if not validate(data, key):
            print("Safe transmission received. Exiting.")
            return
        print(f"Attack transmission received ({i + 1}/200). Continue to confirm.")

    print("Attack mode initiated. Ship coordinates:", COORDS)


if __name__ == "__main__":
    main()
from base64 import b64encode,b64decode
from pwn import *
context.log_level = 'debug'

p = remote('mothership.ctf.ritsec.club', 31750)

for i in range(200):
    p.recvuntil(b':')
    enc = b64decode(p.recvline().strip().decode())
    niv = xor(enc[:16], b'SHIP:FIRE'.ljust(16,b'\0'), b'SHIP:SAFE'.ljust(16,b'\0'))
    p.sendline(b64encode(niv+enc[16:]))

p.recvline()
p.interactive()

不过这个远程有计时,而速度又很慢最多到195总是到不了200

Leaky ZKP

又一个脑筋急转弯的题。前一半看似DLP,p不是strong的,所以可以出来小因子,解出小模下的解,多次可以得到flag。后一半看是hnp (B*x+t = A)其中B自己输入,A给出。问题是这里没有取模,所以当B输入大值时,就能忽略t 

#!/usr/local/bin/python

from os import urandom, getenv
from secrets import randbelow
from Crypto.Util.number import getPrime, bytes_to_long

FLAG = getenv('FLAG', 'MetaCTF{test_flag}').encode()

def main():
    p = getPrime(512)
    k = 32
    x = bytes_to_long(FLAG + urandom(64 - len(FLAG)))
    g = 3
    h = pow(g, x, p)

    print('Let me prove to you in *zero-knowledge* that I know the discrete log of h!')
    print(f'{p = }')
    print(f'{g = }')
    print(f'{h = }')

    # 1. Prover (me) chooses random r_i for i = 1, 2, ..., k and sends each g^r_i
    R = [randbelow(p) for _ in range(k)]
    print([pow(g, r_i, p) for r_i in R])

    # 2. Verifier (you) chooses and sends random bits b_i for i = 1, 2, ..., k
    B = [int(b_i) for b_i in input(f'Send b_1, b_2, ..., b_{k}: ').split(',')]
    assert len(B) == k and all(b_i >= 0 for b_i in B)

    # 3. Prover (me) computes z_i = r_i + b_i x for i = 1, 2, ..., k and sends each z_i
    Z = [r_i + b_i * x for r_i, b_i in zip(R, B)]
    print(Z)

    # 4. Verifier (you) has sufficient information to be convinced that I truly know the discrete log!
    print('With that, you can verify that I know the discrete log, and you will have learnt nothing about my secret!')

if __name__ == '__main__':
    main()

输入 [2**512]+[1]*31拿第1个结果直接右移512位即可。

Bitstream Breach

这个就算没作完(代码太多,略)

给了一堆看不懂的代码。大概看懂以后加密分4部分

1,把64位key转为key1,再key1转为key2,再转为key3由于key已知所以这3个已知

2,把输入进行换位

3,作3轮 l,r=>r,r^k^l 每次用1个key

4,把结果进行第2次换位

看似不难,可转来转去,不知道该提交啥。

#keygen
key = 0xFEDCBA9876543210
skey = bin(key)[2:]
#keycompress 64->32
cp = [10,35,38,13,3,60,9,62,7,43,45,44,34,12,54,24,26,42,41,18,8,31,50,32,17,56,47,0,46,49,27,48]
#kp
kp = [31,11,22,25,21,28,0,19,12,14,17,10,6,9,20,18,24,1,7,26,23,15,27,4,29,5,2,3,30,16,13,8]
#ip
ip = [57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,56,48,40,32,24,16,8,0,58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6]
#fp
fp = [39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25,32,0,40,8,48,16,56,24]
#31 30 ... 0 从高位到低位
kcomp_s = ''.join([skey[63-cp[i]] for i in range(32)])[::-1]

key1 = kcomp_s
krot1_s = kcomp_s[-21:]+ kcomp_s[:11]


kperm1_s = ''.join([krot1_s[31-kp[i]] for i in range(32)])[::-1]
key2 = kperm1_s

krot2_s = kperm1_s[-6:]+kperm1_s[:-6]

key3 = ''.join([krot2_s[31-kp[i]] for i in range(32)])[::-1]


def sxor(a,b):
    return ''.join([str(int(a[i])^int(b[i])) for i in range(32)])



enc = 0x3EA8A2CD3A1C7DE221A48BAD307C7DDA
senc = bin(enc)[2:].zfill(128)
#0x920bd05154bc2173ee3b75d17d3c2193

后边就更看不懂了。

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

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

相关文章

PGP实现简单加密教程

模拟情景: 假设001和002两位同学的电脑上都安装了PGP,现在两人需要进行加密通讯。 一、创建密钥 1.新建密钥,输入名称和邮箱,输入8位口令,根据指示完成。 2.将其添加到主密钥,鼠标右击出现选项。 这里出…

7.8 窗体间传递数据

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 当项目中有多个窗体时(在本节中为两个窗体:Form1和Form2),窗体间传递数据有以下几种方…

【redis】集群 数据分片算法:哈希求余、一致性哈希、哈希槽分区算法

文章目录 什么是集群数据分片算法哈希求余分片搬运 一致性哈希扩容 哈希槽分区算法扩容相关问题 什么是集群 广义的集群,只要你是多个机器,构成了分布式系统,都可以称为是一个“集群” 前面的“主从结构”和“哨兵模式”可以称为是“广义的…

基于Springboot的网上订餐系统 【源码】+【PPT】+【开题报告】+【论文】

网上订餐系统是一个基于Java语言和Spring Boot框架开发的Web应用,旨在为用户和管理员提供一个便捷的订餐平台。该系统通过简化餐饮订购和管理流程,为用户提供快速、高效的在线订餐体验,同时也为管理员提供完善的后台管理功能,帮助…

【redis】集群 如何搭建集群详解

文章目录 集群搭建1. 创建目录和配置2. 编写 docker-compose.yml完整配置文件 3. 启动容器4. 构建集群超时 集群搭建 基于 docker 在我们云服务器上搭建出一个 redis 集群出来 当前节点,主要是因为我们只有一个云服务器,搞分布式系统,就比较…

飞牛NAS本地部署小雅Alist结合内网穿透实现跨地域远程在线访问观影

文章目录 前言1. VMware安装飞牛云(fnOS)1.1 打开VMware创建虚拟机1.3 初始化系统 2. 飞牛云搭建小雅Alist3. 公网远程访问小雅Alist3.1 安装Cpolar内网穿透3.2 创建远程连接公网地址 4. 固定Alist小雅公网地址 前言 嘿,小伙伴们&#xff0c…

Linux版本控制器Git【Ubuntu系统】

文章目录 **前言**一、版本控制器二、Git 简史三、安装 Git四、 在 Gitee/Github 创建项目五、三板斧1、git add 命令2、git commit 命令3、git push 命令 六、其他1、git pull 命令2、git log 命令3、git reflog 命令4、git stash 命令 七、.ignore 文件1、为什么使用 .gitign…

browser-use 库网页元素点击测试工具

目录 代码代码解释输出结果 代码 import asyncio import jsonfrom browser_use.browser.browser import Browser, BrowserConfig from browser_use.dom.views import DOMBaseNode, DOMElementNode, DOMTextNode from browser_use.utils import time_execution_syncclass Eleme…

解决GitLab无法拉取项目

1、验证 SSH 密钥是否已生成 ls ~/.ssh/ 如果看到类似 id_rsa 和 id_rsa.pub 的文件,则说明已存在 SSH 密钥。 避免麻烦,铲掉重来最方便。 如果没有,请生成新的 SSH 密钥: ssh-keygen -t rsa -b 4096 -C "your_emailexam…

FPGA学习篇——Verilog学习之寄存器的实现

1 寄存器理论 这里在常见的寄存器种加了一个复位信号sys_rst_n。(_n后缀表示复位信号低电平有效,无这个后缀的则表示高电平有效) 这里规定在时钟的上升沿有效,只有当时钟的上升沿来临时,输出out 才会改变,…

【VUE】ant design vue实现表格table上下拖拽排序

适合版本&#xff1a;ant design vue 1.7.8 实现效果&#xff1a; 代码&#xff1a; <template><div class"table-container"><a-table:columns"columns":dataSource"tableData":rowKey"record > record.id":row…

Vue实现动态数据透视表(交叉表)

需求:需要根据前端选择的横维度、竖维度、值去生成一个动态的表格&#xff0c;然后把交叉的值放入到对应的横维度和竖维度之下&#xff0c;其实就是excel里面的数据透视表功能&#xff0c;查询交叉语句为sql语句。 实现页面&#xff1a; 选择一下横维度、竖维度、值之后点击查…

推荐《人工智能算法》卷1、卷2和卷3 合集3本书(附pdf电子书下载)

今天&#xff0c;咱们就一同深入探讨人工智能算法的卷1、卷2和卷3&#xff0c;看看它们各自蕴含着怎样的奥秘&#xff0c;并且附上各自的pdf电子版免费下载地址。 《人工智能算法&#xff08;卷1&#xff09;&#xff1a;基础算法》 下载地址&#xff1a;https://www.panziye…

元宇宙浪潮下,数字孪生如何“乘风破浪”?

在当今科技飞速发展的时代&#xff0c;元宇宙的概念如同一颗璀璨的新星&#xff0c;吸引了全球的目光。元宇宙被描绘为一个平行于现实世界、又与现实世界相互影响且始终在线的虚拟空间&#xff0c;它整合了多种前沿技术&#xff0c;为人们带来沉浸式的交互体验。而数字孪生&…

数据分析 之 怎么看懂图 一

韦恩图怎么看 ①颜色:不同颜色代表不同的集合 ②)颜色重叠部分:表示相交集合共有的元素 ③颜色不重叠的部分:表示改集合独有的元素 ④数字:表示集合独有或共有的元素数量 ⑤百分比:表示该区域元素数占整体的比例 PCA图怎么看 ① 第一主成分坐标轴及主成分贡献率主成分贡献…

手写数据库MYDB(一):项目启动效果展示和环境配置问题说明

1.项目概况 这个项目实际上就是一个轮子项目&#xff0c;现在我看到的这个市面上面比较火的就是这个首先RPC&#xff0c;好多的机构都在搞这个&#xff0c;还有这个消息队列之类的&#xff0c;但是这个是基于MYSQL的&#xff0c;我们知道这个MYSQL在八股盛宴里面是重点考察对象…

深入理解椭圆曲线密码学(ECC)与区块链加密

椭圆曲线密码学&#xff08;ECC&#xff09;在现代加密技术中扮演着至关重要的角色&#xff0c;广泛应用于区块链、数字货币、数字签名等领域。由于其在提供高安全性和高效率上的优势&#xff0c;椭圆曲线密码学成为了数字加密的核心技术之一。本文将详细介绍椭圆曲线的基本原理…

Intellij IDEA2023 创建java web项目

Intellij IDEA2023 创建java web项目 零基础搭建web项目1、创建java项目2、创建web项目3、创建测试页面4、配置tomcat5、遇到的问题 零基础搭建web项目 小白一枚&#xff0c;零基础学习基于springMVC的web项目开发&#xff0c;记录开发过程以及中间遇到的问题。已经安装了Inte…

Scrapy结合Selenium实现滚动翻页数据采集

引言 在当今的互联网数据采集领域&#xff0c;许多网站采用动态加载技术&#xff08;如AJAX、无限滚动&#xff09;来优化用户体验。传统的基于Requests或Scrapy的爬虫难以直接获取动态渲染的数据&#xff0c;而Selenium可以模拟浏览器行为&#xff0c;实现滚动翻页和动态内容…

sqlmap 源码阅读与流程分析

0x01 前言 还是代码功底太差&#xff0c;所以想尝试阅读 sqlmap 源码一下&#xff0c;并且自己用 golang 重构&#xff0c;到后面会进行 ysoserial 的改写&#xff1b;以及 xray 的重构&#xff0c;当然那个应该会很多参考 cel-go 项目 0x02 环境准备 sqlmap 的项目地址&…