CTF-reverse-simpleRE(base64变表逆向)

题目链接

NSSCTF | 在线CTF平台


题目详情

[HUBUCTF 2022 新生赛]simple_RE


解题报告

下载得到的文件使用ida64分析,如果报错就换ida32,得到分析结果,有main函数就先看main

main函数分析

main函数的逻辑看下来十分简单,因此关键就要看这个加密函数了

这里字符串a5mc58bphliax7j显然就是密文,双进查看内容是

5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==

sub_401570函数分析

看下来似乎是很复杂的加密,但有经验的话从特征不难识别出来是base64加密,比如红框里的三个经典等号(ASCII码是61)和循环里的位移操作

当然最容易一锤定音是base64的还是aQvejafhmuyjbac这个数组,双击跟进看内容,这字符一看就base64了,而且是魔改换表版本

base64与base64换表

标准的base64加解密所用表是【ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/】刚好64个字符

如果对标准表中的字符进行顺序替换,称之为base64换表

  • 对于标准表的base64,可以直接用编程语言提供的解密函数直接解密或者使用在线网站解密等
  • 对于换表base64,需要多做一步映射,将换表的字符映射回标准表,然后再进行解密

怎么映射呢?拿本题来举例,换表是【qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD

密文是【5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==

密文中第一个字符是5,在换表中的索引(下标)为19,而在标准表中,索引19处的字符为【'T'

密文中第二个字符是M,在换表中的索引(下标)为37,而在标准表中,索引19处的字符为【'l'

以此类推,完成映射

映射可以通过自写循环来实现,也可以直接使用字符串函数translate,下面给出了两种方法的脚本来解决本题

EXP

自写循环映射

import base64 #导入base64模块用于解密
s1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' #标准表
s2 = 'qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD' #base64换表
en_text = '5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==' #密文map_text = '' #用于存放密文通过换表映射回标准表的字符
for i in en_text:if(i != '='): #注意密文中存在等号的情况下,不需要替换!idx = s2.index(i) #获取每个密文的字符在换表中的索引map_text += s1[idx] #取出标准表中的该索引的字符,就是正常base64加密的密文else:map_text += i
print(map_text) #可以先看看标准表base64加密的密文
print(base64.b64decode(map_text)) #直接使用提供的base64解密函数,获得明文,就是flag

库函数映射

import base64 #导入base64模块用于解密
s1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' #标准表
s2 = 'qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD' #base64换表
en_text = '5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==' #密文map = str.maketrans(s2, s1) #用str类中的maketrans建立映射,注意第一个参数是需要映射的字符串,第二个参数是映射的目标
map_text = en_text.translate(map) #映射实现替换密文,替换前是base64换表加密,替换后则是base64标准表加密
print(map_text) #可以先看看标准表加密的密文
print(base64.b64decode(map_text)) #直接使用提供的base64解密函数,获得明文,就是flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/2001.shtml

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

相关文章

Redis入门到通关之Redis数据结构-ZSet篇

文章目录 ZSet也就是SortedSet,其中每一个元素都需要指定一个 score 值和 member 值: 可以根据score值排序后member必须唯一可以根据member查询分数 因此,zset底层数据结构必须满足键值存储、键必须唯一、可排序这几个需求。之前学习的哪种编…

STM32自动光控窗帘程序+Proteus仿真图 H桥L298驱动电机

目录 1、前言 2、仿真图 3、源程序 资料下载地址:STM32自动光控窗帘程序Proteus仿真图 H桥L298驱动电机 1、前言 基于STM32F103设计的智能光控窗帘,包含STM32芯片、光敏电阻、LCD1602显示屏、电机驱动控制模块等。 备注:通过ARM内部的…

管理 Python 项目的艺术:在 PyCharm 中使用虚拟环境(以BPnP为例)

在 PyCharm 中使用虚拟环境对于 Python 项目开发具有多方面的重要作用,这些作用体现在提升项目管理的效率、保障代码的可运行性以及维护项目的长期稳定性等方面。以下是使用虚拟环境的几个关键好处: 1. 依赖管理和隔离 虚拟环境允许每个项目拥有…

Hadoop3:大数据生态体系

一、技术层面 通过下面这张图,我们可以大概确定,在大数据行业里,自己的学习路线。 个人认为,Hadoop集群一旦搭建完工,基本就是个把人运维的事情 主要岗位应该是集中在数据计算层,尤其是实时计算&#xff…

单调栈(C/C++)

引言: 单调队列和单调栈都是一种数据结构,应用十分广泛,在蓝桥杯、ICPC、CCPC等著名编程赛事都是重点的算法,今天博主将自己对单调栈与单调队列的理解以及刷题的经验,用一篇博客分享给大家,希望对大家有所…

【UI】element-ui的el-dialog的遮罩层在模态框的前面bug

最近在写element ui 的时候使用dialog组件,偶然出现了这种情况 原因: 是因为遮罩层插入进了body标签下,z-index高于当前父元素。 解决:在el-dialog标签里加上:modal-append-to-body"false"就可以了。 饿了么官网文档&a…

Ardupilot OpenIPC 基于WFB-NG构架分析和数据链路思考

Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考 1. 源由2. OpenIPC安装2.1 安装2.2 配置2.2.1 天空端配置文件2.2.2 地面端配置文件 2.3 当前配置选择 3. WFB-NG安装3.1 RTL8812AU安装3.1.1 驱动安装3.1.2 定位设备 3.2 wfb-ng安装3.2.1 传输层安装3.2.2 配置…

照片相似性搜索引擎Embed-Photos;赋予大型语言模型(LLMs)视频和音频理解能力;OOTDiffusion的基础上可控制的服装驱动图像合成

✨ 1: Magic Clothing Magic Clothing是一个以可控制的服装驱动图像合成为核心的技术项目,建立在OOTDiffusion的基础上 Magic Clothing是一个以可控制的服装驱动图像合成为核心的技术项目,建立在OOTDiffusion的基础上。通过使用Magic Clothing&#xf…

Jenkins CI/CD 持续集成专题二 Jenkins 相关问题汇总

一 问题一 pod [!] Unknown command: package 1.1 如果没有安装过cocoapods-packager,安装cocoapods-packager,sudo gem install cocoapods-packager 1.2 如果已经安装cocoapods-packager,还是出现上面的错误,有可能是pod的安…

防、治、管融合一体化旅居健康守护系统

随着人口老龄化趋势的加剧和人们生活水平的提高,养老服务需求不断增长。旅居养老作为一种新型的养老模式,逐渐受到广大老年人的青睐。在生命健康服务运营平台中,为了给老人提供全方位、个性化的生命健康服务,我们平台也特意开设了…

31 信号量

概念 共享内存在通信的过程中,没有任何保护机制。当A进程写入了一部分,就被B、拿走了,导致双方发和收的数据不完整,数据不一致问题 1.A和B看到同一份资源,共享资源,如果不加保护,会导致数据不…

PyCharm添加外部工具

QtDesigner 可视化UI设计客户端工具 路径:File | Settings | Tools | External Tools点号,给External Tools组添加一个条目,填写如下内容 Name:QtDesignerProgram:C:\Users\用户名\AppData\Local\Programs\Python\Py…

在誉天学习云计算HCIE,担心考试考不过?

誉天定制化课程内容覆盖了所有考试重点,可以系统地掌握理论与实践知识。 对于笔试,类似于备考驾照理论学习阶段,誉天为大家提供在线模拟测试系统,帮助大家掌握云计算笔试考点。笔试通过后,18个月内(一年半…

Docker 哲学 - docker save | load | export | import 及实践

当我们说 "归档文件包含了容器的所有文件,但不包含容器的元数据和配置",我们是指 docker export 命令导出的 tar 归档文件包含了容器的文件系统中的所有文件,包括应用程序、库、数据等。但是,这个归档文件不包含关于容器…

Python 网络与并发编程(一)

文章目录 并发编程介绍串行、并行与并发的区别进程、线程、协程的区别进程线程协程 并发编程解决方案同步和异步介绍 并发编程介绍 串行、并行与并发的区别 有任务A、B、C,一个CPU去执行他们,有几种方式 1、一个cpu按顺序执行ABC,这就是串行…

go语言并发实战——日志收集系统(六) 编写日志收集系统客户端

上节回顾 在上一篇文章中我们介绍了编写客户端的四个步骤,分别是: 读取配置文件,寻找日志路径初始化服务根据日志路径l来收集日志将收集到的日志发送Kafka中 关于上述的内容博主画了一个思维导图(有点丑,大家勉强看看&#xff0…

燃冬之yum、vim和你

了解了很多指令和权限,搞点真枪实弹来瞅瞅 学Linux不是天天就在那掰扯指令玩,也不是就研究那个权限 准备好迎接Linux相关工具的使用了么码农桑~ yum 软件包 什么是软件包呢? 首先来举个生活中常见点的例子:比如我的手机是华为…

Tensor张量的属性dim、type、size、shape、numel的使用方法介绍

本文重点 Tensor张量有一些常用的属性,我们可以通过这些基本的属性判断张量的类型,维度,以及元素个数,本节课程我们将对tensor属性进行简单的介绍。 代码 import torch import numpy as np atorch.Tensor(2,3,4) print(a) prin…

【论文笔记 | 异步联邦】 FedBuff

1. 论文信息 Federated Learning with Buffered Asynchronous Aggregation,International Conference on Artificial Intelligence and Statistics,2022,ccfc 2. introduction 2.1.1. 背景: 同步 FL ,随训练过程中…

AI视频分析技术的常用开源模型及TSINGSEE青犀AI视频识别分析能力介绍

AI视频分析技术是指利用人工智能技术来对视频数据进行分析和处理的技术。开源模型是指可以免费获取和使用的代码模型,可以帮助开发人员快速构建和部署AI视频分析应用程序。 以下是一些业内常用的用于AI视频分析技术的开源模型: OpenCV:Open…