[SCTF2019]babyre
打开看看还是有花指令

解除后首先pass1是解maze,好像又是三维的

x是+25,也就是向下跳五层,注意是立体的
得到 passwd1: ddwwxxssxaxwwaasasyywwdd
接着往下看
有一个加密函数
IDA逆向常用宏定义_lodword-CSDN博客
unsigned __int64 __fastcall sub_C22(const char *a1, __int64 a2)
{__int64 v2; // raxchar v3; // ccint v4; // edxint v5; // eaxint v6; // eaxint v7; // eaxint v9; // [rsp+14h] [rbp-24Ch]int v10; // [rsp+18h] [rbp-248h]int v11; // [rsp+1Ch] [rbp-244h]int v12; // [rsp+20h] [rbp-240h]int v13; // [rsp+24h] [rbp-23Ch]int v14; // [rsp+28h] [rbp-238h]int v15; // [rsp+2Ch] [rbp-234h]const char *v16; // [rsp+48h] [rbp-218h]int v17[130]; // [rsp+50h] [rbp-210h] BYREFunsigned __int64 v18; // [rsp+258h] [rbp-8h]v18 = __readfsqword(0x28u);qmemcpy(v17, &unk_1740, 0x200uLL);v10 = 3;v9 = 0;v12 = 0;v13 = 0;v14 = strlen(a1);v16 = a1;while ( 1 ){v15 = 0;if ( v12 < v14 )break;
LABEL_7:if ( v12 >= v14 )goto LABEL_8;}do{if ( a1[v12] != 25 )break;++v12;++v15;}while ( v12 < v14 );if ( v12 != v14 ){++v12;goto LABEL_7;}
LABEL_8:v2 = 0LL;while ( 1 ){v3 = (*(_DWORD *)v2 + 1 < 0) ^ __OFADD__(1, *(_DWORD *)v2) | (*(_DWORD *)v2 == -1);++*(_DWORD *)v2;if ( v3 )break;v10 -= v17[*v16] == 64;v4 = v17[*v16] & 0x3F;v2 = v4 | (unsigned int)(v9 << 6);v9 = v4 | (v9 << 6);LOBYTE(v2) = ++v11 == 4;if ( v11 == 4 ){v11 = 0;if ( v10 ){v5 = v13++;v2 = v5 + a2;*(_BYTE *)v2 = BYTE2(v9);}if ( v10 > 1 ){v6 = v13++;v2 = v6 + a2;*(_BYTE *)v2 = BYTE1(v9);}if ( v10 > 2 ){v7 = v13++;v2 = v7 + a2;*(_BYTE *)v2 = v9;}}++v16;--v14;}return __readfsqword(0x28u) ^ v18;
}

也就是将input2的每四位改成三位给v18,然后v18再与v8="sctf_9102"进行比较
v8有9位,可知input2有16位。(好像真的是base64)
提取出数据,写爆破脚本。(C快一些)
enc='sctf_9102'
for i in range(len(enc)):print(hex(ord(enc[i]))[2:],end='')
先改成字节。
#include <iostream>
using namespace std;
int main() {int str[3] = { 0x736374,0x665f39,0x313032 };int data[128] = {0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,0x7F, 0x7F, 0x7F, 0x3E, 0x7F, 0x7F, 0x7F, 0x3F,0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,0x3C, 0x3D, 0x7F, 0x7F, 0x7F, 0x40, 0x7F, 0x7F,0x7F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,0x17, 0x18, 0x19, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,0x7F, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30,0x31, 0x32, 0x33, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F};int i0, i1, i2, i3, i4, final;for (i0 = 0; i0 < 3; i0++) {for (i1 = 32; i1 < 128; i1++) {for (i2 = 32; i2 < 128; i2++) {for (i3 = 32; i3 < 128; i3++) {for (i4 = 32; i4 < 128; i4++) {final = (((((data[i1] << 6) | data[i2]) << 6) | data[i3]) << 6) | data[i4];//i5 = (((((data[i1] << 6) | data[i2]) << 6) | data[i3]) << 6) | data[i4];if (final == str[i0]) {printf("第%d组:%c%c%c%c\n", i0 + 1, i1, i2, i3, i4);}}}}}}return 0;
}
第1组:c2N0
第2组:Zl85
第3组:MS=y
第3组:MT=y
第3组:MTAy
第三组有多个解可以先动调来确定,是MTAY
第三部分:
__int64 __fastcall sub_FFA(char *a1)
{int v2; // [rsp+18h] [rbp-158h]int i; // [rsp+18h] [rbp-158h]int v4; // [rsp+1Ch] [rbp-154h]unsigned int v5; // [rsp+24h] [rbp-14Ch]unsigned int v6; // [rsp+28h] [rbp-148h]unsigned int v7; // [rsp+2Ch] [rbp-144h]int v8[16]; // [rsp+30h] [rbp-140h]int v9[16]; // [rsp+70h] [rbp-100h]int v10[26]; // [rsp+B0h] [rbp-C0h]unsigned int v11; // [rsp+118h] [rbp-58h]unsigned int v12; // [rsp+11Ch] [rbp-54h]unsigned int v13; // [rsp+120h] [rbp-50h]unsigned int v14; // [rsp+124h] [rbp-4Ch]unsigned __int64 v15; // [rsp+168h] [rbp-8h]v15 = __readfsqword(0x28u);v8[0] = 190;v8[1] = 4;v8[2] = 6;v8[3] = 128;v8[4] = 197;v8[5] = 175;v8[6] = 118;v8[7] = 71;v8[8] = 159;v8[9] = 204;v8[10] = 64;v8[11] = 31;v8[12] = 216;v8[13] = 191;v8[14] = 146;v8[15] = 239;v5 = (a1[6] << 8) | (a1[5] << 16) | (a1[4] << 24) | a1[7];v6 = (a1[10] << 8) | (a1[9] << 16) | (a1[8] << 24) | a1[11];v7 = (a1[14] << 8) | (a1[13] << 16) | (a1[12] << 24) | a1[15];v4 = 0;v2 = 4;v10[0] = byteswap((a1[2] << 8) | (a1[1] << 16) | (*a1 << 24) | a1[3]);v10[1] = byteswap(v5);v10[2] = byteswap(v6);v10[3] = byteswap(v7);do{v10[v2] = sub_143B(v10[v4], v10[v4 + 1], v10[v4 + 2], v10[v4 + 3]);++v4;++v2;}while ( v2 <= 29 );v9[0] = HIBYTE(v11);v9[1] = BYTE2(v11);v9[2] = BYTE1(v11);v9[3] = v11;v9[4] = HIBYTE(v12);v9[5] = BYTE2(v12);v9[6] = BYTE1(v12);v9[7] = v12;v9[8] = HIBYTE(v13);v9[9] = BYTE2(v13);v9[10] = BYTE1(v13);v9[11] = v13;v9[12] = HIBYTE(v14);v9[13] = BYTE2(v14);v9[14] = BYTE1(v14);v9[15] = v14;for ( i = 0; i <= 15; ++i ){if ( v9[i] != v8[i] )return 0xFFFFFFFFLL;}return 1LL;
}
它的v_output原始ida分析出来的是独立的变量,双击进去按下*调整为同一个数组,然后按下y定义为下图这样的变量(int v_output[32])


- 其中
__ROL4__是循环左移 - byte3、byte2、byte1分别表示获取第几个byte,hibyte表示获取最高位的byte
取输入值作为下标从表中取值再组合。
(循环移位宏)循环左右移不同位之后再异或取值。
最后一点位运算和宏还需要再研究研究。
CTF逆向-[SCTF2019]babyre-WP_简单去花指令和流程识别_ctf babyre-CSDN博客
相关文章:
[SCTF2019]babyre
打开看看还是有花指令 解除后首先pass1是解maze,好像又是三维的 x是25,也就是向下跳五层,注意是立体的 得到 passwd1: ddwwxxssxaxwwaasasyywwdd 接着往下看 有一个加密函数IDA逆向常用宏定义_lodword-CSDN博客 unsigned __int64 __fastca…...
uniapp实现下拉过滤查询列表
<picker bindchange"bindPickerChanges" value"{{selectedIndex}}"range"{{pickerArray}}"range-key"name"><view class"area-select">在线状态:<label for"">{{pickerArray[select…...
C++—— set、map、multiset、multimap的介绍及使用
目录 关联式容器 关联式容器的特点和使用场景 树形结构与哈希结构 树形结构 哈希结构 键值对 set set的介绍 set的定义方式 set的使用 multiset map map的介绍 map的定义方式 map的使用 multimap 关联式容器 C标准模板库(STL)中的关联…...
STM32 学习——1. STM32最小系统
这是一个最小系统的测试,LED灯会进行闪烁。选用PC13口,因为STM32F103C8T6 硬件开发板中,这个端口是一个LED 1. proteus8.15 原理图 2. cubemx 新建工程 3. keil 代码 while (1){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);HAL_Delay(100);…...
react实现table可拖拽表头(给react-jss样式传递参数、滚动条样式)
目录 react实现table可拖拽表头安装依赖resizableTitle / index.tsxdrapTable.tsx使用DragTable 组件滚动条样式效果 react实现table可拖拽表头 安装依赖 yarn add react-resizable yarn add react-jssresizableTitle / index.tsx import { createUseStyles } from react-js…...
如何跨过robots协议的限制爬取内容?
在讨论如何“跨过robots协议的限制爬取内容”之前,重要的是强调遵循网络礼仪和法律法规的必要性。robots协议(Robots Exclusion Standard)是网站所有者向网络爬虫(包括搜索引擎和其他自动化工具)传达其爬取意愿的一种方…...
Parasoft C++Test软件静态分析操作指南_编码规范/标准检查
系列文章目录 Parasoft CTest软件安装指南 Parasoft CTest软件静态分析操作指南_编码规范/标准检查 Parasoft CTest软件静态分析操作指南_软件质量度量 Parasoft CTest软件静态分析_自动提取静态分析数据生成文档 Parasoft CTest软件单元测试_操作指南 Parasoft CTest软件单元…...
[AIGC] CompletableFuture如何实现任务链式调用?
Java 中的 CompletableFuture 提供了多种方法来支持任务链式调用。这些方法允许你将一组操作链接在一起,形成一个任务链,每一个任务只有在上一个任务成功完成后才会被执行。现在,我们来看一下一些常用的链接任务的方法: thenAppl…...
神奇动物在哪里?斯洛文尼亚旅游之野生动物寻踪
不仅拥有优美动人的自然风光,斯洛文尼亚还以其丰富的生物多样性而闻名。得益于国家对大自然开展的保护工作,斯洛文尼亚超过三分之一的国土面积都被规划为保护区,拥有约1.5万种动物和6000种植物,其中不乏众多特有、稀有和濒危动植物…...
电商项目之有趣的支付签名算法
文章目录 1 问题背景2 思路3 代码实现 1 问题背景 在发起支付的时候,一般都需要对发送的请求参数进行加密或者签名,下文简称这个过程为“签名”。行业内比较普遍的签发算法有: (1)按支付渠道给定的字段排序进行拼接&am…...
Web开发核心
文章目录 1.http协议简介2.http协议特性3.http请求和响应协议4.最简单的Web程序5.基于flask搭建web⽹站6.浏览器开发者⼯具(重点) 1.http协议简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于 万维网(WWW:Norld W…...
【Python】【Scrapy 爬虫】理解HTML和XPath
为了从网页中抽取信息,必须对其结构有更多了解。我们快速浏览HTML、HTML的树状表示,以及在网页上选取信息的一种方式XPath。 HTML、DOM树表示以及XPath 互联网是如何工作的? 当两台电脑需要通信的时候,你必须要连接他们ÿ…...
【CTF Web】CTFShow web5 Writeup(SQL注入+PHP+位运算)
web5 1 阿呆被老板狂骂一通,决定改掉自己大意的毛病,痛下杀手,修补漏洞。 解法 注意到: <!-- flag in id 1000 -->拦截很多种字符,连 select 也不给用了。 if(preg_match("/\|\"|or|\||\-|\\\|\/|\…...
LeetCode 968.监控二叉树 (hard)
968.监控二叉树 力扣题目链接(opens new window) 给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 贪心思路: 从下往上看,局部最…...
数理逻辑:1、预备知识
17.1 命题和联结词 命题:可以判定真假的陈述句。(则悖论,祈使句,疑问句都不是命题) 原子命题:不能被分割为更小的命题的命题 例如: 2既是素数又是偶数 可以由$p: 2 是素数,…...
14-云原生监控体系-Redis_exporter 监控 MySQL[部署Dashborad告警规则实战]
文章目录 环境准备切片集群主从哨兵1. 部署1.1. 二进制方式1.1.1. 下载二进制包1.1.2. 部署1.2. docker-compose 容器方式1.3. 配置连接&认证参数1.3.1. 连接认证参数1.3.2. 配置服务控制 systemd2. 配置到 Prometheus3 Dashboard4. 告警规则...
DOS学习-目录与文件应用操作经典案例-xcopy
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 xcopy命令是DOS系统中一个强大的文件和目录复制工具&…...
Midjourney是一个基于GPT-3.5系列接口开发的免费AI机器人
Midjourney是一个基于GPT-3.5系列接口开发的免费AI机器人,旨在提供多领域的智能对话服务。Midjourney在不同领域中有不同的定义和应用,以下是对其中两个主要领域的介绍: Midjourney官网:https://www.midjourney.com/ 一、AI绘画工…...
v-model详解
目录 原理 作用 表单类组件封装 编辑v-model简化代码 原理 v-model本质上是一个语法糖。例如应用在输入框上,就是value属性和input属性的合写。 作用 提供数据的双向绑定。 数据变,视图跟着变:value视图变,数据跟着变input 注意&…...
ArcGIS中分割与按属性分割的区别
1、分割ArcGIS批量导出各个市的县级行政边界 视频教学: ArcGIS批量导出各个市的县级行政边界002 2、ArcGIS批量导出全国各省的边界 视频教学: ArcGIS导出全国各省的边界003 推荐学习: ArcGIS全系列实战视频教程——9个单一课程组合系列直播回…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...
