[ACTF新生赛2020]crypto-classic0
提示压缩包密码是小Z童鞋的生日,可以知道是8位数字。爆破得到密码为:19990306,拿到classic0.c:
#include<stdio.h>
char flag[25] = ***
int main()
{
int i;
for(i=0;i<25;i++)
{
flag[i] -= 3;
flag[i] ^= 0x7;
printf("%c",flag[i]);
}
return 0;
}
根据它反写解密脚本即可。
c = "Ygvdmq[lYate[elghqvakl}"
flag = ""
for i in c:
i = ord(i)^0x7
i = i+3
flag = flag+chr(i)
print(flag)
[ACTF新生赛2020]crypto-classic1
根据hint:
哇,这里有压缩包的密码哦,于是我低下了头,看向了我的双手,试图从中找到某些规律:
xdfv ujko98 edft54 xdfv pok,.; wsdr43
拿手在键盘上画画,明文为圈起来的字符。可以得到压缩密码:circle
解压得到维吉尼亚密文:SRLU{LZPL_S_UASHKXUPD_NXYTFTJT}
已知flag的前四个字母格式为actf,对其进行维吉尼亚加密得到spsp,然后去重,得到密钥为:sp
解密得到: actf{tkxw_a_fidpvffxo_vigenere}
下面这一步还没太明白,参考了别的师傅的WP,可能就是猜的吧
密文:fidpvffxo
密码:dx
明文:classical
密文:tkxw
密码:xd
明文:what
马克一下TaQini师傅的WP
最后可以得到flag为actf{what_a_classical_vigenere}
[ACTF新生赛2020]crypto-rsa0
改掉伪加密位。拿到rsa0.py

from Cryptodome.Util.number import * import random FLAG=#hidden, please solve it flag=int.from_bytes(FLAG,byteorder = 'big') p=getPrime(512) q=getPrime(512) print(p) print(q) N=p*q e=65537 enc = pow(flag,e,N) print (enc)
已知pqc,直接拿RSATool解了。

[ACTF新生赛2020]crypto-rsa3
给了c、e、n。其中n可以用yafu工具分解:

同上提直接工具解就好惹。

[ACTF新生赛2020]crypto-aes
aes.py:
from Cryptodome.Cipher import AES
import os
import gmpy2
from flag import FLAG
from Cryptodome.Util.number import *
def main():
key=os.urandom(2)*16
iv=os.urandom(16)
print(bytes_to_long(key)^bytes_to_long(iv))
aes=AES.new(key,AES.MODE_CBC,iv)
enc_flag = aes.encrypt(FLAG)
print(enc_flag)
if __name__=="__main__":
main()
output:
91144196586662942563895769614300232343026691029427747065707381728622849079757 b'\x8c-\xcd\xde\xa7\xe9\x7f.b\x8aKs\xf1\xba\xc75\xc4d\x13\x07\xac\xa4&\xd6\x91\xfe\xf3\x14\x10|\xf8p'
key的长度为2*16,iv的长度为16。
它们俩进行异或时,key后16位是与0进行异或,得到的还是其本身。
马克一下TaQini师傅的脚本:
#!/usr/bin/python3 #__author__:TaQini from Crypto.Cipher import AES import os import gmpy2 from Crypto.Util.number import * out = long_to_bytes(91144196586662942563895769614300232343026691029427747065707381728622849079757) key = out[:16]*2 xor_res = out[16:] iv = bytes_to_long(xor_res)^bytes_to_long(key[16:]) iv = long_to_bytes(iv) aes=AES.new(key,AES.MODE_CBC,iv) out = b'\x8c-\xcd\xde\xa7\xe9\x7f.b\x8aKs\xf1\xba\xc75\xc4d\x13\x07\xac\xa4&\xd6\x91\xfe\xf3\x14\x10|\xf8p' flag = aes.decrypt(out) print(flag)