我还是太菜了。
Forensics
感觉forensics是作为签到出的。
fake-geoguessr
JS文件里,base64解码。
cool-school
stegsolve不同通道查看。
spongebobo
根据题意可知,图片高度修改过,于是把高改大能够看见flag。
sneaker-zipper
直接用winrar解压的话,找不到flag。用unzip解压,可以看到这样一个文件:
把原始解压数据全部导出,用notepad打开能够看到flag tjctf{sneakers_with_zippers_are_hip_no?_874d174bb26fcf95}
出题人的脚本:
1 | from uuid import uuid4 |
Crypto
rsa-apprentice
最简单的rsa。
flimsy-fingered-latin-teacher
或许算是键盘密码的一种?把每个字符换成键盘上对应的左边字符即可。
factor-master
1 | #!/usr/local/bin/python -u |
chall1用rho或者直接遍历试除,yafu即可。
chall2费马分解,很快。
1 | def fermat(num): |
chall3显然是Pollards_p_1,也很快。
1 | def Pollards_p_1(N): |
mac-master
1 | #!/usr/local/bin/python -u |
md5并不安全,其中一个特性是当两个等长的字符串有相同的md5值时,后边同时拼接任何相同字符串之后的字符串,md值仍然不变。
所以只要找到两个长度相同且碰撞的字符串即可。
morph-master
1 | #!/usr/local/bin/python -u |
Paillier密码体制。本题需要对字符串Please ive me the flag进行加密,把密文传给服务器获得flag。但我们不知道加密参数r和g。题目给了一个密文:
我们只能由这个密文来构造目标密文。因为直到n,所以可以求出4模n的逆t。
计算4的密文c的t次方,再将其解密,会发现幂次上4被消掉了。
那么只需要计算4的密文c的m*t次方发送给服务器即可,解密时就只剩下m了。
1 | from Crypto.Util.number import * |
7sckp
1 | #!/usr/local/bin/python -u |
这里的aes的pad方式不是PKCS5/7,但由于seed = int(time() // 10)
,只要我们在连接服务器以后取一个time(),就能获取到和服务器同步的seed值(//10说明只要在10s内取time(),seed都和服务器一致)。那么利用seed就可以通过random生成同样的伪随机数序列(这里假设为0x01,0x02…)。
拿到服务器给的密文,可以先把密文前的iv分离出来。然后可以搜索剩余字符串中的最后一个0x01找到padding的起始位置。既然知道iv,那么只要获得cbc解密的中间值(和iv异或之前的值),再把中间值和iv做异或就能拿到flag。下面就是padding attack了,考虑加解密只填充一个字节的情况:我们可以让iv的值前15个字节全是0x00,爆破最后一个字节(遍历2^256次),只要解密出的字符串的最后一个字节为加密时的伪随机数序列的第一个即可(此时服务器返回值为“ok“),那么把当前iv的最后一个字节和0x01异或就能得到中间值的最后一个字节。
那如何获得倒数第二个字节?考虑加密时填充两个字节的情况:假设填充的是0x01,0x02,由于已知中间值最后一个字节,可以把它和0x02异或得到本轮iv的最后一个字节,那么现在对输入的iv的倒数第二个字节进行爆破,直到服务器返回”ok“,此时iv的倒数第二个字节和0x01的异或值即为中间值的倒数第二个字节。同理可以反复爆破出剩余的中间值,最后做异或得到flag。
环境关了,没办法用exp打了。
cmplex-secrets
1 | from sage.geometry.hyperbolic_space.hyperbolic_isometry import moebius_transform |
output:
1 | 0.751252475104902150054380260470082424940942078488589894835886382094520190155911685470371563701050697369544183678751477257366099792755542882738643885424403515309537713563954860359663092864297857722224211735174822128973163115308255633275717637048280034121430229730706501004373373606840613994093199272904 + 0.841861668516763747294345674363435037443728024638358025489205420413810104159006020506652639342846307992268857781065122156824070983948139347566280848043828162904529025108794173434070438994770903784077684729182119999999898429743502486564839408270440285915918786473949066441772595234741831309205651684568*I, 0.201820552659701567278699820457045288901739276475853715712764100364937770257073328213893265099577849805388343984823145356791212924649323204732529753602937115951408753746134803411134175204452068540445902455697100192364440968304237174405996380992768382752192891217816103133892621205190519839564725222336 - 0.423816958824499168732085508644057100988923673137297816050916269940199941289657589117016109479205180610293129190788130020334848589072754129840997885723883185873975039584829641029595055712803537604372394828956037589154549949135860267390135900885507020456790920944606711851387870845794071809212463826331*I |
纯数学问题了,就作为了解吧。
题目是一个默比乌斯变换,大致理解了下,就是一类从黎曼球面映射到自身的函数,可以用扩展复平面上的复数表示。
给了三组函数的映射值(z和f(z)),我们需要求出系数矩阵,然后计算kz对应的函数值。由于此函数的复比不变性:
可以推导:
所以:
1 | z1,w1 = 0.751252475104902150054380260470082424940942078488589894835886382094520190155911685470371563701050697369544183678751477257366099792755542882738643885424403515309537713563954860359663092864297857722224211735174822128973163115308255633275717637048280034121430229730706501004373373606840613994093199272904 + 0.841861668516763747294345674363435037443728024638358025489205420413810104159006020506652639342846307992268857781065122156824070983948139347566280848043828162904529025108794173434070438994770903784077684729182119999999898429743502486564839408270440285915918786473949066441772595234741831309205651684568*I, 0.201820552659701567278699820457045288901739276475853715712764100364937770257073328213893265099577849805388343984823145356791212924649323204732529753602937115951408753746134803411134175204452068540445902455697100192364440968304237174405996380992768382752192891217816103133892621205190519839564725222336 - 0.423816958824499168732085508644057100988923673137297816050916269940199941289657589117016109479205180610293129190788130020334848589072754129840997885723883185873975039584829641029595055712803537604372394828956037589154549949135860267390135900885507020456790920944606711851387870845794071809212463826331*I |