BUU CTF CRYPTO WP-文字

url编码

https://www.toolscat.com/decode/url

看我回旋踢

像恺撒密码sytn对应的flag
在字母表中的序列
	s 第19位	f 第6位
	y 第25位 l 第12位

变异恺撒

基础的恺撒密码是将明文中的字符,按照固定的偏移量向后(或向前)进行偏移,从而形成密文

变异恺撒密码也应该是基于这个原理

根据打开附件中的内容,推断开头应该是flag,那么结合ASCII表

发现第一个a向后移5位得到f,第二个f向后移6位得到l,Z向后移动7位得到a

综上规律,应该是初始位移5,然后依次向后加1

str="afZ_r9VYfScOeO_UL^RWUc"
k=5
for i in str:
    print(chr(ord(i)+k),end='')
    k+=1

Quoted-printable

一种加密方式,在线解压,特征:=十六进制字符
	http://www.metools.info/code/quotedprintable231.html

rabbit

一种加密方式

组成为:26个英文字母 =、+、/

以U2FsdGVkX1开头

可能以=结尾

RSA

RSA的最简单的形式
import libnum
p = 473398607161
q = 4511491
e = 17
n = p * q
f_n = (p-1)*(q-1)
d = libnum.invmod(e, f_n)
print(d)

丢失的MD5

import hashlib
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            #主要修改的是下面这行,加了encode('utf-8'),然后用大括号将括起来update后的语句括起来
            m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode('utf-8'))
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print(des)

rsarsa

m = gmpy2.powmod(c, d, n)

信息化时代的步伐

密文为一串数字,再联想到伟人和百度

确定是中文电码

http://code.mcdvisa.com/

base64隐写

脚本解密,pyhton2.x
def get_base64_diff_value(s1, s2):
base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
res = 0
for i in xrange(len(s2)):
    if s1[i] != s2[i]:
        return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
return res


def solve_stego():
    with open('ComeOn!.txt', 'rb') as f:
        file_lines = f.readlines()
        bin_str = ''
        for line in file_lines:
            steg_line = line.replace('\n', '')
            norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
            diff = get_base64_diff_value(steg_line, norm_line)
            print diff
            pads_num = steg_line.count('=')
            if diff:
                bin_str += bin(diff)[2:].zfill(pads_num * 2)
            else:
                bin_str += '0' * pads_num * 2
            print goflag(bin_str)


def goflag(bin_str):
    res_str = ''
    for i in xrange(0, len(bin_str), 8):
        res_str += chr(int(bin_str[i:i + 8], 2))
    return res_str


if __name__ == '__main__':
    solve_stego()

Alice Bob 求素数,MD5加密

#include<stdio.h>
#include<math.h>

int s(long long int x){
	int i;
	if(x==1){
		return 0;
	}
	else{
		for(i = 2; i<= sqet(x); i++){
			if(x % i == 0){
				return 0;
			}
		}
		if(i > sqrt(x)){
			return 1;
		}
	}
}

int main(){
	long long int n, p, q;
	n = 98554799767;
	for(p = 2;p < n;p++){
		q = n / p;
		if(s(p) && s(q) && q*p == n){
			printf("p = %lld\n", p);
			printf("q = %lld\n", q);
		}
	}
}

凯撒?替换?呵呵!

MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}

首先想到凯撒加密,但是解密的结果都对应不上

然后想到恺撒的替换,首先明确 MTHJ大概率对应的是flag

然后https://www.quipqiup.com/,进行替换解密

爆破获取所有可能,然后选取最通顺的一个作为flag

传统知识+古典密码

传统知识
	根据天干地支对应表
		辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳

		28    30   23    8    17    10   16    30
	在根据提示加甲子-+60
		88    90   83    68   77    70   76    90


	转为ASCII- XZSDMFLZ

	也可以直接随波工具
古典密码
	栅栏 XSMLZDFZ

获取权限第一步

Administrator:500:806EDC27AA52E314AAD3B435B51404EE:F4AD50F57683D4260DFD48AA351A17A8:::

猜测加密算法可能为SHA或者MD5之类的

MD5网站 F4AD50F57683D4260DFD48AA351A17A8 获取flag

世上无难事

首先得到一串字符,看了wp后知道,考察的是替换

一、PIO = key
	连同密文一起放入:https://quipqiup.com/

二、直接
	https://quipqiup.com/

old-fashion

看着文本格式与上面的相同
直接https://quipqiup.com/

unencode

UUencode解码

RSA3 & RSA2

解密脚本

Morse

摩斯+base16

异性相吸

以为是一种简单的密钥破解密文,看了wp才知道,是要异或,果然越长的提示,往往就藏了东西在里面。

01信息从文件中Hex信息转为二进制可以得到。

首先异性是相吸的,先看异性,异性在就是性别对立的,那么在计算机中对立的就比较清楚的就是二进制0和1是对立的。然后看相吸,可以看到异或的原则,相同为0,不同为1。

编写脚本

flag

RSA

这题首先获得两个文件一个是pub.key和flag.enc

在选择用wireshark打开flag.enc时,提示打开错误,

打开pub.key,发现也不是常见得n e d p 等相关信息

因此采用脚本,获取e,n
f=open("C:\\Users\\BIGbig\\Desktop\\123\\pub.key","r")
key=RSA.import_key(f.read())
f.close()
e=key.e
n=key.n
print(e)
print(n)

将n进行分离后获得p、q 网站http://factordb.com/index.php?

最后脚本获取flag

RSARoll

下载文件后,获取一个txt文本

根据内容发现-{920139713,19} 前面的应该是n,后面的应该是e

根据RSA算法 p、q应该是n的公因子

d = gmpy2.invert(e, (p - 1) * (q - 1))

然后
flag = ''
for c in crypto_text:
    m = gmpy2.powmod(c, d, n)
    flag += chr(m)

就可以获取flag了

Dangerous RSA

下载下来附件后,根据相关信息属于是RSA的
但是相较于普通的RSA

信息像是由十六进制构成的

低加密指数攻击:
假设e=3, 公钥中的加密指数e很小,但是模数n很大
有RSA加密公式: C=M^e % n (C密文,M明文)
则:
当M^e < n 时,
C = M^e ,所以对C开方就能得到M

当M^e > n 时,此时用爆破的方法
假设我们  M^e / n 的商为 k 余数为C,
则M^e = kn + C,对K进行爆破,只要k满足 kn + C能够开e次方就可以得明文

根据这个写一个脚本就可以得到flag了
#python3
## -*- coding: utf-8 -*-#
from gmpy2 import iroot
import libnum
e = 0x3
n = 0x52d483c27cd806550fbe0e37a61af2e7cf5e0efb723dfc81174c918a27627779b21fa3c851e9e94188eaee3d5cd6f752406a43fbecb53e80836ff1e185d3ccd7782ea846c2e91a7b0808986666e0bdadbfb7bdd65670a589a4d2478e9adcafe97c6ee23614bcb2ecc23580f4d2e3cc1ecfec25c50da4bc754dde6c8bfd8d1fc16956c74d8e9196046a01dc9f3024e11461c294f29d7421140732fedacac97b8fe50999117d27943c953f18c4ff4f8c258d839764078d4b6ef6e8591e0ff5563b31a39e6374d0d41c8c46921c25e5904a817ef8e39e5c9b71225a83269693e0b7e3218fc5e5a1e8412ba16e588b3d6ac536dce39fcdfce81eec79979ea6872793
c = 0x10652cdfaa6b63f6d7bd1109da08181e500e5643f5b240a9024bfa84d5f2cac9310562978347bb232d63e7289283871efab83d84ff5a7b64a94a79d34cfbd4ef121723ba1f663e514f83f6f01492b4e13e1bb4296d96ea5a353d3bf2edd2f449c03c4a3e995237985a596908adc741f32365

k = 0
while 1:
    res = iroot(c+k*n,e)  #c+k*n 开3次方根 能开3次方即可
    #print(res)
    #res = (mpz(13040004482819713819817340524563023159919305047824600478799740488797710355579494486728991357), True)
    if(res[1] == True):
        print(libnum.n2s(int(res[0]))) #转为字符串
        break
    k=k+1
#b'flag{25df8caf006ee5db94d48144c33b2c3b}'

托马斯.杰斐逊

首先根据密钥将加密列表,进行重新排序

然后根据密文,以单个字母为分割
将每一行从该字母后面的内容,剪切到该行前面,包括该字母

然后根据提示,从列中找到答案

[HDCTF2019]basic rsa

下载下来后,在文件中,发现c = pow(int(b2a_hex(flag),16),e,n)

也就是需要解出flag

其实也就是Rsa中的M
phi = (p - 1)*(q - 1)
d = gmpy2.invert(e, phi)
M = pow(c, d, n)

print(M)
#print(libnum.n2s(M))
print(long_to_bytes(M))

[GXYCTF2019]CheckIn

看到加密信息后,base64-v)*L*_F0<}@H0>F49023@FE0#@EN
然后rot47 GXY{Y0u_kNow_much_about_Rot}

Cipher

没有附件
wp后,看到公平的玩吧->playfair

然后找到加密方法以及密钥
http://www.metools.info/code/playfair_186.html

BabyRsa

下载附件后,得到相应文件

发现e、d、c都有,但是没有n

n = p*q

n = (p+1)(q+1)-(p+q)-1

M = (enc_flag, d, n)
print(libnum.n2s(M))

robomunication

音频,摩斯

[BJDCTF2020]这是base??

下载下来后,发现是base64换表

然后用工具试用了常见的base64换表,发现不行

看了wp后,逻辑是:
	base64的二进制转换为十进制的数是不变的

	则首先根据密文提取出dict中的索引

	然后根据索引提取base64标准表中的字符

组合成base64加密,然解base64就可以了
import base64

dict = {0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h', 33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='}

baseStand = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

cry = 'FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw'

strdict = ""
#转换为字符串
for i in range(65):
    strdict += dict[i]

print(strdict)

l = []
for i in range(len(cry)):
    l.append(strdict.index(cry[i]))

flag = ''
for i in l:
    flag += baseStand[i]
print(base64.b64decode(flag))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值