Crypto 攻防世界合集

古典密码

1※ base64

  • 考点:base64 加密

  • 得到一段字符串,有各种可见字符,考虑是否为 base64 加密:

    image

  • 放到 Cyberchef 里面用 base64 解密,得到 flag:

    image



1※ Railfence

  • 考点:栅栏密码

  • 得到一串编码后的字符串,观察到存在明文 {},但是位置不对,考虑栅栏密码:

    image

  • 题目中提示了喂 5只小鸡,考虑分栏为 5 的栅栏密码:

    image

  • 放进 随波逐流 工具中栅栏解密,在 w型栅栏密码 分为 5 栏时,找到 flag:

    image



1※ Caesar

  • 考点:凯撒密码

  • 得到一个字符串,观察到存在明文 {}_,并且这些明文的位置没有改变,考虑是否为凯撒加密:

    image

  • 由于 flag 的开头必定为 cyberpeace,可以推算出位移位数为 12,放进随波逐流用 凯撒解密 在偏移 12 的时候得到 flag:

    image



1※ Morse

  • 考点:摩斯密码

  • 得到一串 01 串,中间已经用空格隔开,考虑是摩斯密码:

    image

  • 手动将 1 转为 -,将 0 转为 .

    image

  • 放进 Cyberchef 中使用莫斯解码,得到 flag:

    image

  • 由于题目要求全部转为小写,并且用 cyberpeace 包裹,得到最后的 flag:

    image



1※ 不仅仅是Morse

  • 考点:培根密码

  • 得到一串用 / 隔开的摩斯密码:

    image

  • 丢进 Cyberchef,用莫斯密码解密,记得将分隔符改为左斜线:

    image

  • 解出来的明文后面带有一串只有 A 和 B 的字符串,考虑这里是培根密码,将后面的 AB 串放进 随波逐流 用培根解码:

    image

  • 将得到的字符串全改小写,用 cyberpeace{} 包裹得到 flag:

    image



1※ 幂数加密

  • 考点:云影加密(幂数加密)

  • 题目提示需要 8个大写字母,观察到数据间有多个 0 隔开,且所有数字均为 2的次幂,且每一位不超过 8:

    image

  • 那么考虑 云影加密,我们丢进 随波逐流 用云影解密,得到要求的 8个大写字母:

    image

  • 最后用 cyberpeace{} 包裹起来,得到 flag:

    image



1※ 转轮机加密

  • 考点:转轮机加密

  • 打开附件,发现已经把转轮机加密的 密码本,密钥,以及密文 全部给出了:

    image

  • 那么只需要根据转轮机密码的加密过程,写出 python 脚本进行解密,并将每一列的字符串转为小写输出:

    a = ["ZWAXJGDLUBVIQHKYPNTCRMOSFE",
    	 "KPBELNACZDTRXMJQOYHGVSFUWI",
    	 "BDMAIZVRNSJUWFHTEQGYXPLOCK",
    	 "RPLNDVHGFCUKTEBSXQYIZMJWAO",
    	 "IHFRLABEUOTSGJVDKCPMNZQWXY",
    	 "AMKGHIWPNYCJBFZDRUSLOQXVET",
    	 "GWTHSPYBXIZULVKMRAFDCEONJQ",
    	 "NOZUTWDCVRJLXKISEFAPMYGHBQ",
    	 "XPLTDSRFHENYVUBMCQWAOIKZGJ",
    	 "UDNAJFBOWTGVRSCZQKELMXYIHP",
    	 "MNBVCXZQWERTPOIUYALSKDJFHG",
    	 "LVNCMXZPQOWEIURYTASBKJDFHG",
    	 "JZQAWSXCDERFVBGTYHNUMKILOP"]
    
    key = [2,3,7,5,13,12,9,1,8,10,4,11,6]
    c = [x for x in "NFQKSEVOQOFNP"]
    enc = [ a[x-1] for x in key ]
    for i in range(len(enc)):
    	pos = enc[i].find(c[i])
    	enc[i] = enc[i][pos:]+enc[i][:pos]
    
    for j in range(len(enc[0])):
    	for i in range(len(enc)):
    		print(chr(ord(enc[i][j])-ord('A')+ord('a')),end='')
    	print('')
    
  • 运行脚本,观察每一行字符串,结合题目提示中的二战背景,找到唯一一行有意义的英文句子:fire in the hole,小心手雷:

    image

  • 最后根据题目描述,直接提交这个字符串即可,不需要包裹:

    image



1※ 告诉你个秘密

  • 考点:键盘包围密码

  • 打开文件,看到两行只有 数字,字母 A~F 的字符串,16进制转字符串:

    image

  • 得到的字符串看起来像 base64 编码,大小写字母和数字都有,用 base64 解码:

    image

  • 得到的字符串,用空格隔开,每组 3到4 个字符,且符合键盘包围编码的特征,将中间连在一起的 8个字符中间加个空格,用键盘包围密码解密:

    image

  • 得到的字符串就是 flag,不需要包裹直接提交:

    image



RSA

2※ easy_RSA

  • 考点:RSA 加密过程

  • 下载附件,给了 RSA 加密的 p,q,e,求解密的指数 d:

    image

  • 那么直接求 e 模 (p-1)*(q-1) 下的逆元即可,写出 python 脚本:

    from gmpy2 import *
    p = 473398607161
    q = 4511491
    e = 17
    l = (p-1)*(q-1)
    d = invert(e,l)
    print(d)
    
  • 运行得到 d:

    image

  • 这串数字包裹后得到 flag:

    image



2※ [简单] 初识RSA

  • 考点:[RSA 加密过程]

  • 打开 newcomer.py 文件,发现给了 pq 和 qp 分别为 p*(q-1)q*(p-1)

    image

  • 那么我们将 pq 与 qp 相加,得到 p*q - p + p*q - q = 2*p*q - p - q
    由于我们需要求 l = (p-1)*(q-1) = p*q - p - q + 1,且 n = p*q,那么我们可以得到 l = pq + qp - n + 1

  • 那么便可以写出 python 脚本正常 RSA 解密了:

    from Crypto.Util.number import long_to_bytes
    from gmpy2 import *
    e = 65537
    n = ......
    c = ......
    pq= ......
    qp= ......
    l = pq + qp - n + 1
    d = invert(e,l)
    m = pow(c,d,n)
    print(long_to_bytes(m))
    
  • 最后运行得到 flag:

    image



3※ Normal_RSA

  • 考点:RSA - n可分解

  • 下载附件后,得到了两个文件:flag.enc 是经过 RSA 加密后的密文, pubkey.pem 是 RSA 的公钥文件:

    image

  • 将 .pem 用 txt 打开,将里面的内容放到 rsa解密网站 上分析,得到 n 和 e:

    image

  • 由于 n 很小,我们放到 素数分解网站 上分解,得到 p 和 q:

    image

  • 最后密文以二进制串写在 .enc 文件中,我们在 python 脚本里用 open 的rb 模式读取,然后转为数字即可:

    with open("./flag.enc","rb") as f:
    	c = bytes_to_long(f.read())
    
  • 那么我们就可以写出 python 脚本 RSA 解密了:

    from Crypto.Util.number import bytes_to_long, long_to_bytes
    from gmpy2 import *
    with open("./flag.enc","rb") as f:
    	c = bytes_to_long(f.read())
    p = 275127860351348928173285174381581152299
    q = 319576316814478949870590164193048041239
    n = p * q
    e = 65537
    l = (p-1)*(q-1)
    d = invert(e,l)
    m = pow(c,d,n)
    print(long_to_bytes(m))
    
  • 运行程序得到一串字节串,flag 就在其中:
    image



Python

1※ Broadcast

  • 考点:查看 python 文件(?)

  • 下载附件,解压后看到有一个 task.py 的 python 文件:

    image

  • 打开直接得到 flag:

    image



2※ easychallenge

  • 考点:反编译 .pyc 文件

  • 下载附件,是一个 .pyc 的文件,可以使用 python 的 uncompyle 软件包来反编译为 .py 文件,在 附件所在的文件夹 的地址栏输入 cmd,打开命令提示符:

    image

  • 利用 uncompyle 软件包反编译:

    image

    image

  • 打开 py 文件,发现里面给出了 最后的密文 和 加密的流程:

    image

  • 先 encode1 与 encode2 异或加密,最后 base32 加密。那么我们只需要先 base32 解密,再倒着 decode2 与 decode1 异或解密。

  • 那么我们将加密代码改为解密代码,然后倒序解密,写出 python 脚本:

    import base64
    
    def decode1(ans):
    	s = ''
    	for i in ans:
    		x = ord(i) - 25
    		x =  x ^ 36
    		s += chr(x)
    	return s
    
    def decode2(ans):
    	s = ''
    	for i in ans:
    		x = i ^ 36
    		x = x - 36
    		s += chr(x)
    	return s
    
    def decode3(ans):
    	return base64.b32decode(ans)
    
    final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
    flag = decode1(decode2(decode3(final)))
    print(flag)
    
  • 最后运行输出 flag:

    image



Others

2※ flag_in_your_hand

  • 考点:逆向基础(?)

  • 下载附件,得到一个网页 和 一个 js源码:

    image

  • 打开网页发现输入什么都显示 Wrong,下面的字符串拿去 base64 解密也都是乱码:

    image

  • 那么我们 F12 查看网页源代码,找到两个关键函数,getFlag 和 showFlag:

    image

  • 发现得到的是否为正确的 flag 关键看变量 ic 的值是否为 0,往上看代码可以得知由另一个附件 .js 来管理这些变量:

    image

  • 那么我们打开 script-min.js 文件(我使用 pycharm 打开的),在 ck 函数中看到了对 ic 变量值的维护:

    image

  • 发现当输入的字符串 s 的 每个字符的 ASCII 值,分别为 a[] 里面的数值减 3 时,变量 ic 才会为 true:

    image

  • 那么我们写出 python 脚本进行解密:

    a = [118, 104, 102, 120, 117, 108, 119, 124, 48,123,101,120]
    for x in [chr(x-3) for x in a]:
    	print(x,end='')
    
  • 运行得到我们需要输入的 Token:

    image

  • 在网站中输入这个字符串,得到 flag,不需要包裹直接提交:

    image



posted @   浅叶梦缘  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
目录导航
目录导航
Crypto 攻防世界合集
古典密码
1※ base64
1※ Railfence
1※ Caesar
1※ Morse
1※ 不仅仅是Morse
1※ 幂数加密
1※ 转轮机加密
1※ 告诉你个秘密
RSA
2※ easy_RSA
2※ [简单] 初识RSA
3※ Normal_RSA
Python
1※ Broadcast
2※ easychallenge
Others
2※ flag_in_your_hand
发布于 2024-11-24 21:06
点击右上角即可分享
微信分享提示