BUUCTF(WP)(2024_7_8)

[FlareOn3]Challenge1 1

关键代码

查看sub_401260加密逻辑

魔改base64加密

在线解密:在线自定义base64编解码、在线二进制转可打印字符、在线base2、base4、base8、base16、base32、base64--查错网 (chacuo.net)

flag{sh00ting_phish_in_a_barrel@flare-on.com}

[羊城杯 2020]easyre 1

发现flag(input)经过三次加密后的结果与str2作比较,得知加密后结果即是str2对应的字符串

查看encode_one

发现是标准的base64加密

查看encode_two

将加密后的数据位置打乱

查看encode_three

凯撒加密

开始对加密后的密文进行逆向

首先进行凯赛解密:在线凯撒密码加密解密 (lddgo.net)

需要注意的是这里偏移量为3,并且对数字没有解密还需要把解密后字符串中的数据减去3

然后进行第二个解密,

解密逻辑:每13个一组进行顺序变化

变换后的顺序:

R1dIVHs2NzJjYzQ3NzhhMzhlODBjYjM2Mjk4NzM0MTEzM2VhMn0=

然后在经过base64解码即可:

flag{672cc4778a38e80cb362987341133ea2}

[ACTF新生赛2020]Oruga 1

拿到附件查看源代码,发现只有一个函数有用

跟进查看

在跟进

看其他大佬的wp知道是一个迷宫题目

那么下面这块就应该是控制上下左右方向的

经过猜测W应为上 M为下 E为右 J为左

依据(符号代表越界)

然后我们观察两个循环条件,第一个大循环意思就是这个值不能等于 33,若等于 33循环结束

第二个循环是 这个值不能为 0

第二个循环还可以看出,若遇不到0 v2就一直朝某方向加加

由此可得:我们知道起始位置(0,0)以及结束条  !=33 以及改变方向条件 遇到0时

逆向求解:

提取数据:

我们容易知道该迷宫是16X16

写一个简单脚本

int main() {
	char arr[][16] = {0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x23, 0x23, 0x23, 0x23, 0x00, 0x00, 0x00, 0x23,
  0x23, 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x4F, 0x4F, 0x00, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x4C, 0x00, 0x4F, 0x4F, 0x00, 0x4F, 0x4F, 0x00, 0x50,
  0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x4F,
  0x4F, 0x00, 0x4F, 0x4F, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x4C, 0x4C, 0x00, 0x4F, 0x4F, 0x00, 0x00, 0x00,
  0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00,
  0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x4D, 0x4D, 0x4D, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x4D, 0x4D,
  0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x00, 0x00, 0x00, 0x30,
  0x00, 0x4D, 0x00, 0x4D, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x00,
  0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x54, 0x54,
  0x54, 0x49, 0x00, 0x4D, 0x00, 0x4D, 0x00, 0x4D, 0x00, 0x00,
  0x00, 0x00, 0x45, 0x00, 0x00, 0x54, 0x00, 0x49, 0x00, 0x4D,
  0x00, 0x4D, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00,
  0x00, 0x54, 0x00, 0x49, 0x00, 0x4D, 0x00, 0x4D, 0x00, 0x4D,
  0x21, 0x00, 0x00, 0x00, 0x45, 0x45 };
	for (int i = 0; i < 16; i++) {
		for (int j = 0; j < 16; j++) {
			if (arr[i][j] == 0) {
				printf(" * ");
			}
			else if(arr[i][j]==33){
				printf(" $ ");
			}
			else {
				printf(" 0 ");
			}
		}
		printf("\n");
	}

	return 0;

}

运行结果

即可进行求解

flag{MEWEMEWJMEWJM}

[Zer0pts2020]easy strcmp 1

(本题不会,看的大佬的wp,写出来仅供复习)

打开该附件找到main函数,发现直接有个比较,但直接交flag是不对的

然后观察其他函数功能

在这个函数我们可以看到strcmp的地址赋值给qword_562160A01090

查看如上函数,可以明该函数也是strcmp地址

接下来继续查看函数sub_5621608006EA函数

发现这个函数进行了一次加密,并调用qword_562160A01090 我们知道这个函数刚才已经被赋值strcmp地址,由此可知main函数比就是该地方的比较,input相当于加密后的flag a2相当于字符·串zer0pts{********CENSORED********}

解密脚本:

int main()
{
	char p[] = "zer0pts{********CENSORED********}";
	uint64 k[4] = { 0, 0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B };
	for (int i = 0; i < 4; i++)
	{
		*(uint64*)&(p[i*8]) += k[i];
	}
	cout << p;
} 

flag{l3ts_m4k3_4_DETOUR_t0d4y}

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值