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

news2024/9/28 3:39:42

文件无壳 拖入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; // r15d
  int v7; // r12d
  int v8; // r13d
  __int64 v9; // r14
  _BYTE *v10; // rax
  _BYTE *v11; // r9
  __int64 v12; // r8
  char v13; // cl
  char v14; // r11
  char v15; // r10
  __int64 result; // rax

  v6 = 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.coloradmin.cn/o/2172155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双十一购物节:五大必买爆款科技好物,让你省钱又省心

双十一购物节&#xff0c;作为中国最大的在线购物狂欢节&#xff0c;每年都吸引着无数消费者的眼球。在这个购物盛宴中&#xff0c;科技产品因其创新性、实用性和高性价比而成为消费者关注的焦点。随着科技的飞速发展&#xff0c;越来越多的智能设备走进了我们的生活&#xff0…

SOCKS5代理和HTTP代理哪个快?深度解析两者的速度差异

在现代互联网环境中&#xff0c;使用代理IP已经成为了许多人日常生活和工作的必备工具。无论是为了保护隐私&#xff0c;还是为了访问某些特定资源&#xff0c;代理IP都扮演着重要的角色。今天&#xff0c;我们就来聊聊SOCKS5代理和HTTP代理&#xff0c;看看这两者到底哪个更快…

什么是去中心化金融(DeFi)?

什么是去中心化金融&#xff08;DeFi&#xff09;? 传统金融特点是&#xff1f; 有中心化机构提供服务 银行 、 保险公司 、政权公司 、 基金管理公司 特点 保管用户的资产&#xff1a; 可冻结用户的账户&#xff0c;操作用户的资产作为交易中介&#xff1a; 审查交易制定…

Redis篇(Java操作Redis)

目录 讲解一&#xff1a;简介 讲解二&#xff1a;Jedis Github 一、创建项目、 二、添加依赖 三、配置文件 四、Java连接Redis 五、通过Redis连接池获取连接对象并操作服务器 六、封装JedisUtil对外提供连接对象获取方法 七、Java操作Redis五种数据类型 1. 连接与释放…

IoT网关的主要功能有哪些?天拓四方

在数字化浪潮席卷全球的今天&#xff0c;物联网&#xff08;IoT&#xff09;技术凭借其独特的优势&#xff0c;逐渐在各个领域展现出强大的生命力。而IoT网关&#xff0c;作为连接物理世界与数字世界的桥梁&#xff0c;其在物联网体系中的作用愈发凸显。 一、数据聚合与预处理…

qt 高并发编程及同步

高并发编程是指在同一时间处理多个任务的能力&#xff0c;通常用于提升应用程序的性能和响应速度。Qt提供了一系列强大的工具和类来实现高并发编程&#xff0c;包括多线程、异步编程和任务调度。 一、继承QThread #include <QThread>class Worker : public QThread {voi…

基于springcloud的药品销售系统

文未可获取一份本项目的java源码和数据库参考。 一、选题背景与意义 1. 选题背景 在日常医药管理中&#xff0c;面对众多的药品和众多不同需求的顾客&#xff0c;每天都会产生大量的数据信息。以传统的手工方式来处理这些信息&#xff0c;操作比较繁琐&#xff0c;且效率低下…

重头开始嵌入式第四十四天(硬件 ARM裸机开发)

目录 裸机开发 一、开发背景 二、开发特点 三、开发流程 四、应用领域 使用的软件硬件 软件&#xff1a;keil 硬件&#xff1a;三星S3C2440A JTAG 开发原理 ​编辑 开发步骤 ​编辑 点亮小灯 按键控制亮灭 裸机开发 ARM 裸机开发是指在没有操作系统的情况…

CUDAExample: 波纹示例

需要用到的已经封装好的辅助类&#xff1a; CPUAnimBitmap 定义个grid 和 block 的维度都是二维的 #include"cpu_anim.h" #include "cuda_runtime.h" #include <device_launch_parameters.h>#define DIM 512 static void CheckCudaErrorAux(const …

numpy is not available

在测试第一个程序的时候&#xff0c;出现Numpy is not available的错误&#xff0c;根据博客的办法知道是因为numpy与pytorch版本不一致造成的。 安装的时候&#xff0c;安装的是最新版的numpy&#xff0c;检查numpy的版本为2.1.1版。 根据pytorch与numpy版本对应表。我的pyt…

【Python报错已解决】NameError: name ‘torchvision‘ is not defined

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

AI知识库如何重塑电商行业的产品推荐系统

在数字化浪潮的推动下&#xff0c;电子商务行业正经历着前所未有的变革。其中&#xff0c;产品推荐系统作为连接消费者与商品的桥梁&#xff0c;其智能化与个性化水平直接影响着用户体验、转化率乃至整个平台的竞争力。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&a…

大豆重测序-文献精读53

Natural variation in GmSW17 controls seed size in soybean GmSW17的自然变异控制大豆种子的大小 摘要 种子大小/重量在决定作物产量中起着重要作用&#xff0c;但在大豆中&#xff0c;仅有少数控制种子大小的基因被鉴定出来。在本研究中&#xff0c;我们进行了全基因组关联…

Java项目——苍穹外卖总结

附上本人代码连接&#xff1a;xiaoming325/sky-take-out (github.com) 项目概述 此项目是一个外卖点餐项目&#xff0c;分为商家端&#xff08;管理员端&#xff09;和用户端&#xff0c;商家端是一个网站&#xff0c;用户端是一个微信小程序&#xff0c;由于微信小程序没有上…

Java ERP管理系统源码解析:微服务架构实践Spring Cloud Alibaba与Spring Boot

在当今数字化浪潮的推动下&#xff0c;企业对于高效、稳定且易于扩展的管理系统需求日益增长。为了满足这一需求&#xff0c;我们精心打造了一款基于Java技术的鸿鹄ERP&#xff08;Enterprise Resource Planning&#xff09;管理系统。该系统充分利用了Spring Cloud Alibaba、S…

【刷题5】在排序数组中查找元素的第一个和最后一个位置

目录 一、题目解析二、思路—二分查找(二段性)1、查找最左端区间2、查找最右端区间 三、代码 一、题目解析 题目理解&#xff1a; 返回begin和end&#xff0c;是数组下标 二、思路—二分查找(二段性) 1、查找最左端区间 left和right移动问题&#xff1a; 循环条件问题&…

探索甘肃非遗:Spring Boot网站开发案例

1 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的大环境让那些止步不前&#…

2024年中国电子学会青少年软件编程(Python)等级考试(二级)核心考点速查卡

考前练习 2024年03月中国电子学会青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;二级&#xff09;答案 解析 2024年06月中国电子学会青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;二级&#xff09;答案 解析 知识点描述 …

如何利用 Kafka,实时挖掘企业数据的价值?

首先&#xff0c;问读者老爷们一个简单的问题&#xff0c;如果你需要为你的数据选择一个同时具备高吞吐 、数据持久化、可扩展的数据传递系统&#xff0c;你会选择什么样的工具或架构呢&#xff1f; 答案非常显而易见&#xff0c;那就是 Kafka&#xff0c;不妨再次套用一个被反…

vue el-cascader 级联选择器 多选实现默认勾选并回显前子项

文章目录 前言代码实现总结 前言 最近实现一个需求 接收传递过来的值 并在 el-cascader级联选择器 上 勾选回显出来 记录下代码实现 代码实现 <template><div id"app"><el-card class"box-card"><el-formref"form2"label…