CryptoCTF 2025 getting there 分类 团队解题 writeup 之一
这次 getting there 分类比赛的时候我看了两题,幸亏队友给力,帮我解决了其他的题目。此处要感谢队友,同时也要 继续批判临场背刺的叛徒
ASIS Primes题目描述记消息为 $m$。服务器先生成一对 $n=512$ 位的素数 $p, q$,$e=65536$,然后有两个选项:
RSA 加密 服务器根据当前素数 $p, q$,计算 $N=pq$,$c=m^e \bmod N$
参数修改 服务器接收我们的输入 $p’, q’$,并执行检验: a) $p’, q’$ 为素数 b) 满足关于 $p, q$ 转化为字符串之后均为可见字符串,并且满足某个 随机长度 的消息格式检验 123456789101112def is_valid(msg): msg, charset = msg.decode(), string.printable[:63] + '_{-}' return all(_ in charset for _ in msg)pinit = f'CCTF{{7H!S_iZ_th3_f1RSt ...
CryptoCTF 2025 easy-peasy 分类 团队解题 writeup
这次 easy-peasy 分类比赛的时候我一道都没看着,全被队友秒了,这次借写 writeup 的时候我们一起来看一下
要懂得把球传给队友(叛徒除外)
Interpol题目描述记消息为 $m$,其长度为 $n$。先生成一系列的点 $(x_i, y_i)$,分为两部分:
第一部分 点 $(x_i, y_i)$ 满足:
\left\{\begin{aligned}x_i &= -(1 + (19 i - 14) \bmod n) \\
y_i &= m_{(63 i - 40) \bmod n}\end{aligned}\right.其中 $0 \le i < n$
第二部分 点 $(x_i, y_i)$ 满足 $0 \le x_i < 313$,$y_i$ 为一个负的有理数,其中 $i \ge n$
将这两部分点放在一起,构造一个 拉格朗日多项式。已经有这个拉格朗日多项式,求消息 $m$。
我的解答主要难度在于看懂题目代码在赣神魔。
其实把题目代码中 DATA 的值给打印下来,也能猜到八九不离十。
所以如果我们有那个多项式,并且也知道第一部分的点生成规律是怎么样的话,其实就 ...
CryptoCTF 2025 战果速报
一九九七年
我学会了开汽车
上坡 下坡
轧死了一千多
警察来抓我
我跑到女厕所
女厕所的灯
没 有 开
一脚掉到茅屎坑
和粑粑交朋友
点此欣赏芜湖童谣
这周末,一年一度的 Crypto CTF 如期举行。1997 如之前几年一样穿上发病棉袄,和队友们一起参加周六下午 14:00 开始的 Crypto CTF。
有一说一,今年的时间安排对 GMT+8 时区太友好了,之前打这玩意儿还得通宵
在注册队伍的时候,哥们本来想取出队伍全名来,但是又担心像去年那样被制裁:
所以只能先去问好,结果就得到了否定的答复:
太可惜了
然后临近的时候,1997 居然出了个临时跳车的 内鬼!
在这里强烈谴责并(经过 1997 队内民主投票通过后)给予制裁!
最后,1997 差五题 AK,屈居第四。老规矩,先鸣谢下队友:
沛公 @peigong
石卡库 @sh1kaku
To1in @To1in
V @Vanish
等风 @等风
Xenny @Xenny
Tover @Tover.
三顺七 @March7th
未央 @weyung
我们中出了个叛徒!
虽然其中一部分人没有做题(或者做不出题) ...
如何构建高效时序 Keras 数据集:以 tf.data pipeline 分析为例
众所周知,keras 数据集的实现主要依赖于两派:
一派为 keras 提供的数据集相关接口,其中包括已经封装好的几个 toy dataset,还有一些 预处理函数
虽然预处理函数被标成 deprecated,但是貌似函数功能没变,只是被挪了个地方,应该都是进到 keras.utils 里面了
另一派为显式实现 tf.data pipeline
官方推荐用 tf.data 去构建 TensorFlow 输入流水线,更多参考 官方教程
先给一个太长不看的结论:
如果图省事+不需要定制需求的话就用 keras 自带的接口就好
实在想折腾的话建议优先关注 mini-batch 的 batch_size 设置
然后注意向量化运算的利用
问题描述工地上涉及到的数据集是比较客制化的时序数据集,可以描述为下面的场景
输入 X 和 y,以及下标序列 index
X 的 shape 为 (num_samples, num_features), y 的 shape 为 num_samples
设置时间序列长度为 sequence_length
对于每个 index 中的元素 i,抽出 (X[ ...
再看交叉熵
虽然作为一个炼丹老手(调包侠),我们肯定知道了在分类问题中,我们一般用交叉熵来刻画两个概率分布之间的“距离”,通过最小化交叉熵(而不是回归问题中的 $p$-范数)来得到能输出最接近目标分布(label)的,输入特征到概率分布的映射 $f_\theta$(又称模型)。那么为什么交叉熵最小化时预测分布能最接近目标分布?最小化交叉熵之后交叉熵的取值应该是怎么样的?现在马上就来水一篇关于这个问题的文章
熵为了热身,我们还是介绍熵(by DeepSeek R1):
给定一个离散的概率分布 $P = \{p_1, p_2, \dots, p_n\}$,其中 $p_i \geq 0$ 且 $\sum_{i = 1}^n p_i = 1$,这个概率分布的熵 $H(P)$ 定义为:
H(P) = -\sum_{i=1}^n p_i \log_2(p_i)其中,对数底数通常取 2,表示熵的单位为比特(bit)。如果某些 $p_i$ 为 0,则 $p_i \log_2(p_i)$ 视为 0,因为 $\lim_{x \to 0^+} x \log_2(x) = 0$。
顺便补充一下熵的物理意义(感觉挺玄的 ...
如何将 keras 模型转换成同样的 pytorch 模型
任务描述这个神奇的任务来自于工地上的一个奇葩需求:之前的一些基于 GRU 的 keras 模型需要成等价的 pytorch 模块,要求
模型权重和结构需要保持一致
模型需要嵌入一个更大的模型结构中,作为一个子模块,以进行后续训练
其中样例 GRU 用 keras functional API 构建,模型结构为:
123456789101112131415161718tf.keras.utils.set_random_seed(4396)X = tf.keras.layers.Input(shape=(60, 78), name='factor')x = Xx = tf.keras.layers.GRU(64, return_sequences=True, bias_initializer='glorot_uniform')(x)x = tf.keras.layers.GRU(64, ...
如何科学地在 keras 中构建模型
在 pytorch 中,我们一般通过继承 torch.nn.Module 类来构建模型,将子模块在构造函数 __init__ 中初始化,并在前向传播函数 forward 中,利用先前定义的子模块,定义网络的计算。
但是在 keras 中,事情并没有那么简单。诚然,一般的教程都会以简单的模型来开始;但是我们并不满足于简单的模型,所以会介绍到更复杂的 API。先说结论(太长不看):
简单模块用 Sequential 足矣
稍复杂网络结构用 functional API 构建网络
若非必要,不建议 使用继承类的方式构建网络
注意:以下基于 keras 2.X API 探讨,部分内容可能过于老旧
起手式:Sequential如果是能简单到能串糖葫芦的模型,那么直接用 Sequential 就行了,譬如下面的例子就是把三个线性层串在一起:
1234567891011121314import kerasfrom keras import layers# Define Sequential model with 3 layersmodel = keras.Sequential( [ ...
CryptoCTF 2024 tough 分类 团队解题 writeup
这次 tough 分类配合得不是很好,最后一个解方程的题目想复杂了,被他的题目设置有点弄晕了,所以到结束的时候都没有做出来。配合得不是很好~
Capac题目描述题目基于某一种神奇的曲线:
x^3 + c y^3 + c^2 z^3 - 3 c x y z = 1其中,如果 $z=0$ 的话(也就是题目的生成点 $G$ 满足的条件),$c = (1-x^3) / y^3$。
事实上,上面那个结论就是把 $z=0$ 代入到曲线定义式上面化简得到
然后定义点 $P(x_1, y_1, z_1)$ 和 $Q(x_2, y_2, z_2)$ 的加法:记 $R(x_3, y_3, z_3)=P+Q$,则
x_3 = x_1x_2 + c (y_1z_2 + y_2 z_1)y_3 = x_2y_1 + x_1y_2 + cz_1z_2z_3 = y_1y_2 + x_2z_1 + x_1z_2已知 $n = p^4 q^6$,$P(m_1, m_2, 0)$,计算 $Q=eP$。已知点 $Q$ 的坐标以及 $e$ 的值,求 $m_1, m_2$。
我的解答所以关键在于,求出该曲线的阶。
经过一些尝 ...
CryptoCTF 2024 easy 分类 团队解题 writeup
这次 easy 分类比赛的时候我当时看了一道 MD5 的,结果感觉很谜语,就没去仔细看了。要懂得把球传给队友
那么赛后就复盘一下
Alibos题目描述私钥 $s_k$ 为 $d_s$ 位十进制数,公钥 $p_k$ 可被写成如下形式:
p_k = \lfloor 10^{d_s} \left( \sqrt{s_k} - \lfloor \sqrt{s_k} \rfloor \right) \rfloor记 $p_k$ 为 $d_p$ 位十进制数
加密算法:
在 $m$ 的十进制表示中在右边加上很多个 1,使其成为 $d_p$ 位十进制数;
计算 c = \left( p_k + d_p^2 m \right) \bmod 10^{d_p}
给出 $p_k$ 和 $c$,试求 $m$。
我的解答首先可以求出 $d_p$ 的值,然后直接求出 $m$ 的值即可:
m = \left( c - p_k \right) d_p^{-2} \bmod 10^{d_p}代码如下:
123456789from Crypto.Util.number import *pkey = 85824355125 ...
CryptoCTF 2024 hard 分类 团队解题 writeup 之一
这次 hard 分类的题目难道是碳基生物能整出来的活儿???
Chochol题目描述题目基于 ECC:
E: y^2 = x^3 + ax + b128bit 素数 $p$ 和 $q$ 均满足 $p \equiv q \equiv 3 \pmod{4}$,$a$ 取随机,$b = 0$。
$E_p$ 和 $E_q$ 分别是 $E$ 在 $GF(p)$ 和 $GF(q)$ 下的情形。
生成元 $G_p$ 和 $G_q$ 的横坐标均为 2024。(MAN!)
然后有一个未知的 $s$,$H_p = s G_p$,$H_q = s G_q$
题目对明文的加密采用 RSA:
n = pqc = m^s \bmod n已知 $G_p, H_p, G_q, H_q, c$,求 $m$
我的解答首先是求出 $a, p, q$ 这三个值。以 $p$ 为例,将 $G_p(x_1, y_1)$ 和 $H_p(x_2, y_2)$ 代入椭圆曲线方程:
\left\{\begin{aligned}y_1^2 = x_1^3 + a x_1 \\
y_2^2 = x_2^3 + a x_2\end{aligne ...