buuctf 逆向 number_game

这是一题二叉树逆向

正常递归建立树的代码为:

VOID BinaryTree::BuildTree(Tree*& root)
{cout << "输入-1即结束" << endl;INT Val = 0;cin >> Val;if (Val == -1)return;root = new Tree(Val);cout << "请输入" << Val << "的左子树" << endl;BuildTree(root->Left);cout << "请输入" << Val << "的右子树" << endl;BuildTree(root->Right);
}

在这里,经过IDA反编译后代码是这样的:
 

_QWORD *__fastcall sub_400758(char *flag, int num1, signed int num2)
{char temp; // [rsp+1Fh] [rbp-11h]_QWORD *v6; // [rsp+28h] [rbp-8h]temp = flag[num1];if ( temp == ' ' || temp == '\n' || num1 >= num2 )return 0LL;v6 = malloc(0x18uLL);*(_BYTE *)v6 = temp;v6[1] = sub_400758(flag, 2 * num1 + 1, num2);v6[2] = sub_400758(flag, 2 * (num1 + 1), num2);return v6;
}

其实就是自动给树结点赋值了,相当于将输入进来的flag按照层序遍历赋值建树

其实瞅着这段代码:
 

__int64 *__fastcall sub_400807(__int64 *head, char *v7)
{__int64 *result; // raxresult = head;if ( head ){sub_400807((__int64 *)head[1], v7);v7[global++] = *(_BYTE *)head;return sub_400807((__int64 *)head[2], v7);}return result;
}

也应该要知道是二叉树了,这就是中序遍历,也就是将刚刚按照输入的flag层次遍历建立起来的树,用中序遍历重新得到一个字符串。

__int64 __fastcall sub_400881(char *a1)
{__int64 result; // raxbyte_601062 = *a1;byte_601067 = a1[1];byte_601069 = a1[2];byte_60106B = a1[3];byte_60106E = a1[4];byte_60106F = a1[5];byte_601071 = a1[6];byte_601072 = a1[7];byte_601076 = a1[8];result = (unsigned __int8)a1[9];byte_601077 = a1[9];return result;
}

这里将得到的中序遍历出来的字符串插入到待检测的数组中

__int64 sub_400917()
{unsigned int v1; // [rsp+0h] [rbp-10h]int i; // [rsp+4h] [rbp-Ch]int j; // [rsp+8h] [rbp-8h]int k; // [rsp+Ch] [rbp-4h]v1 = 1;for ( i = 0; i <= 4; ++i ){for ( j = 0; j <= 4; ++j ){for ( k = j + 1; k <= 4; ++k ){if ( *((_BYTE *)&unk_601060 + 5 * i + j) == *((_BYTE *)&unk_601060 + 5 * i + k) )// 每5个字符不重复v1 = 0;if ( *((_BYTE *)&unk_601060 + 5 * j + i) == *((_BYTE *)&unk_601060 + 5 * k + i) )v1 = 0;}}}return v1;
}

接下来是check函数

有两个监测点:

这是第一个检测点

if ( *((_BYTE *)&unk_601060 + 5 * i + j) == *((_BYTE *)&unk_601060 + 5 * i + k) )// 每5个字符不重复

将地址为0x601060的数组每五个一行

每一行的每一个字符都不能重复

第二检测点:

if ( *((_BYTE *)&unk_601060 + 5 * j + i) == *((_BYTE *)&unk_601060 + 5 * k + i) )v1 = 0;

每一列的元素不能相同。

最后可以得到

1 4 0 2 3 

3 0 4 1 2 

0 1 2 3 4

2 3 1 4 0

4 2 3 0

对应的中序遍历的数组就是0 4 2 1 4 2 1 4 3 0

重新建立树,再进行层次遍历,得到的就是1 1 3 4 2 4 0 0 2 4

所以flag就是flag{1134240024}

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

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

相关文章

FSMC—扩展外部SRAM

一、SRAM控制原理 STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间&#xff0c;但当程序较大&#xff0c;内存和程序空间不足时&#xff0c;就需要在STM32芯片的外部扩展存储器了。STM32F103ZE系列芯片可以扩展外部SRAM用作内存。 给STM32芯片扩展内存与给…

基于云平台技术的自动泊车浅谈

基于云平台技术的自动泊车浅谈 一、引言 自动泊车技术是当前汽车技术的重要发展方向之一&#xff0c;它能够帮助驾驶员自动完成泊车操作&#xff0c;提高驾驶安全性。基于云平台技术的自动泊车创新&#xff0c;将为自动泊车技术的发展带来新的突破。 二、云平台技术概述 云…

【计算机网络】TCP原理 | 可靠性机制分析(一)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程、计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

sensor 点亮出图后,画面全黑是为什么?

同事在点一个思特威的 sensor sc035hgs&#xff0c;这个 sensor 主要负责数据采集&#xff0c;然后给到后面的 NN&#xff08;神经网络&#xff09;去做处理。 点亮出图后&#xff0c;画面很黑&#xff0c;如下图所示&#xff1a; 因为没拿到板子&#xff0c;只能盲猜&#xf…

Python 注释的方法

在Python中&#xff0c;有两种常见的注释方法&#xff1a; 单行注释&#xff1a;使用#符号来注释一行代码。在#符号后面的内容将被视为注释&#xff0c;不会被解释器执行&#xff0c;如&#xff1a; # 这是一个单行注释 print(hello world!) # 打印字符串多行注释&#xff1…

面试官:说说HashMap和HashTable的区别

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

与CSDN相识的第一年

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

算法日志的存在核心在于搭建自检系统

"相信每一个人执行与日志有关的任务都会遇到这样难题吧&#xff1f;长达几万行的日志&#xff0c;如果我们单纯用肉眼去一个个排查&#xff0c;那么恐怕所耗费的时间是以天为计量单位了。当然这是一种比较夸张的情况&#xff0c;根据我的项目经验&#xff0c;正常情况是十…

每日一博 - 多租户技术及其三种数据存储策略

文章目录 概述应用程序隔离数据隔离小结 概述 多租户技术&#xff08;Multi-Tenant Technology&#xff09;是软件即服务&#xff08;SaaS&#xff09;架构中的一项核心技术&#xff0c;允许单一软件应用或服务同时服务于多个客户&#xff08;即“租户”&#xff09;&#xff…

作为产品经理,如何分析和管理产品需求?

实际工作中&#xff0c;需求分析和需求管理能力是产品经理的基础能力&#xff0c;那么该如何进行需求分析和管理呢&#xff1f; 需求分析阶段的核心可以总结为两句话&#xff1a;“这个需求能不能做&#xff1f;做成什么样&#xff1f;”。 一、需求收集 需求收集环节需要针…

软件测试|Python函数参数之必传参数、默认参数、可变参数、关键字参数的详细使用

在Python中&#xff0c;函数参数是定义在函数头部的变量&#xff0c;用于接收传递给函数的数据。Python函数参数有四种类型&#xff1a;必传参数、默认参数、可变参数和关键字参数。每种类型都有不同的使用方式和适用场景。本文将详细介绍这四种函数参数的使用方法。 Python函…

ArkTS - 网络请求

一、Axios请求 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 前端开发肯定都使用过一个叫axios的第三方库&#xff0c;它是是一个基于 promise 的网络请求库&#xff0c;可以用于浏览器和 node.js&…

关于曲率、曲率半径和曲率圆,看这几篇文章就够啦

关于曲率、曲率半径和曲率圆的内容&#xff0c;是考研数学数学一和数学二大纲中明确要求掌握的内容&#xff0c;但这部分内容在很多教材教辅以及练习题中较少涉及。在本文中&#xff0c;荒原之梦考研数学网就为大家整理了曲率、曲率半径和曲率圆方程相关的概念、基础知识以及练…

LauraGPT

git&#xff1a;https://github.com/alibaba-damo-academy/FunCodec 文章目录 model archAudioTokenizermodel init model arch text-embedding 用千问的模型参数初始化&#xff1b;AudioEncoder用asr-conformer的参数初始化&#xff1b;所有的参数都参与更新&#xff0c;除了C…

实时语义分割模型PP-LiteSeg论文解读

paper&#xff1a;PP-LiteSeg: A Superior Real-Time Semantic Segmentation Model official implementation&#xff1a;https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.8/paddleseg/models/pp_liteseg.py 本文的创新点 提出了一种灵活的轻量级解码器&#xf…

Maven pom.xml 添加本地jar包依赖以及打包方法

1. 安装到本地仓库 mvn install:install-file -DfileD:\XX.jar -DgroupIdXX -DartifactIdXX -Dversion1.11 -Production -Dpackagingjar 2.dependency中指定scope"system"和本地jar包路径 &#xff08;1&#xff09;配置本地jar包依赖&#xff08;systemPath指向本…

SpringBoot+Vue轻松实现考试管理系统

简介 本系统基于 Spring Boot 搭建的方便易用、高颜值的教学管理平台&#xff0c;提供多租户、权限管理、考试、练习、在线学习等功能。主要功能为在线考试、练习、刷题&#xff0c;在线学习。课程内容支持图文、视频&#xff0c;考试类型支持考试、练习、问卷。 源码下载 网…

Linux|服务器|简单记录备忘VMware虚拟机开启桌面失败报错:VMware: No 3D enabled (0, Success).的解决

一&#xff0c; VMware虚拟机 Linux操作系统&#xff0c;centos7版本&#xff0c;安装完桌面后&#xff0c;执行startx 命令后 &#xff0c;报错&#xff1a;VMware: No 3D enabled (0, Success). 桌面没有启动成功 完整日志输出如下&#xff1a; [rootnode4 ~]# startx x…

上传自己的依赖到maven仓库 -- 保姆级复盘

上传自己的依赖到maven仓库 -- 保姆级复盘 1、准备工作1.1、安装Git1.2、将需要上传的代码先上传到Gitee中1.2.1、上传步骤1.2.2、如果出现以下错误&#xff08;主要原因是gitee中README.md文件和本地不一致&#xff0c;或者不在本地代码目录中&#xff09; 2、sonatype注册登录…

文件批量重命名:高效整理文件的技巧,随机汉字重命名文件

在数字化时代&#xff0c;每天都要处理大量的文件&#xff0c;无论是文档、图片还是音频、视频。随着时间的推移&#xff0c;文件库可能会变得混乱不堪&#xff0c;难以找到想要的文件&#xff0c;可见文件名有着重要的作用。现在一起来看云炫文件管理器高效的文件整理方法&…