Post on: 2024-4-16Last edited: 2024-5-8Words 00 min

type
status
date
slug
summary
tags
category
icon
password
😀
做了Crypto的全部题目,做了一些Misc和Re的基础题。

Crypto

Sign1n[签到]

对flag的比特补0,然后倒置,然后再进行简单运算,把流程逆一遍即可。

Sign1n_Revenge

创建环境以后直接用http访问,可以下载题目附件,然后和签到一样的exp打就行。

babyRSAMAX

光滑数分解n,e是形式,所以后边利用Cipolla来解。

x0r

题目是通过AES的ECB模式来加密iv来作为异或的key和明文异或,我们唯一未知的是AES的key,但是无所谓,我们可以利用接口让系统做加密iv的步骤。先输入1,得到iv和异或加密的flag,这也相当于给了我们flag的长度。然后输入2,输入iv和与flag长度相同值为0的16进制,这样就得到了异或的key,然后做一个异或即可。

Complex_dlp

复数域的dlp可以类似矩阵dlp转化成det ,转化为复数模长在实数域的dlp,p-1光滑,所以discrete_log可解。

Complex_rsa

通过Complex(p, q) * Complex(p, q) 可以构造两个方程把p和q解出来。后边是复数域上的rsa加密,e很小,可以类比群上的普通rsa,在mod p和mod q下开e次方再crt即可。在复数域下无法直接开方,考虑把复数的复数的实部和虚部设出来,然后展开9次方,利用实部和虚部建立两个方程,然后在mod p和mod q下求解然后crt。

happy_to_solve1

利用比特关系建立方程求解。

happy_to_solve2

从高位开始剪枝,每次把p和q的低位设置为最大或者最小和n比较,都不需要和n逐比特对照。

happy_to_solve3

来自论文Revisiting Wiener’s Attack – New Weak Keys in RSA? ,找到论文结论就能打了,大致思路就是当p和q高位相同的时候,可以找到一个连分数,做维纳攻击,并且d的界远高于维纳,大概是在0.324,实际上当p和q卡的没那么紧的时候0.34都是可以的。看过论文所以刚上题就秒了。

factor1

还是维纳的那套方法,估计连分数、维纳格都能做,但是二元板子应该是最简单的。

factor3

差不多的二元板子。

反方向的密码 相思

pad的数据和flag长度有关,那么爆破就能拿到这部分数据,然后利用小指数加密可以建立方程,可能根还是太大所以把flag头也用起来。

反方向的密码 情难

类似上一题,但是flag被拆成两段了,pad在中间,这样的话用二元copper来做,两段flag为两个未知数;要注意flag长度可能为奇数,并且把flag尾} 用起来。

fakeRSA

首先整个function可以看作是矩阵快速幂,这里可以问问chatgpt:
notion image
矩阵快速幂为:
我们现在就是需要求这个n,
,转为乔丹矩阵的话就是 ,整个问题转为:
我们把P和P^(-1)处理一下让整个矩阵幂转为这样的形式。这里存在的问题是左右都只有一个三维向量,不能把求出来,那么思路是对做两轮递推得到两个向量,同时也要对递推,这里就能在等式两边都构建3x3的矩阵了,也就可以求出来,然后利用线性方程组把n求出来。这一步可以参考tl2的博客:
notion image

Random_rr

2024bi0sctf的rr,套了个mt19937而已。

重生之我要当oi爷 pro

把题目的变量整理一下,可以得到一个维度为1214959的矩阵方程,这显然是没法用sage的solve解的,但这题特殊点在于可以用拉格朗日插值法,于是找到一个快速拉格朗日插值的板子,直接打就好了。

easy_ecc

可以参考RWCTF-babyCurve来做,不一样的地方在于y前面有个系数所以归一一下。

LCG_and_HNP

隐藏低位的LCG,经典的HNP格子打,然后得到seed预测key。

new_LCG

对于lcg1,相比于普通的lcg多了一项b*sum,而sum是前若干项的和,那么利用groebner_basis和四五组数据就可以把p解出来。对于lcg2,是eclcg,可以参考RCTF 2022 - ZimaB1ue - 博客园 (cnblogs.com)的is_this_lcg,完全一样的消元思路。

铜匠

思路在exp里面,应该还是挺清晰的,就不再多说了。

Misc

签到

公众号获取。

Game

google识图:
notion image

熊博士

Atbash Cipher,flag头大写,包括的内容小写。

ez_隐写

压缩包hex包含了好几个zip标识位,所以直接binwalk分离一下。得到一个png和另一个压缩包。改图片高度得到hint得到另一个压缩包密码。解开压缩包里面有个图片,提取盲水印得到flag。

TCPL

RISC-V程序,因此用qume配置一个RISC-V编译环境与运行环境跑一下程序即可。

zzl的护理小课堂

直接查看网页源码,js是这样的:
post请求flag.php即可。

ZIP神之套

ida64打开exe,得到字符串:xyctf????????ftcyx ,显然是掩码爆破,得到xyctf20240401ftcyx ,后边再用flag.zip作为明文来一次明文攻击即可。

真>签到

flag在压缩包的数据段。

Osint1

百度识图可以找到一个去过该地的xhs账号,有人在评论区给了地址。
xyctf{江苏省|南通市|滨海东路|黄海}

Osint2

根据时间15:10和洛阳龙门站,以及站牌上那个小小的开往泸州,可以找到G3293列车,景点直接一个个猜就好了。
xyctf{G3293|河南省|老君山}

Reverse

聪明的信使

定位字符串,然后移位密码解密。

喵喵喵的flag碎了一地

第一部分在字符串,第二部分是函数名,第三部分对函数交叉引用可以找到。

你是真的大学生吗?

定位程序关键部分:
notion image
可以看出前一部分是异或加密,后一部分是解密,加密过程为把flag的连续两字节进行异或。解密倒过来即可。

DebugMe

JEB普通调试模式即可看到flag。

Trustme

mydb.db文件异或0xff然后用SQLiteSpy打开查看数据。

ezmath

关于python的exe逆向,关于魔术头一般有三种方法:
1.anconda起一个对应版本的python去执行解包轮子
2.复制struct.pyc的头到源代码pyc最前面
3.找到对应版本的magic头(需要计算)加上去
对于3,可以用以下脚本:
本题恢复的py文件为:
是一个约束求解,对式子展开进行配平,发现常数项为0了,那么只能是平方项都为0。

📎 参考文章

💡
欢迎找我交流~
 

OT、baseOT、ROT和COT

🗒️OT、baseOT、ROT和COT

MPC中OT的基础原语。


首届高校网络安全管理运维赛

🗒️首届高校网络安全管理运维赛

中国教育技术协会举办的首届高校网络安全管理运维赛。