Buuctf-Reverse FlareOn3-Challenge Write up

Posted 水番正文

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Buuctf-Reverse FlareOn3-Challenge Write up相关的知识,希望对你有一定的参考价值。

0x00 日常查壳

无壳32位

0x01 主函数

观察一下主程序 发现就是比较字符串的题目

加密函数再401260

0x02 分析加密函数

分析401260

这不就是base加密吗

shift + e 导出数据 这是码表打乱的base64加密

所以只要拿个base脚本 然后改个码表 就出flag

0x03 细谈base加密

但是只懂用加密脚本的我一开始是怀疑这是base加密 但看着加密不是很难就自己在分析

直到做完题看了别人的wp才终于懂了这是base的加密过程

所以这里就记录一下对base的理解

加密过程

1. 取出3个数 再创建一个无符号数用来存放 0000 0000(v7) 0000 0000(v6) 0000 0000(v5)

2. 然后再拆分这24位 拆成四组(为什么是原数组的4/3倍的原因)每个数都是6位

3. 拆的数是2^6次方 也就是64 所以为什么是base64 于是在码表里找对应下标

4. 于是出来的数就是base64加密

解密过程

1. 目标v3恢复 所以要恢复每个6位 encode == table[decode_6]

2. 四个为一组(因为加密的时候是三个一组变四位) 找到数据的对应下标 也就是原始数据的24位中的6位

3. 再讲4个6位合并成24位 再拆分为3个8位

4. 恢复原始数据

0x04 GetFlag

解密脚本!

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

int main(void)
{
	char key[] = "x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q";//打乱码表出的数据 
	int data[] =														//data放打乱的码表 
	{
  		0x5A, 0x59, 0x58, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 
  		0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 
  		0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x7A, 0x79, 0x78, 0x61, 
  		0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 
  		0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 
  		0x76, 0x77, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 
  		0x38, 0x39, 0x2B, 0x2F
	};
	
	unsigned int v3 = 0;
  	int flag[100] = {0};
  	int i, j;
  	
	for(i = 0; i < 52; i++)					//这边注意 52比较好 用strlen识别到0就停了 
		for(j = 0; j < 64; j++)
			if(key[i] == data[j])
			{
				key[i] = j;					//当是第35时 给赋值成0 于是后面再用strlen会导致在35停下 
//				printf("%d:%d ",i,j);
				break;
			}
	
	for(i = 0, j = 0; i < 52; i += 4, j += 3)	//这边也就是注意用加密后字符串长度 
	{
		v3 = key[i+3] + (key[i+2] << 6) + (key[i+1] << 12) + (key[i] << 18);
		flag[j] = (v3 >> 16) & 0xFF;
		flag[j+1] = (v3 >> 8) & 0xFF;
		flag[j+2] = v3 & 0xFF;
	}
	
	for(i = 0; i < 39; i++)						//52/4*3也就是39 原始数据长度 
		printf("%c",flag[i]); 
	
  return 0;
} 

GetFlag

以上是关于Buuctf-Reverse FlareOn3-Challenge Write up的主要内容,如果未能解决你的问题,请参考以下文章

Buuctf-Reverse(逆向) 网鼎杯 2020 青龙组-singal Write up

Buuctf-Reverse FlareOn3-Challenge Write up

Buuctf-Reverse(逆向) Zer0pts2020-easy strcmp Write up

Buuctf-Reverse(逆向) [RoarCTF2019]Polyre && SangFor(深育杯)-Reverse(逆向) XOR_Exercise Write up(代码片