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(代码片