数论笔记
数论笔记垃圾Dawn_whisper的数论学习史
同余费马小定理
设 $a$ 为整数, $p$ 为质数,则 $a^{p-1}\equiv 1\ (mod\ p)$
可写为 $a^p\equiv a\ (mod\ n)$
可用于求逆元 $a*a^{p-2}\equiv 1\ (mod\ p)$
gcd相关
$gcd(a,b)=gcd(b,a)$
$gcd(a,b)=gcd(a-b,b)\ (a\geq b)$
$gcd(a,b)=gcd(a\ % \ b,b)$
$gcd(a,b,c)=gcd(gcd(a,b),c)$
$gcd(a,0)=a$
$lcm(a,b)=\frac{a\times b}{gcd(a,b)}$
拓展欧几里得考虑方程 $a\cdot x+b\cdot y=c$ ,a、b、c都是已知正整数
方程有解的充要条件为 $gcd(a,b)|c$
简化问题:考虑方程 $a\cdot x+b\cdot y=gcd(a,b)$ ,它的解为
$$\begin{cases}x=x_ ...
Many time pad attack
Many time pad attack前言看到了 2020HGAME week1 里的一道题,随手复现一下
题目懒得搭docker部署服务器了,就自己写个函数调用着假装交互
1234567891011121314151617181920import osimport randomimport stringimport binasciiimport base64from flag import flagflag = flag.encode()assert flag.startswith(b'flag{') and flag.endswith(b'}') flag_len = len(flag)def xor(s1, s2): #assert len(s1)==len(s2) return bytes(map((lambda x: x[0] ^ x[1]), zip(s1, s2)))def get_data(): random.seed(os.urandom(8)) keystream = ...
Summary of RSA Factorization Algorithm
Summary of RSA Factorization Algorithm爪巴了,数学知识它不进脑子啊
Pollard's p − 1已知 $N=p\cdot q$ ,我们的任务是分解出其中的两个质因子
首先我们找到这样的一个 $L$ 满足 $L\mid p-1$ 且 $L\nmid q-1$ ,也就是存在整数 $i,j,k(k\neq0)$ 满足 $L=i\cdot (p-1)=j\cdot (q-1)+k$ ,由费马小定理可知$$a^L=a^{i\cdot (p-1)}=(a^{p-1})^i\equiv 1^i\ (mod\ p)\equiv 1\ (mod\ p)$$$$a^L=a^{j\cdot (q-1)+k}=(a^{q-1})^i\cdot a^k\equiv 1^j\cdot a^k\ (mod\ q)\equiv a^k\ (mod\ q)$$
所以 $p\mid a^L-1$ 而 $q\nmid a^L-1$ ,那么我们就可以得到 $p=gcd(a^L-a,N)$
听起来 ...
Write up for hackergame2020
Wp for hackergame2020最后几天没时间玩了,屯的flag都没交,哭哭
但u1s1,shallow师傅推荐的比赛确实质量高,shallow,永远滴神!
0x01 签到F12,把max改成1,直接拉满后点提取,flag到手
0x02 猫咪问答++开 幕 雷 击
梅 开 二 度
告辞!
用burp对这俩阴间空进行爆破,然后得到flag
0x03 20482048?看我玩过去!
对不起打扰了
选择查看网页源代码,发现有以下提示信息
1234<!-- changelog: - 2020/10/31 getflxg @ static/js/html_actuator.js-->
然后点进去html_actuator.js,搜索关键词win,找到以下内容
12345if (won) { url = "/getflxg?my_favorite_fruit=" + ('b'+'a'+ +'a'+'a').toLowerCase(); & ...
MiaoTony's 2020春节套娃题
Wp for MiaoTony's task2020年10月20日,结识了Misc神Miao师傅,死而无憾了
套,都可以套
写在前面人都套傻了还写个锤
Task 0x00题目链接
Task 0x0112345678910111213141516自由诚信自由自由文明和谐文明自由爱国自由敬业和谐自由自由自由平等自由自由爱国自由敬业平等爱国平等和谐和谐公正和谐和谐自由友善公正自由友善自由自由友善法治自由公正平等爱国平等爱国自由敬业和谐和谐和谐和谐自由友善敬业平等富强自由平等平等爱国自由爱国平等民主和谐公正自由友善公正和谐文明自由公正和谐平等自由友善自由平等自由自由法治平等民主和谐和谐平等和谐自由敬业平等公正和谐文明自由自由自由诚信民主自由诚信文明和谐和谐自由平等自由友善敬业自由诚信自由平等自由自由法治平等民主和谐自由自由友善公正自由友善法治自由友善法治平等公正和谐和谐平等法治平等法治平等敬业自由诚信文明自由诚信和谐自由诚信自由自由友善自由平等法治自由法治平等法治平等友善自由平等自由自由平等自由友善爱国平等友善自由平等爱国平等爱国自由法治自由友善公正和谐和谐平等自由自由友善法治平等 ...
AES.CBC Paddind Oracle Attack
AES.CBC Paddind Oracle Attack辣鸡Dawn_whisper成长史
先挂几个我学习时看的博客
CTFwiki The Padding Oracle Attack
适用条件
加密方式为AES.CBC模式
已知加密后的cipher
已知加密时初始的iv
攻击原理如果明文过长,需要一个块一个块的进行解密,只是iv发生了变换,其中的过程一模一样
对于每一块的明文,从后向前一位一位的解密
先看CBC经典图
在加密时$$C_i=E_k(P_i⊕C_{i−1})\ C_0=IV$$
在解密时$$P_i=D(Ci)⊕C_{i−1}\C_0=IV$$
攻击实现存在一个服务器,会返回密文解密后的正确与否(padding),随后返回解密的状态,我们就可以通过该种方式取得加密后且与iv异或之前的中间态I,那么我们发现I=C⊕P,而C已知,我们就可以通过异或来得到原来的明文P,所以接下来的主要矛盾即是求得这个中间态I。
我们选择构建iv=\x00*16,将这个iv发送给服务器后会进行padding测试,假设P的最后一位为X,那 ...
Moectf2020's wp for Crypto
Moectf2020’s wp for Crypto写在前面 虽然人被hidden了,但这么好的题总得写篇wp纪念一下,师傅出题真的好强,有些题目做法非常巧妙,而我当时第一次解题的算法极度丑陋,听过师傅的预期解才知道自己有多蠢,打完下来真是学到了不少新思路和新想法,果然我还是太菜了啊qwq shallow,yyds!
crypto入门指北
下载文件flag就在后头
1flag: moectf{I_L0Ve_M@th_AnD_CRypT0}
Stream
下载下来看一下加密脚本,看起来事先异或然后base64编码一下,那就反着搞一边,因为太懒所以就全部输出人工检验
sol.py
123456789import base64a = b'Og9hNAFrCjU9aQ4+C2psLzxpYRE6azw+FmphPgk2EjQBDyw+DWsKIQIPHiwAaBYoOx8wNBU2aGU='b = base64.b64decode(a)c = str(b,encoding='utf-8')print(c)for xor in ...
RSA parity oracle
RSA Parity OracleDawn_whisper和他的辣鸡代码成长史(雾
先挂个CTFwiki的链接,如果能看懂就不用接着往下看我这个垃圾博客了
适用条件搬一段wiki上的原话:
1假设目前存在一个 Oracle,它会对一个给定的密文进行解密,并且会检查解密的明文的奇偶性,并根据奇偶性返回相应的值,比如 1 表示奇数,0 表示偶数。那么给定一个加密后的密文,我们只需要 log(N) 次就可以知道这个密文对应的明文消息。
说的是个啥玩意
简单来说就是有个服务器,他会提供一个不完整的解密功能,而不完整体现在哪里呢?这个服务器只会提供给你解密之后的数据的二进制的最后一位(你可以理解为他只返回明文m%2之后的结果),那么我们可以通过分析返回的这个值来判断明文m与n之间的关系,进而可以推出m。
原理第一步我们已知$c = m^e(mod n)$,那么我们第一次给服务器发送$c\cdot2^e$,接下来服务器会计算$(c\cdot2^e)^d=c^d\cdot2^{e\cdot d}=2\cdot m$,所以服务器返回的是2m%2的结果,接下来划重点: ...
Moectf2020's wp for Misc
Moectf2020’s wp for MiscBB,yyds!
我写出来的miscBB的题解基本都有了,我这里就不在赘述,详情点击这里去看神的blog吧
其他题两只企鹅题目下载下来之后是个png,Linux下binwalk一下,发现有里面有个压缩包,顺手foremost出来。
打开Zip发现有密码并且爆破无果,应该是把密码隐写进了png里。
010editor打开搜索关键词zip_pass发现密码。
把里面的pyc文件提取出来之后,uncompyle6反编译后发现py文件分为两部分,前一个部分是用turtle画了个企鹅好像,后一个部分发现flag被AES加密且需要我们输入秘钥
但是这是Misc题又不是Crypto题算你:horse:的秘钥,显然这个pyc文件有猫腻,pyc文件的隐写使用了stegosaurus隐写,解密之后即可拿到key。
Key都有了,不是随便搞flag吗
最终flag:
1moectf{Th3_K3Y_H1de_1N_PYtH0n_ByT3c0d3}
没做出来的两个博客加起来就剩下两个恶臭题目闪 电 风 暴和Show off了, ...
Hello_my_blog
This is just a text for the blog.

