Buuctf Younger-drive 题解

news/2024/5/2 17:56:29/文章来源:https://blog.csdn.net/OrientalGlass/article/details/129338810

目录

一.查壳

二.运行缺少dll

三.主函数

四.hObject线程

五.Thread线程

六.judge函数

七.解题脚本


这题的关键在于了解一定的线程相关知识

一.查壳

32位带壳,用upx脱壳

 

二.运行缺少dll

后续尝试了各种方法修复dll但是还是运行不了

 

 值得一提的是脱壳后的程序不能动态调试,如果动态调试会导致原本识别出来的函数和线程名变成红色的JMPOUT(地址)的形式,难以阅读和理解

三.主函数

1.menu函数

打印一个menu,执行输入输出

 

2.两个线程

根据微软官方文档可以得知由CreateMutexW()创建的::hObject是一个互斥锁(与下方的hObject线程区分开)

hObjectThread是两个线程,其中CreateThread()函数第三个参数是运行的线程函数

CloseHandle()可以关闭线程

3.judge函数用于判断输入字符是否满足条件

 

四.hObject线程

1.线程函数基本功能
WaitForSingleObject 函数实际上就是抢占主函数创建的::hObject互斥锁,抢占成功后执行判断

这里的count初始值是29,用于控制循环次数,所以可以猜测flag有29位

显然执行encode()函数后休眠一段时间,最后释放互斥锁,释放之后会使Thread线程开始运行

2.encode()函数的功能

①先判断输入字符串的count下标字符是否为字母,不是字母则结束程序,也就是说flag全是字母

②第二条if语句是判断该字符是否为大写字符,如果是大写字符那么在off_418000指针指向的字符表中根据chr-38后的偏移值查表确定字符

③如果是小写字符,根据chr-96的偏移值查表确定字符

④值得一提的是off_418000指针指向的字符表为 QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm

这里的0-25是大写字母,26-52是小写字母,所以经过查表操作后,原来的小写字母必定变成大写字母,大写字母必定变成小写字母

 

五.Thread线程

当hObject线程交出互斥锁后,轮到Thread线程运行线程函数,很显然这个函数的功能是--count

那么count初始值是29,由hObject运行后变成28,再由Thread线程运行后变成27

这样往复循环,所以hObject线程中,只对下标为奇数的字符进行了操作,偶数字符由于Thread线程对count的作用所以不被执行

 

 

六.judge函数

 可以看到是对输入的字符串和off_418004指针指向的字符表进行比较

off_418004 : TOiZiZtOrYaToUwPnToBsOaOapsyS

七.解题脚本

根据比较用的字符表可以得知flag经加密后内容为:TOiZiZtOrYaToUwPnToBsOaOapsyS

同时只对奇数下标进行操作,偶数下标不操作,所以不妨直接令flag=arr

根据每个字符在字符表中的位置可以确定偏移值

如果加密后的字符是小写,那么原来是大写,要加38

加密后的字符是大写则原来是小写,加96

#include <iostream>
using namespace std;
unsigned char table[53] = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
unsigned int find(unsigned char ch)
{for (int i = 0; i < 52; i++)if (ch == table[i])return i;
}
int main()
{unsigned char arr[30] = "TOiZiZtOrYaToUwPnToBsOaOapsyS";unsigned char flag[30] = "TOiZiZtOrYaToUwPnToBsOaOapsyS";for (int i = 29; i >-1;i--){if (arr[i] <= 'Z'&& arr[i]>='A')flag[i] = find(arr[i]) + 96;elseflag[i] = find(arr[i]) + 38;i--;}flag[29] = 0;cout << flag;//ThisisthreadofwindowshahaIsESreturn 0;
}

最终输出ThisisthreadofwindowshahaIsES

但是提交flag{ThisisthreadofwindowshahaIsES}是错误的,看了其他大佬的wp才知道最后一位要加一位E

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

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

相关文章

MySql启动错误(Mac系统 安装 mysql-8.0.32-macos13-arm64 后每次点击启动 无法启动) --- 已解决

MySql启动的时候: 立即变红! 查看日志如下: 2023-03-04T14:18:01.089671Z 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.32) MySQL Community Server - GPL. 2023-03-04T14:18:10.304169Z 0 [System] [MY-010116] [Server]…

HiveSQL一天一个小技巧:如何精准计算非连续日期累计值【闪电快车面试题】

0 需 求稀疏字段累计求和问题1 问题分析根据图片中数据变换的形式&#xff0c;可以看出是根据字段term补齐数据中缺失的日期&#xff0c;term为连续日期的个数&#xff0c;当为12时&#xff0c;表明由2018-12-21到2019-01-02连续日期个数为12&#xff0c;当补齐日期后&#xff…

计算机网络的166个概念你知道几个 第四部分

HTML&#xff1a;HTML 称为超文本标记语言&#xff0c;是一种标识性的语言。它包括一系列标签&#xff0e;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的 Internet 资源连接为一个逻辑整体。HTML 文本是由 HTML 命令组成的描述性文本&#xff0c;HTML 命令可以说…

【LeetCode每日一题】——605.种花问题

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 贪心算法 二【题目难度】 简单 三【题目编号】 605.种花问题 四【题目描述】 假设有一个很长…

K8S 实用工具之二 - 终端 UI K9S

开篇 &#x1f4dc; 引言&#xff1a; 磨刀不误砍柴工工欲善其事必先利其器 第一篇&#xff1a;《K8S 实用工具之一 - 如何合并多个 kubeconfig&#xff1f;》 像我这种&#xff0c;kubectl 用的不是非常溜&#xff0c;经常会碰到以下情况&#xff1a; 忘记命令&#xff0c;先…

BUU [ZJCTF 2019]Login

这是一道让我感觉很淦的题&#xff0c;整一天了才大致了解了来龙去脉 开始&#xff1a; 首先丢到虚拟机checksec一下看看有啥保护措施&#xff1a; 看到开了Canary&#xff0c;就已经感觉不妙了&#xff0c;接着丢到IDA里看看啥情况 一看&#xff0c;是令人痛苦的c风格的代码…

LeetCode-63. 不同路径 II

题目来源 63. 不同路径 II 递归 class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int row obstacleGrid.length-1;int col obstacleGrid[0].length-1;return process(row,col,0,0,obstacleGrid);}private int process(int row ,int col,int i…

Cesium三维数据格式以及生产流程详解(glb,osgb,obj,bim,ifc)等

最近收到私信问我在cesium上展示的一些三维数据是如何生产和处理的,这篇文章就给大家一次性讲个透彻。 首先我们来做做分类。市面上能接触到的,常见的,cesium上支持展示的三维数据大致分为以下几种: 1.倾斜摄影(osgb,obj) 2.点云数据(las,pts) 3.手工模型(gltf,…

【SpringCloud】SpringCloud详解之Eureka实战

目录前言SpringCloud Eureka 注册中心一.服务提供者和服务消费者二.需求三.搭建Eureka-Server四.搭建Eureka-Client(在服务提供者配置:用户订单)前言 微服务中多个服务&#xff0c;想要调用&#xff0c;怎么找到对应的服务呢&#xff1f; 这里有组件的讲解 → SpringCloud组件…

跳表--C++实现

目录 作者有话说 为何要学习跳表&#xff1f;为了快&#xff0c;为了更快&#xff0c;为了折磨自己..... 跳表作用场景 1.不少公司自己会设计哈希表&#xff0c;如果解决哈希冲突是不可避免的事情。通常情况下会使用链址&#xff0c;很好理解&#xff0c;当有冲突产生时&#…

RTOS中信号量的实现与应用

RTOS中的信号量是一种用来协调多个任务间共享资源访问的同步机制。它可以保证多个任务之间访问共享资源的正确性和一致性&#xff0c;避免了因多任务并发访问造成的不可预期的问题。 信号量的实现 信号量的实现原理比较简单&#xff0c;主要包括两个部分&#xff1a;计数器和…

十大经典排序算法【快速了解】

文章目录一、算法分类二、经典排序算法总览三、算法复杂度四、代码实现一、算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a; 通过比较来决定元素间的相对次序由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非…

22. linux系统基础

递归遍历指定文件下所有的文件&#xff0c;而且你还可以统计一下普通文件的总个数&#xff0c;既然能统计普通文件&#xff0c;能统计其他文件吗&#xff1f;比如目录文件&#xff0c; 这个是main函数里面我们调用了 &#xff0c;这个checkdird这个函数&#xff0c;需要传递一个…

[数据结构]:10-二叉排序树(无头结点)(C语言实现)

目录 前言 已完成内容 二叉排序树实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-BinarySearchTreeCommon.cpp 04-BinarySearchTreeFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容&#xff0c;除其中使用到C引用外&#xff0c;全为C语言…

大数据框架之Hadoop:MapReduce(八)常见错误及解决方案

1、导包容易出错。尤其Text和CombineTextInputFormat。 2、Mapper中第一个输入的参数必须是LongWritable或者NullWritable&#xff0c;不可以是IntWritable. 报的错误是类型转换异常。 3、java.lang.Exception: java.io.IOException: Illegal partition for 13926435656 (4)&…

ZincSearch Java 客户端教程

ZincSearch Zinc 简单、强大&#xff0c;不了解的同学可以参见我之前的博客。今天我们这里谈谈 Java 环境如何集成 Zinc 客户端&#xff0c;跟如何使用的。 安装 Zinc 到 Github 的官方 Releases 下载&#xff1a; 我的是 Windows 开发环境&#xff0c;下载 zincsearch_0.4…

基于ANSYS的无约束梁的模态分析与实验结果比较

一、实验模型简介 该模型来源于文献&#xff1a;“Khatir, A., Capozucca, R., Khatir, S. et al. Vibration-based crack prediction on a beam model using hybrid butterfly optimization algorithm with artificial neural network. Front. Struct. Civ. Eng. 16, 976–98…

蓝桥杯第十四届校内赛(第三期) C/C++ B组

一、填空题 &#xff08;一&#xff09;最小的十六进制 问题描述   请找到一个大于 2022 的最小数&#xff0c;这个数转换成十六进制之后&#xff0c;所有的数位&#xff08;不含前导 0&#xff09;都为字母&#xff08;A 到 F&#xff09;。   请将这个数的十进制形式作…

【mysql是怎样运行的】-InnoDB行格式

文章目录1 指定行格式的语法2 COMPACT行格式2.1 变长字段长度列表2.2 NULL值列表2.3 记录头信息&#xff08;5字节&#xff09;2.4 记录的真实数据3 Dynamic和Compressed行格式1 指定行格式的语法 CREATE TABLE 表名 (列的信息) ROW_FORMAT行格式名称ALTER TABLE 表名 ROW_FOR…

【C++知识点】位运算

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;C/C知识点 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;…