极客大挑战 2024 Crypto复现
本文是关于极客大挑战2024 Crypto方向的部分题目复现,本次复现主要目的是刷题,因此并没有写详细的解题步骤,总结来说,这个比赛的题目难度都不是很大,覆盖面较广,适合新手练习(゚∀゚) 共模攻击题目: 123456789101112131415161718192021from Crypto.Util.number import *from secret import flagp,q = [getPrime(1024) for _ in range(2)] n = p*qe = [getPrime(10) for _ in range(2)]m = bytes_to_long(flag)c = [pow(m, e[i], n) for i in range(2)]print(f'n = {n}')print(f'e1 = {e[0]}')print(f'e2 = {e[1]}')print(f'c1 = {c[0]}')...
L3HCTF 2025 WriteUp
本文是对L3HCTF 2025的复现,包括Crypto和MISC两部分,记录了大概的做题过程,如有问题欢迎随时提出交流(^_^) CryptoEzECDSA题目: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748import hashlibimport randomfrom ecdsa import NIST256p, SigningKeyclass FlawedNonceGenerator: def __init__(self, n): self.n = n self.a = random.randrange(1, n) self.b = random.randrange(1, n) self.c = random.randrange(1, n) self.last_k = random.randrange(1, n) def generate_nonce(self): ...
Crypto基础篇-PEM文件
概念PEM:Privacy Enhanced Mail,即增强隐私邮件,是一种主要用于SSL/TLS通信、数字签名、加密通信等领域的文件格式。 DER: 是一种广泛用于各种加密和安全通信协议中的二进制编码格式,尤其是X.509证书和PKCS#8私钥的存储和传输中。 关系: PEM是DER证书的base64编码格式 类型根据传输的内容不同,PEM能被分为多种文件,主要包括以下三种 1.证书123-----BEGIN CERTIFICATE-----(证书内容的base64格式)-----END CERTIFICATE----- 2.公钥123-----BEGIN PUBLIC KEY-----(公钥的base64格式)-----END PUBLIC KEY----- 3.私钥123-----BEGIN PRIVATE KEY-----(私钥的base64格式)-----END PRIVATE KEY----- 解析示例: 123456789101112131415-----BEGIN RSA PRIVATE KEY-----MIICXAIBAAKBgQDnsN1F66m...
电子取证-长安杯2021 学习记录
题目题目描述2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导裸聊,下载了某“裸聊”软件,导致自己的通讯录和裸聊视频被嫌疑人获取,对其进行敲诈,最终金某不堪重负,选择了报警;警方从金某提供的本人手机中,定向采集到了该“裸聊”软件的安装包–zhibo.apk(检材一),请各位回答下列问题:(题目 中需要通过分析出来的答案对检材二三四五解压,解压密码为IP的情况,需要在密码后增加-CAB2021,例192.168.110.110-CAB2021) 检材使用VeraCrypt挂载,挂载密码为 12021第三届CAB-changancup.com 第一题请计算检材一Apk的SHA256值使用HashCalc计算检材一-zhibo.apk的SHA256的hash值 13fece1e93be4f422c8446b77b6863eb6a39f19d8fa71ff0250aac10f8bdde73a 第二题该APK的应用包名为使用jadx反编译,查看AndroidManifest.xml中的package便是应用包名plus.H5B...
Crypto基础篇-MT19937
简介梅森旋转(Mersenne Twister)是一个PRNG(伪随机数发生器),基于有限二进制字段上的矩阵线性递归,可快速产生高质量的伪随机数,周期为$2^{19937}-1$,也就是19937bits。python中的random库使用的便是这种算法。 实现步骤: 获得基础的梅森旋转链 对于旋转链进行旋转算法 对旋转算法所得结果进行处理 涉及变量: $w:$ 加密长度,以bit为单位,$w$位整数 $n:$ 递归长度 $m:$ 周期参数,用于第三阶段的偏移量 $a:$ 旋转矩阵的参数 $r:$ 低位掩码,即低位要提取的位数 $f:$ 初始化旋转链所需参数 $b,c:$ TGFSR的掩码 $s,t:$ TGFSR的位移量 $u,d,l:$ 额外的梅森旋转所需要的掩码和位移量 加密方法1.初始化将传入的seed赋值给$MT_0$作为初始值,并且递推得到旋转链递推式: $MT_I=f\times [(MT_{i-1})\oplus((MT_{i-1})>>(w-2))]+i$ 2.旋转算法连接$MT_i$的高$w-r$位和$MT_{i+1}$的低$r$位,...
Introduction To Modern Cryptography学习随笔
在老师的推荐下,我学习了《Introduction To Modern Cryptography》一书的部分内容,本文用来记录阅读过程中的一些随笔,可能会有些潦草,如果往后有了更深的认识,会回来继续完善。 这是我第一次大篇幅阅读英文书籍,刚开始读确实比较难以接受,因为要频繁地搜索一些单词含义,有时候一些地方中文翻译之后与原文含义相差甚远,因此还是硬着头皮大概过了一下原文。读的过程中我发现本书会花费大量的篇幅去论述一个定义,很适合初学者去接触理解每个定义的深层次含义。 3.私钥密码3.1 计算安全性计算安全相对于信息论安全(完美安全)包含两个放松 仅针对有效攻击者(合理时间或有限资源) 允许攻击者有较小概率成功(概率足够小,可忽略不计) 3.1.1 具体方法计算安全的具体方法通过明确限定时间和计算资源下,攻击者的最大成功概率,来量化加密方案的安全性。具体的安全性定义形式如下: 如果任意一个时间上限为$t$的攻击者都不能以成功概率高于$\epsilon$的概率破解加密方案,这个方案便是$(t,\epsilon)-安全$ 的。 3.1.2 渐近方法具体安全性方法存在一些技术和理...
XYCTF 2025 Writeup
XYCTF 2025赛题复现 CryptoComplex_signin题目: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071from Crypto.Util.number import *from Crypto.Cipher import ChaCha20import hashlibfrom secret import flagclass Complex: def __init__(self, re, im): self.re = re self.im = im def __mul__(self, c): re_ = self.re * c.re - self.im * c.im im_ = self.re * c.im + self.im * c.re return Complex...
Crypto基础篇-LCG
简介LCG: 即线性同余生成器,形式为$X_{n+1}\equiv aX_n+b\mod m$该问题总结来说的常见考点: 求$X_0(seed)$ 求$b$ 求$a$ 求$m$ 非连续 $X_n$高位泄露我们接下来逐个分析求解, 求$X_0(seed)$条件: 已知$a,b,m,X_n$分析:$\because X_{n}\equiv aX_{n-1}+b \mod m$$\therefore aX_{n-1}\equiv X_n-b\mod m$$\therefore X_{n-1}\equiv a^{-1}(X_n-b) \mod m$依次类推,便可以求得$X_0$代码实现: 1234567891011from Crypto.Util.number import *a=b=m=X_n=inv_a=inverse(a,m)for i in range(n): X_n=inv_a*(X_n-b) %mseed=X_nprint(seed) 求b条件: 已知$a,m,X_n,X_{n+1}$分析:$\because X_{n+1}\equiv aX_n+b \mod m$$\...
RSA题型汇总
RSA是每个新手都要跨越的第一道坎,相信你也经常遇见奇奇怪怪的RSA题型,这里记录了我遇见的各种题型,难度不分先后,随时更新。 dp泄露(dp=d mod p-1)分析:$\because dp\equiv d \mod p-1$$\therefore edp\equiv ed\mod p-1$$\because ed \equiv 1 \mod (p-1)(q-1)$$\therefore edp+k_1(p-1) = 1+k_2(p-1)(q-1)$$\therefore edp=(p-1)[k_1+k_2(q-1)]+1$$\because dp<p-1$$\therefore 令A=k_1+k_2(q-1),有e>A$$\therefore A\in (0,e)$$\because 转换得p=\frac{edp-1}{A}+1$$\therefore 遍历A(此时A不等于0)\in(1,e),找到能整除的A,进而计算出p$代码实现: 12345678910111213141516171819202122from...
MISC基础篇-Brainfuck
今天我们来学习一下Brainfuck语言以及Ook!语言,它们是MISC中的基础知识,一般会出在签到题。 BrainFuck介绍Brainfuck是最小的,图灵完备的语言。 图灵完备可以简单理解为任何可用算法解决的问题,都可用这个编程语言去解决。 结构: Brainfuck是由一个指针和一个数组组成,如下 12指针: ↓数组:0 0 0 0 0 0 0 0 0 组成: 它只由8种字符组成 >: 指针向右移动一格。 <: 指针向左移动一格。 +: 使指针当前格的字节数加1。 -: 使指针当前格的字节数减1. .: 把当前格数按ASCII表输出到终端。 ,: 接收一个字节的输入,将其值存储在数据指针的字节中。 [: 当前值为0时,程序跳转至与之对应的]之后;否则程序正常执行。 ]: 程序跳转回与之对应的[处。 编程实现1.表示字母’A’已知A的ASCII对应值为65,想必你一定会想到下面的表示方法: 1+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. 虽然有点蠢,但不失为一...















