re

findme

image.png
调试可以知道0x401a6f的地址会变0x401866
image.png
查看0x40164c和0x401767可以得知是一个rc4加密,key为SETCTF2021。
动态调试记录下生成的密钥流,异或得到flag。

EasyRe

识别main函数中的花指令。
找到有效的指令。
image.png
动态调试可以知道参数a1是输入的内容,v4是一个固定的数组。
然后位运算不知道怎么逆,寄。(等会写来补充)

↑这样的移位运算基本上是没法逆的,吧
把程序扔进IDA,打开字符串窗口,拉到最下面就是flag
这flag什么寄吧格式
flag为fc5e038d38a57032085441e7fe7010b0

crypto

mostlycommon

一般通过RSA
源码给了e1、e2,隔壁txt给了n、c1、c2
经典共模攻击是吧,我直接掏出祖传代码乱鲨(
然后代码寄了
如果不清楚共模攻击的原理的话,显然不会明白为啥祖传代码失效了
那么下面是大家最喜欢的具体推导过程
由题得

Writeup | 陇原战“疫”2021网络安全大赛 - 图4

由裴蜀定理可知,必然存在整数Writeup | 陇原战“疫”2021网络安全大赛 - 图5Writeup | 陇原战“疫”2021网络安全大赛 - 图6,使得Writeup | 陇原战“疫”2021网络安全大赛 - 图7#card=math&code=e_1x%2Be_2y%3Dgcd%28e_1%2Ce_2%29&id=Ng6Db)成立
这里的Writeup | 陇原战“疫”2021网络安全大赛 - 图8Writeup | 陇原战“疫”2021网络安全大赛 - 图9可以通过扩展欧几里得算法得出
然后我们稍微构造一个新密文

Writeup | 陇原战“疫”2021网络安全大赛 - 图10

假设Writeup | 陇原战“疫”2021网络安全大赛 - 图11Writeup | 陇原战“疫”2021网络安全大赛 - 图12互质,即有Writeup | 陇原战“疫”2021网络安全大赛 - 图13,那么“新密文”就和明文长的一模一样,这就是大多数祖传代码的工作原理
然而这次的Writeup | 陇原战“疫”2021网络安全大赛 - 图14%3D2#card=math&code=e_3%3Dgcd%2865536%2C270270%29%3D2&id=lm32q),所以有Writeup | 陇原战“疫”2021网络安全大赛 - 图15
先试一下直接对Writeup | 陇原战“疫”2021网络安全大赛 - 图16开平方
看到了碳基生物能看懂的东西,收工!!
非常简单.jpg
如果开方的结果不太正常的话那就是Rabin加密了,具体解法略(
下面是解题代码

  1. import gmpy2
  2. from Crypto.Util.number import long_to_bytes
  3. n=122031686138696619599914690767764286094562842112088225311503826014006886039069083192974599712685027825111684852235230039182216245029714786480541087105081895339251403738703369399551593882931896392500832061070414483233029067117410952499655482160104027730462740497347212752269589526267504100262707367020244613503
  4. c1=39449016403735405892343507200740098477581039605979603484774347714381635211925585924812727991400278031892391996192354880233130336052873275920425836986816735715003772614138146640312241166362203750473990403841789871473337067450727600486330723461100602952736232306602481565348834811292749547240619400084712149673
  5. c2=43941404835820273964142098782061043522125350280729366116311943171108689108114444447295511969090107129530187119024651382804933594308335681000311125969011096172605146903018110328309963467134604392943061014968838406604211996322468276744714063735786505249416708394394169324315945145477883438003569372460172268277
  6. e1 = 65536
  7. e2 = 270270
  8. s = gmpy2.gcdext(e1, e2)
  9. s1 = s[1]
  10. s2 = s[2]
  11. if s1 < 0:
  12. s1 = -s1
  13. c1 = gmpy2.invert(c1, n)
  14. elif s2 < 0:
  15. s2 = -s2
  16. c2 = gmpy2.invert(c2, n)
  17. m = pow(c1, s1, n) * pow(c2, s2, n) % n
  18. m = gmpy2.isqrt(m)
  19. print(long_to_bytes(m))

flag为SETCTF{now_you_master_common_mode_attack}

misc

soEasyCheckin

全大写字母和数字,最后还有个等号,用base32解一下
变成了一堆十六进制,试着转一下字符串
然后就是扑面而来的社会主义核心价值观(
后面小半段没转出来,按十二位十六进制分开(对应两个汉字),把奇怪的地方手动改了一下,正常了
}3@8A]C07LZT$%4A~AU%7IO.png
搜一下核心价值观编码,解密得到flag
怎么这个比赛的flag格式也那么混乱
flag为SET{Qi2Xin1Xie2Li4-Long3Yuan2Zhan4Yi4}

SOS

这题能值八百多分,把我给震撼到了

是Minecraft题,1.7.10老人落泪
一进地图就是一堆循环触发的命令方块响着拨号音,右边是拨号盘一样的东西
1.png
这应该是说把拨号音识别出来然后在拨号盘上按出来就行了
接下来是传统艺能————开作弊改创造模式 (哈哈哈哈哈
然后右键就能看到命令方块里的命令了

playsound minecraft:0 master @a

按触发顺序每个命令方块正好是从minecraft:0到minecraft:9
上Minecraft Wiki查找playsound指令的说明,可以查得原音频文件的储存路径
找到.minecraft\resourcepacks\sound.zip\assets\minecraft\sounds\下,0.ogg到9.ogg就是我们的目标
然后慢慢听出来是哪个音就行了,可惜我听不出来 (太菜了),得换个办法
拨号音信号是由两个音频频率叠加成一个双音频信号(DTMF信号)得来的,所以看音频的频谱图识别出两个基频再查DTMF表就知道是哪个音了 (电信人DNA动了
借助Audition的频谱图功能人工识别结果如下

0.ogg->6    1.ogg->8    2.ogg->3    3.ogg->0    4.ogg->a
5.ogg->b    6.ogg->1    7.ogg->c    8.ogg->7    9.ogg->5

在拨号盘上拨出6830ab1c75
建议把压力板全拆了改摆红石块,不然太容易误踩了
2.png
flag为SETCTF{C0M3_4nD_he1P_mE}

打败病毒

又是Minecraft题,这边建议CTF新开一个大类叫Minecraft呢(大雾
一进来就在末地,要打的“病毒”就是末影龙
跟上题一样,赶紧切了创造模式,顺便整了把附魔钻石剑
打完龙之后进传送门,然后是终末之诗环节,按Esc就能跳过
嗯?这个终末之诗好像有点东西?
为了防止疏漏,上Minecraft Wiki查到了终末之诗文本的储存地址 .minecraft\versions\陇原战“疫”\陇原战“疫”.jar\assets\minecraft\texts\end.txt
因为原文空行太多,所以我把缩进都去了

§3恭喜你
§2PLAYERNAME
§3成功击败了冠状病毒
§2来到了这里
§3现在
§2你将获得你的奖励
§3仔细看
§611F9sACbBBBWKTiClYDtNF2yIEfThXdfIGPxF
§3Hint:2

开头的这些§2,§3,§6是Minecraft内置的颜色代码,要忽略掉
那么有效信息是11F9sACbBBBWKTiClYDtNF2yIEfThXdfIGPxFHint:2
然后我不会做了,寄(
在这里蹲个答案