[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)