MISC-蓅烺地球

这个也是I**C比赛的题目(比赛仍然没有结束QAQ)

下载下来是一个zip文件

打开后看一下内容:

蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條戶囗  萇條戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條戶囗  萇條戶囗  萇條戶囗  萇條戶囗  萇條蓅烺計劃 洮蓠朩暒戶囗  萇條

emmm,不明所以

细节分析一波

发现有些规律

总共有流浪 计划 逃离 木星 户口 长条 这六个词组成

由此想到了社会主义核心价值观编码

2^6=64

所以我考虑到可能是base64的编码

流浪 计划 逃离 木星 户口 长条  这六个词按照一定的顺序排列 出现的记为1,未出现的记为0

所以根据我的推算,得到了如下的排列顺序:

长条户口流浪计划逃离木星

所以  例如流浪计划  就可以被翻译成001100 即12

如此写一个脚本  将他们全部转换成二进制数值 

再得到base64的编码

最后用Python解码  就能够得到flag了

所以我们为了这个脚本更容易处理,首先将流浪地球的字符串处理一下

即:将长条换成1,逃离换成2,以此类推

所以得到新处理的一组数据:

45,236,16,145,2345,236,16,145,2345,236,16,145,236,16,145,2345,2345,236,16,145,2345,2345,2345,236,145,236,16,145,2345,236,16,16,145,236,16,16,16,145,236,16,145,236,145,2345,236,145,2345,236,145,236,145,236,145,2345,236,16,145,236,145,2345,2345,2345,236,16,145,236,145,2345,2345,2345,236,16,145,236,145,236,16,16,16,16,145,236,145,236,145,236,16,16,145,236,145,2345,2345,236,145,236,145,236,145,2345,236,16,145,2345,2345,236,145,2345,2345,2345,236,16,145,236,145,2345,236,16,16,16,145,236,145,2345,236,16,145,236,145,236,145,2345,2345,236,145,236,145,236,16,16,16,16,145,236,1

然后就可以通过这串数据写出脚本代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<ctime>
#include<cstdlib>
#include<cmath>
#include<iomanip>
#include<typeinfo>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
int main()
{
	int n = 0;
	int buffer[512] = { 45,236,16,145,2345,236,16,145,2345,236,16,145,236,16,145,2345,2345,236,16,145,2345,2345,2345,236,145,236,16,145,2345,236,16,16,145,236,16,16,16,145,236,16,145,236,145,2345,236,145,2345,236,145,236,145,236,145,2345,236,16,145,236,145,2345,2345,2345,236,16,145,236,145,2345,2345,2345,236,16,145,236,145,236,16,16,16,16,145,236,145,236,145,236,16,16,145,236,145,2345,2345,236,145,236,145,236,145,2345,236,16,145,2345,2345,236,145,2345,2345,2345,236,16,145,236,145,2345,236,16,16,16,145,236,145,2345,236,16,145,236,145,236,145,2345,2345,236,145,236,145,236,16,16,16,16,145,236,1 };
	int Buffer[512] = { 0 };
	for (int i = 0; i < _countof(buffer); i++)
	{
		for (; buffer[i] != 0; buffer[i] /= 10)
		{
			
			switch (buffer[i] % 10)
			{
			case 1:
				Buffer[i] += 100000;
				break;
			case 2:
				Buffer[i] += 10000;
				break;
			case 3:
				Buffer[i] += 1000;
				break;
			case 4:
				Buffer[i] += 100;
				break;
			case 5:
				Buffer[i] += 10;
				break;
			case 6:
				Buffer[i] += 1;
			}
		}
	}
	for (int i = 0; i < 512; i++)
	{
		if (Buffer[i])
		{
			n++;
		}
	}
	for (int i = 0; i < n; i++)
	{
		cout << Buffer[i];
		cout << ",";
	}
return 0;

就此得到处理后的数据

110,11001,100001,100110,11110,11001,100001,100110,11110,11001,100001,100110,11001,100001,100110,11110,11110,11001,100001,100110,11110,11110,11110,11001,100110,11001,100001,100110,11110,11001,100001,100001,100110,11001,100001,100001,100001,100110,11001,100001,100110,11001,100110,11110,11001,100110,11110,11001,100110,11001,100110,11001,100110,11110,11001,100001,100110,11001,100110,11110,11110,11110,11001,100001,100110,11001,100110,11110,11110,11110,11001,100001,100110,11001,100110,11001,100001,100001,100001,100001,100110,11001,100110,11001,100110,11001,100001,100001,100110,11001,100110,11110,11110,11001,100110,11001,100110,11001,100110,11110,11001,100001,100110,11110,11110,11001,100110,11110,11110,11110,11001,100001,100110,11001,100110,11110,11001,100001,100001,100001,100110,11001,100110,11110,11001,100001,100110,11001,100110,11001,100110,11110,11110,11001,100110,11001,100110,11001,100001,100001,100001,100001,100110,11001,100000

然后通过记事本的替换处理一下

0b110,0b11001,0b100001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100001,0b100110,0b11110,0b11110,0b11001,0b100001,0b100110,0b11110,0b11110,0b11110,0b11001,0b100110,0b11001,0b100001,0b100110,0b11110,0b11001,0b100001,0b100001,0b100110,0b11001,0b100001,0b100001,0b100001,0b100110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100110,0b11110,0b11001,0b100110,0b11001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11001,0b100001,0b100001,0b100001,0b100001,0b100110,0b11001,0b100110,0b11001,0b100110,0b11001,0b100001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11110,0b11001,0b100110,0b11001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11110,0b11110,0b11001,0b100110,0b11110,0b11110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100001,0b100001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11001,0b100110,0b11110,0b11110,0b11001,0b100110,0b11001,0b100110,0b11001,0b100001,0b100001,0b100001,0b100001,0b100110,0b11001,0b100000

然后再写一个转换脚本

int main()
{
	int n = 0;
	int buffer[512] = { 0b110,0b11001,0b100001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100001,0b100110,0b11110,0b11110,0b11001,0b100001,0b100110,0b11110,0b11110,0b11110,0b11001,0b100110,0b11001,0b100001,0b100110,0b11110,0b11001,0b100001,0b100001,0b100110,0b11001,0b100001,0b100001,0b100001,0b100110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100110,0b11110,0b11001,0b100110,0b11001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11001,0b100001,0b100001,0b100001,0b100001,0b100110,0b11001,0b100110,0b11001,0b100110,0b11001,0b100001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11110,0b11001,0b100110,0b11001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11110,0b11110,0b11001,0b100110,0b11110,0b11110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100001,0b100001,0b100001,0b100110,0b11001,0b100110,0b11110,0b11001,0b100001,0b100110,0b11001,0b100110,0b11001,0b100110,0b11110,0b11110,0b11001,0b100110,0b11001,0b100110,0b11001,0b100001,0b100001,0b100001,0b100001,0b100110,0b11001,0b100000 };
	char Buffer[64] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',0,1,2,3,4,5,6,7,8,9,'+','/' };
	for (int i = 0; i < 512; i++)
	{
		if (buffer[i])
		{
			n++;
		}
	}
	for (int i = 0; i < n; i++)
	{
		cout << (char)Buffer[buffer[i]];
	}
	return 0;
}
GZhmeZhmeZhmZhmeeZhmeeeZmZhmeZhhmZhhhmZhmZmeZmeZmZmZmeZhmZmeeeZhmZmeeeZhmZmZhhhhmZmZmZhhmZmeeZmZmZmeZhmeeZmeeeZhmZmeZhhhmZmeZhmZmZmeeZmZmZhhhhmZg

得到了一串这个东西

很明显。。。。不是base64。。

WTF!我明明已经费了这么多功夫写出来了脚本,,,居然没有用。。。

对着这串字符串稍加分析可得。。。

这就是一个简单的二进制加密QAQ。。。

枉费我这么长的时间和精力。。。

所以我再次分析:

蓅烺計劃 洮蓠朩暒替换为1

戶囗  萇條替换为0

然后得到

0b10011001,0b10010011,0b10011110,0b10011000,0b10000100,0b10110110,0b10101100,0b10111100,0b10111100,0b10100000,0b10101000,0b10111010,0b10110011,0b10111100,0b10110000,0b10110010,0b10111010,0b10000010

直接转ASCII码

int main()
{
	int n = 0;
	char buffer[512] = { 0b10011001,0b10010011,0b10011110,0b10011000,0b10000100,0b10110110,0b10101100,0b10111100,0b10111100,0b10100000,0b10101000,0b10111010,0b10110011,0b10111100,0b10110000,0b10110010,0b10111010,0b10000010 };
	for (int i = 0; i < strlen(buffer); i++)
	{
		cout << (char)~buffer[i];
	}
	return 0;
}

得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值