攻防世界[GoodRe]

攻防世界[GoodRe]

学到知识:

  1. 逆向的精髓:三分懂,七分蒙。
  2. TEA 算法快速识别(蒙):
  • 数据处理的形式:进入加密时的数据和加密结束后的数据,处理时数据的分组等等,都能用来识别TEA算法。
  • 关键数据识别,循环次数,dalte值,key。
  1. 题目地址:攻防世界 (xctf.org.cn)

题解:

  1. 动调,需要输入输入,后面输出error。

image-20240526205940185

  1. 进入main函数看逻辑:要求输入的长度为64,完事后进一个循环,while循环中处理了一堆数据,后面加密时使用,依次看这两个函数。

    image-20240526210047301

    • check_num函数:其中查了一个十六进制字符表,光静态分析不方便,直接上动态调试来分析,按其中的要求十六进制必须是大写,不然白费,观察rax寄存器的值,他是返回值,将我们的输入转化为了对应的数值,所以函数的功能就是 每8个一组 挨个查 十六进制表 返回字符对应的数值。

    image-20240526210414998

    image-20240526210819447

    image-20240526210904368

    • init_num函数:逻辑比较简单,将传入的a2放到a1数组中,前面多放一个4(不知道有啥用),一起动调看一下,确实把v6的值放进入了。

    image-20240526211126187

    image-20240526211342484

    • 最后这个循环的逻辑就清楚了:进行了三个组参数的初始化,首先数我们输入的字符每 8个一组 转化为对应的 十六进制数值 ,其次用0x11初始化v14,再使用程序本身自带的 dword_5580AECA2020 初始化v15/v8。
  2. 循环结束后续重复调用了四个一样的函数,这里推测大概率是加密函数了(后续直接就判断并输出error),但是v11,v12,v13似乎还并未初始化,这里直接去看汇编观察传入了哪些参数:这里是传入了两个地址,一个是前面初始化的v14,一个是,前面初始化的我们输入,这里换一个清晰点的输入 6677888899999999AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFF

image-20240526212505398

image-20240526212425055

image-20240526212121822

  1. 这里仔细观察下一个encode函数,其接受的参数:其直接从 AAAAAAAA 开始接受,跳过了中间的 99999999 ,下一个encode函数任然如此,跳过了 BBBBBBBB ,直接从 CCCCCCCC 开始。结合前面初始化时将我们输入的64个字符每8个一组进行分组,共8组,说明这加密函数是将分组后的数据两两一起加密,最后共加调用encode函数4次,加密4次,刚好架构8组数据全部加密完,再众多加密函数中,大概率只有TEA加密时需要将两个数据同时进行加密,所以可以盲猜该算法可能时TEA加密。

image-20240526212557121

image-20240526212744972

  1. 进入该函数查看:其中一大堆函数,首先看到显眼的32,while循环的轮数为32与TEA算法刚好契合,里面还有两串数值 0x830A53760x1D3D2ACF 生成了v9,v9在后面函数中被调用过一次,猜测v9应该就是 dalte (动调拿到0x9E3779B9),再找key,a2被调用三次一次传入不同的地址,取不同地址处的值来初始化v10,v11,v12,v13,虽然地址不同但初始化最后都为0x11(前面循环时只用0x11来初始化v14),观察函数调用时传入的参数逻辑,v6就是sum,函数调用中对sum采用的是加 dalte 且是再循环开始时,v4、v5就是待加密的两个值。

image-20240526213719764

image-20240526214737552

image-20240526213409452

  1. 最后的加密结果是由 dword_56267207D020 处的值来初始化的,直接提取即可,解密脚本如下,注意最后全部时大写才行:
#include <debugapi.h>
#include <stdio.h>
int main()
{unsigned int key[4] = {0x11, 0x11, 0x11, 0x11};                                                                             // 密钥unsigned int value[8] = {0x79AE1A3B, 0x596080D3, 0x80E03E80, 0x846C8D73, 0x21A01CF7, 0x0C7CACA32, 0x45F9AC14, 0x0C5F5F22F}; // 密文int dalte = 0x9e3779b9;int i = 0, j = 0, h = 0;int wheel = 32; // 轮数unsigned int sum = 0;// 逆算法for (i = 0; i < 8; i++, i++){sum = (dalte * (wheel));// 每轮加密// for (j = 0; j < 4; ++j){for (h = 0; h < wheel; ++h){value[i + 1] -= (key[3] + (value[i] >> 5)) ^ (sum + value[i]) ^ (key[2] + 16 * value[i]);value[i] -= (key[1] + (value[i + 1] >> 5)) ^ (sum + value[i + 1]) ^ (key[0] + 16 * value[i + 1]);sum -= dalte;}}}for (i = 0; i < 8; i++){printf("%X", value[i]);}return 0;
}
//7DEA3F6D3B3D6C0C620864ADD2FA2AE1A61F2736F0060DA0B97E8356D017CE59
  1. 最后验证结果正确:

image-20240526214948280

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

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

相关文章

使用libtorch加载YOLOv8生成的torchscript文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…

VMware虚拟机如何与主机共享文件夹

本机:WIN10 VMware虚拟机:WIN7 因为每次配置都爱忘记操作,目标是为了在WIN7虚拟机中可以访问本机文件 首先本机操作 新建一个共享文件夹,不带中文目录(最好不要) 点击共享 选择everyone,记得权限"读取和写入" 然后到虚拟机里面 添加一个网络位置 点击浏览,选择网…

第一节:Redis的数据类型和基本操作

最近整理了关于Redis的一些文档&#xff0c;分享给大家&#xff0c;后续会持续更新...... Redis的数据类型 字符串String String&#xff1a;字符串&#xff0c;可以存储String、Integer、Float型的数据&#xff0c;甚至是二进制数据&#xff0c;一个字符串最大容量是512M 列表…

IS-IS DIS

原理概述 OSPF 协议支持4种网络类型&#xff0c; IS-IS 协议只支持两种网络类型&#xff0c;即广播网络和点到点网络。与 OSPF 协议相同&#xff0c; IS-IS 协议在广播网络中会将网络视为一个伪节点( Pseudonode &#xff0c;简称 PSN )&#xff0c;并选举出一台 DIS ( Designa…

ISCC2024个人挑战赛WP-WEB

&#xff08;非官方解&#xff0c;以下内容均互联网收集的信息和个人思路&#xff0c;仅供学习参考&#xff09; 还没想好名字的塔防游戏 GET /world.js HTTP/1.1 Host: 101.200.138.180:17345 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,i…

springcloud多个服务共用同一个nacos配置

spring:profiles:active: devcloud:nacos:config:server-addr: 172.168.1.xx:8848enabled: truefile-extension: yamlnamespace: public#按需引入nacos中的配置#shared-configs: database.yamlextension-configs:# 数据源配置- data-id: database.yamlgroup: DEFAULT_GROUP# re…

系统思考—问题分析与持续改进

刚刚为一家500强企业完成了《系统思考—问题分析与持续改进》的课程。学员们开始意识到&#xff0c;不能仅仅停留在冰山上层事件去解决问题&#xff0c;而是要深入观察隐藏在背后的趋势变化。学会如何识别系统中的深层次原因&#xff0c;并从全局视角来制定更加有效的改进策略。…

电子电器架构 - 车载网管功能简介

电子电器架构 - 车载网管功能简介 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,…

Windows下安装配置深度学习环境

Windows下安装配置深度学习环境 1. 准备工作 1.1 环境准备 操作系统&#xff1a;win10 22H2 GPU&#xff1a;Nvidia GeForce RTX 3060 12G 1.2 安装Nvidia驱动、cuda、cuDNN 下载驱动需要注册并登录英伟达账号。我这里将下面用到的安装包放到了百度网盘&#xff0c;可以关注微信…

DFA 算法

为什么要学习这个算法 前一段时间遇到了瓶颈&#xff0c;因为词库太多了导致会有一些速度过慢&#xff0c;而且一个正则表达式已经放不下了&#xff0c;需要进行拆分正则才可以。 正好我以前看过有关 dfa 的介绍&#xff0c;但是并没有深入的进行研究&#xff0c;所以就趁着周…

词条唤夜兽唤夜兽的养殖与护理 幻兽帕鲁 唤夜兽怎么获取 唤夜兽去哪里抓 crossover玩Steam游戏

唤夜兽在地图上没有出现&#xff0c;是唤冬兽和雷冥鸟共同培育出来的帕鲁。 ------------------------- 介绍&#xff1a; 帕洛斯群岛之守护神&#xff0c;拥呼唤黑夜之力。 其会于灾厄席捲大地之际腾空而起&#xff0c;唤来无尽暗夜&#xff0c;试图封印灾厄。 ---------…

mac操作系统下,docker登录nexus私库,提示不支持https协议的错误

一、背景 我们使用nexus搭建了一个Docker Registry私有仓库&#xff0c;在Mac操作系统&#xff0c;在推送本地镜像到私库前&#xff0c;要求我们登录私库&#xff0c;报错如下&#xff1a; docker login 192.168.5.6:8086 -u username -p passwordWARNING! Using --password …

设计模式10——装饰模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 装饰模式 是一种行为型模式。…

推荐丨快速申请免费域名证书

背景&#xff1a; 域名是一个IP地址上的“面具” 。一个域名的目的是便于记忆和沟通的一组服务器的地址(网站&#xff0c;电子邮件&#xff0c;FTP等)。 通俗的说&#xff0c;域名就相当于一个家庭的门牌号码&#xff0c;别人通过这个号码可以很容易的找到你。 域名不仅便于记…

Facebook广告如何开户以及投放费用?

Facebook作为全球最大的社交媒体平台之一&#xff0c;成为了企业与个人推广品牌、产品或服务的重要渠道。其精准的广告定向功能和庞大的用户基数&#xff0c;为广告主提供了无限的商机。云衔科技为企业提供专业的Facebook上开户和运营服务&#xff0c;助力您高效获客。 一、Fa…

Go 1.23 Release Notes编写方式改进!

2024.5.22日&#xff0c;Go 1.23 feature冻结&#xff01;Go团队开始Go 1.23rc1的冲刺&#xff0c;截至发文时&#xff0c;Go 1.23 milestone已经完成59%(https://github.com/golang/go/milestone/212)&#xff0c;还有188个open的issue待解决。 Go 1.23有哪些新feature&#x…

YAML详情

一、kubernetes支持对象 Kubernetes支持YAML和JSON格式管理资源对象 JSON格式&#xff1a;主要用于api接口之间消息的传递YAML格式&#xff1a;用于配置和管理&#xff0c;YAML是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 二、YAML语法格式注意点 …

Octo 精武门? :开源的通用机器人模型

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提供了大模型领域最新技…

【C++ —— 哈希】学习笔记 | 模拟实现封装unordered_map和unordered_set

文章目录 前言一、unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二、底层结构2.1哈希概念&#xff08;哈希是一种算法思想&#xff09;2.2哈希冲突2.3 解决哈希冲突方法&#xff1a;1.直接定址法&#xff08;值和位置关系是唯一关系&#xff0c;每个人都有唯一位…

NextJs 初级篇 - 安装 | 路由 | 中间件

NextJs 初级篇 - 安装 | 路由 | 中间件 一. NextJs 的安装二. 路由2.1 路由和页面的定义2.2 布局的定义和使用2.3 模板的定义和使用① 模板 VS 布局② 什么是 use client 2.4 路由跳转的方式2.5 动态路由2.6 路由处理程序① GET 请求的默认缓存机制② 控制缓存或者退出缓存的手…