首页 > 其他分享 >buuctf.crypto.看我回旋踢

buuctf.crypto.看我回旋踢

时间:2023-03-23 20:34:06浏览次数:40  
标签:buuctf int ilen crypto char ++ 回旋 input void

这个题目是和凯斯密码相关的,可以通过flag的一些标志来判断
首先我们得到的数据是

synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}

其中synt是flag在字母表中右移动13位的结果,如果移动多了就往回移动
比如26个字母,第25位移动到哪里去? (25+13)%26=12

其中字符串表

char t[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789{}-";

该加密算法只对字母移位,对非字母不管,比如-,{},0-9就不管
然后就是写一个C语言代码模拟一些这个过程了
运行环境: vs2022 x86 debug模式

#include<stdio.h> 
#include<string.h>

void table2index(char* t, char* input, int ilen)
{
	int tlen = strlen(t);
	int i = 0;
	int j = 0;
	for (i = 0; i < ilen; i++)
	{
		for (j = 0; j < tlen; j++)
		{
			if (input[i] == t[j])
			{
				input[i] = (char)j;
				break;
			}
		}
	}
	return;
}
void index2table(char* t, char* input, int ilen)
{
	int i = 0;
	for (i = 0; i < ilen; i++)
	{
		input[i] = t[input[i]];
	}
	return;
}
void fenc(char* t, char* input)
{
	//13位
	//右移5位,然后看最后一位
	int i = 0;
	int ilen = strlen(input);
	table2index(t, input, ilen);
	for (i = 0; i < ilen; i++)
	{
		if (input[i] >= 0 && input[i] <= 2 * 26 - 1)//是字母
		{
			if (input[i] < 26)//大写 
			{
				input[i] = (input[i] + 13) % 26;
			}
			else//小写 
			{
				input[i] = 26 + (input[i] + 13) % 26;
				//input[i] = 26 + (input[i] -26 +  13) % 26;
			}
		}
	}
	index2table(t, input, ilen);
}
void fdec(char* t, char* input)
{
	//13位
	//右移5位,然后看最后一位
	int i = 0;
	int ilen = strlen(input);
	table2index(t, input, ilen);
	for (i = 0; i < ilen; i++)
	{
		if (input[i] >= 0 && input[i] <= 2 * 26 - 1)//是字母
		{ 
			if (input[i] < 26)//大写 
			{
				input[i] = (input[i] + 13) % 26;
			}
			else//小写 
			{
				input[i] = 26 + (input[i] -13) % 26;
				//input[i] = 26 + (input[i] -26 +  13) % 26;
			}
		}
	}
	index2table(t, input, ilen);
}
int main()
{
	char t[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789{}-";
	//char input[] = "flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}";
	char encdata[] = "synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}";

	fdec(t, encdata);
	printf("%s\n", encdata);
	fenc(t, encdata);
	printf("%s\n", encdata);
	return 0;
}

flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}
synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}

E:\C\2022\C1\Debug\C1.exe (进程 20420)已退出,代码为 0。
按任意键关闭此窗口. . .

标签:buuctf,int,ilen,crypto,char,++,回旋,input,void
From: https://www.cnblogs.com/re4mile/p/17249308.html

相关文章

  • 黄河流域安全赛crypto
    黄河流域安全赛cryptoEasyLock已知5条同余方程,可以知道cs[0]*cs[1]-cs[4]和cs[0]^2-cs[2]的公因数为n#fromsecretimportflag#fromCrypto.Util.numberimport*......
  • buuctf.pwn.ciscn_2019_n_1
    检测开启了栈不可执行的检测然后拖进IDA分析比较赤裸注意到,我们输入的是num1,但是比较的是num2所以我们需要把num1溢出到num2比较幸运的是,num1在num2的上方(空间......
  • BUUCTF-MISC-菜刀666
    下载得到一个流量包根据题目菜刀666,与菜刀有关,一般都是post连接,于是我们过滤post数据http.request.method==POST在tcp.streameq7中发现了大量数据右键追踪TCP流,看......
  • 密码学SAT入门文献0——Using Walk-SAT and Rel-SAT for cryptographic key search
     FabioMassacci.1999.UsingWalk-SATandRel-SATforcryptographickeysearch.InIJCAI,Vol.1999.290–295.  本人的组织架构:第2节介绍一些关于密码......
  • $\mathcal{Crypto}$ 共模攻击原理实现以及$\mathcal{CRT}$优化
    共模攻击概述共模攻击是一种攻击\(RSA\)加密的技术,当两个密文使用相同的\(RSA\)公共模数时,攻击者可以使用中国剩余定理\((CRT)\)和最大公因数\((GCD)\)算法,推导出明文。这......
  • BUUCTF-MISC-面具下的flag()
    准备工作下载附件得到一个一张图片丢入winhex,发现还有一个flag.vmdk文件vmdk文件其实是虚拟机使用的硬盘文件打开kalibinwalk-emianju.jpg关键步骤这里如果在......
  • matlab练习程序(回旋曲线)
    回旋曲线能够比较好的表示驾驶员匀速转动方向盘从直行道进入转弯道的路径。公式如下:其中$a=1/(RL)$,$L$是曲线长度,$R$是曲线半径,$R$越大,曲线越平缓。下面生成半径从0.2......
  • BUUCTF-MISC-LSB(stegsolve的一种妙用)
    题目已知是LSB隐写丢入stegsolve,点>,可以看见Redplane0,Greenplane0,Blueplane0上边好像有东西点analyse->dataextract,让红绿蓝通道为0,可以看见是png图片点sa......
  • BUUCTF Crypto 1-20
    https://blog.csdn.net/ao52426055/article/details/1093046461、MD5MD5在线网站解密2、一眼就解密base64解码3、URL编码控制台解码decodeURI()、decodeURICompon......
  • BUUCTF MISC 41-60
    41、秘密文件题目提示的盗取了文件,于是首先过滤FTP协议,追踪一下TCP流,发现存在一个压缩包于是尝试用foremost提取,得到一个加密的压缩包没有任何提示,尝试四位数暴力破解......