Hgame25
Hgame 2025 Writeup
0. Introduction
之前那两周学同源相关内容 + 练车,导致Hgame没怎么看,然后开学后Hgame刚好结束,2月18日用一天半做了一下题,只能说跟21年22年相比,貌似确实难了很多。。。。
因为题目是18日做的,所以就不区分第一周第二周了,直接按题目分数排序了。
1.Ancient Recall(4pts,144sol)
先看看题目代码:
1 |
|
其实这个题虽然写了一大堆,但其核心部分就是要根据最终拿到Value,求出原始的Value,最终可以直接得到flag。
注意到这样的递推式:
1 |
|
该递推式执行了250次得到了最终的结果。可以发现这就是一个线性递推,尝试构建:
那么求原始值就是求左边矩阵的负250次幂乘上最终的Value向量,然后根据题目组flag的方式组成flag就OK了。
1 |
|
2.SuprimeRSA(6pts,61sol)
好家伙,这竟然是个没见过的玩意,先看看题目代码。
1 |
|
题目的素数生成方式有点特殊,但你可以看出明显的小量
当时先把 n%M
的值还真能分解成两个素数的乘积)。。。
然后瞄了一眼week 1的WP,结果发现竟然是ROCA Attack。。。好家伙,上来就来论文题是吧?
那就点击 这个链接 下载github攻击代码,改改攻击参数,
1 |
|
flag:hgame{ROCA_ROCK_and_ROll!}
看完第二个开始预感情况不妙了
3.Intergalactic Bound(7pts,45sol)
好家伙,这又是个啥题?THCurve又是啥?
1 |
|
然后自己去查了一下,原来这种Curve的形式是:
呃,奇怪的知识又增加了。
然后搜THCurve,搜到了羊城杯有过类似的题目,就是把这个曲线转成椭圆曲线的形式,然后做离散对数就OK了。
所以这个题最难的还是搞懂这是个啥曲线,然后怎么转成椭圆曲线。
代码就直接偷网上羊城杯那个题的wp了。
1 |
|
4.ezBag(7pts,75sol)
终于见到一个还算熟悉的题了,背包问题:
1 |
|
题目给了
背包问题的格构造方法在 2021 年的 LatticeNotes5 中已经提到过了,回顾一下:
上面的矩阵中:
这边插播一句:其实也可以将
然而,题目给了
然而,即使是这样,仍然解不出正确向量。考虑到最后 4 列在目标向量中的分量为
1 |
|
这个mask虽然没用到,但其实有的时候也是会用到的:因为目标向量有时会多个
5.sieve (7pts,140sol)
一看就是个oi✌出的题,可以看出,我们要求出
1 |
|
因此正解是素数筛和杜教筛,但后者我不会写,考虑到这个值为
不过据说sage中可以直接枚举 euler_phi
并求和,在服务器上单核跑的时间为 40 分钟左右,反正也能出。
1 |
|
求出需要的两个值之后,直接解就OK了
1 |
|
6.SPiCa(8pts,21sol)
看到题目中
1 |
|
正交格主要是用于解决
题目中,我们得到向量
我们先回顾一下线性代数的知识(真巧,18号写这个,19号就要学矩阵论)
对于一个
行空间:
中,所有 构成的空间,此时 的每一行构成空间的基底向量。 列空间:
中,所有 构成的空间,此时 的每一列构成空间的基底向量。 左0空间:满足
的所有 构成的集合,在sagemath中为 A.left_kernel().matrix()
。其个数为, 为 中互相线性无关的行向量个数。 右0空间:满足
的所有 构成的集合,在sagemath中为 A.right_kernel().matrix()
。其个数为, 为 中互相线性无关的列向量个数。
性质:行空间和右0空间正交,列空间与左0空间正交。
由于题目中
写成矩阵的形式就是(为方便展示,以三个分量为例):
很明显,为了求出
1 |
|
这样,我们就得到了向量
1 |
|
然后,我们可以用
1 |
|
我们期待找出一个仅包含
那么最后的exp如下(当然,如果解不出来,可以对
1 |
|
9.总结
今年Hgame比21年和22年的难太多了,0xGame2024也是,感觉难度和20,21年不是一个档次的(当时21年我还怕出难了,Predict1和Predict2借鉴了21年Hgame的夺宝大冒险,其实就是直接抄的,但最终看来题目还是比0xGame2020难)。
Hgame2022的题我附件还在(因为那个时候我CTF已经处于一个半退役的状态了),并且我手中还保存了当年SACC寒假打卡的材料,看了看学弟Schen交给我的打卡记录,感觉题目和21年的相仿,并且22年的题目我那个寒假也做了一些,貌似四周的题目也都是一天AK的(但当时好像就没打理博客了,所以找不到22年的做题记录,后面有空补一篇)。。。
不过话说回来,这几年CTF咋出了这么多东西,我CTF两年的空窗期究竟发生了什么?