主要加密逻辑和密文
先encrypt加密
然后进行AES/GCM/NoPadding
加密
再使用base64
加密
对密文解密为乱码,所以将其转换为hex
AES-GCM模式
解密时需要的tag是在加密的过程中产生的
为密文的后2,4,8或16位
解密
“{”的ASCII码为123
encrypt加密在so层
为魔改base64
大概可以这么理解
解密
明文的最后两位为正常的base64加密
即为
点击查看代码
#include <stdio.h>
#include <string.h>
char table[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0721345689+/";
int index(char c)
{char *pos = strchr(table , c);//strchr返回的是指向字符的位置指针if (pos){return pos - table;}
}int main()
{char flag[100];int cout = 0;char enc[] = "TWTTQXUGefJzNVf4McVfNUCzXPXyVNTfTOExTMQO";for (int i = 0;i < strlen(enc);i += 4){int value[4];for (int j = 0;j < 4;j++){value[j] = index(enc[i + j]);}flag[cout++] = value[0] << 2 | value[1] & 0x3;flag[cout++] = (value[1] << 2) & 0xF0 | (value[2] & 0xF);flag[cout++] = (value[2] << 2) & 0xc0 | value[3];}printf("%s", flag);
}
//NSSCTF{y35_y0u_4R3_7rU3_N41L0N9}