当前位置: 首页 > news >正文

NSSCTF [HUBUCTF 2022 新生赛]simple_RE(变种base64编码)

文件无壳 拖入IDA中

shift+F12查看可疑字符串 发现两串字符串 一看这两个等于号就猜测是base64编码

进入主函数看看

这段代码是一个简单的 C 语言程序,主要功能是接受用户输入的字符串作为“flag”,然后通过对输入的字符串进行一些处理和比较来验证是否输入了正确的“flag”。

继续跟进sub_401770函数

这段代码是一个 Base64 编码函数,用于将输入的字符串进行 Base64 编码处理。下面是代码的主要逻辑:

  1. 计算输入字符串的长度:v6 = strlen(a1);
  2. 根据输入字符串长度取模3,得到余数 v7
  3. 根据余数的不同情况,计算 Base64 编码后的字符数组长度 v8
  4. 根据长度分配内存,并将分配的内存初始化为0。
  5. 将输入的字符串按照 Base64 编码规则转换为对应的 Base64 字符。
  6. 处理剩余字节,补充等号。
  7. 将处理后的 Base64 编码后的字符数组地址赋值给 a2
  8. 返回结果。
__int64 __fastcall sub_401570(const char *a1, _QWORD *a2, int *a3)
{int v6; // r15dint v7; // r12dint v8; // r13d__int64 v9; // r14_BYTE *v10; // rax_BYTE *v11; // r9__int64 v12; // r8char v13; // clchar v14; // r11char v15; // r10__int64 result; // raxv6 = strlen(a1);                              // 计算输入字符串的长度v7 = v6 % 3;if ( v6 % 3 ){v8 = 4 * (v6 / 3) + 4;v9 = v8;v10 = malloc(v8 + 1i64);v10[v8] = 0;if ( v6 <= 0 )goto LABEL_5;}else{v8 = 4 * (v6 / 3);v9 = v8;v10 = malloc(v8 + 1i64);v10[v8] = 0;if ( v6 <= 0 )goto LABEL_8;}v11 = v10;v12 = 0i64;do{v11 += 4;v13 = a1[v12];*(v11 - 4) = aQvejafhmuyjbac[v13 >> 2];v14 = a1[v12 + 1];*(v11 - 3) = aQvejafhmuyjbac[(v14 >> 4) | (16 * v13) & 0x30];v15 = a1[v12 + 2];v12 += 3i64;*(v11 - 2) = aQvejafhmuyjbac[(v15 >> 6) | (4 * v14) & 0x3C];*(v11 - 1) = aQvejafhmuyjbac[v15 & 0x3F];}while ( v6 > (int)v12 );
LABEL_5:if ( v7 == 1 ){v10[v9 - 2] = 61;v10[v9 - 1] = 61;}else if ( v7 == 2 ){v10[v9 - 1] = 61;}
LABEL_8:*a2 = v10;result = 0i64;*a3 = v8;return result;
}

简而言之 这是一个简单的变种base64编码

写出脚本

import base64# Base64 编码的字符串
str1 = "5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8=="str2 = "qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD"
str3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"a = str.maketrans(str2, str3)
b = str1.translate(a)# 解码 Base64 编码的字符串并打印结果
decoded_text = base64.b64decode(b).decode('utf-8')
print(decoded_text)

得到flag

NSSCTF{a8d4347722800e72e34e1aba3fe914ae}

http://www.lryc.cn/news/447673.html

相关文章:

  • clickhouse使用extract提取分号之前,之后,中间的内容
  • Unity3D Compute Shader同步详解
  • 3D模型在UI设计中应用越来越多,给UI带来了什么?
  • 前端框架的选择与考量:一场技术的盛宴
  • 第五部分:7---信号的捕捉
  • HarmonyOS鸿蒙开发实战( Beta5.0)页面加载效果实现详解实践案例
  • 计算机网络中的VLAN详解
  • Nacos学习
  • 后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0926)
  • 验收测试:从需求到交付的全程把控!
  • 第十七节 鼠标的操作与相应
  • 深圳·2025胶粘剂展会 BOND第六届胶展
  • 什么是网络安全自动化以及优势与挑战
  • java中的ArrayList和LinkedList的底层剖析
  • 占领矩阵-第15届蓝桥省赛Scratch中级组真题第5题
  • [论文笔记] Chain-of-Thought Reasoning without Prompting
  • C++八股进阶
  • 渗透测试--文件上传常用绕过方式
  • 音视频生态下Unity3D和虚幻引擎(Unreal Engine)的区别
  • 搭建基于H.265编码的RTSP推流云服务器
  • C++20 std::format
  • Python基础知识 (九)os模块、异常、异常的传递性
  • 鸿蒙手势交互(三:组合手势)
  • 【计算机方向】中科院二区TOP神刊!国人发文友好,刊文量高,录用容易!
  • Stable Diffusion 保姆级教程
  • 踩坑记录:adb修改settings数据库ContentObserver无回调
  • JAVA毕业设计183—基于Java+Springboot+vue的旅游小程序系统(源代码+数据库)
  • [大语言模型] 情感认知在大型语言模型中的近期进展-2024-09-26
  • WiFi无线连接管理安卓设备工具:WiFiADB
  • Django项目配置日志