[HDCTF 2023]enc

32位

这里后面运行这个程序居然要 Visual Studio,不然运行不了

IDA打开,直接锁定main函数

看见v9,四个32位,就想到了tea加密

标准tea

from ctypes import *
#tea
def decrypt(v, k):v0 = c_uint32(v[0])v1 = c_uint32(v[1])delta = 0x9e3779b9sum1 = c_uint32(delta * 32)for i in range(32):v1.value -= ((v0.value << 4) + k[2]) ^ (v0.value + sum1.value) ^ ((v0.value >> 5) + k[3])v0.value -= ((v1.value << 4) + k[0]) ^ (v1.value + sum1.value) ^ ((v1.value >> 5) + k[1])sum1.value -= deltareturn v0.value, v1.value
if __name__ == '__main__':a = [1627184887, 37149676]k = [18, 52, 86, 120]print("解密后数据:", decrypt(a,k))

4是直接赋值的,3就是我们输入的

但是这只是第一关,下面还有一个函数

我们进sub411302发现是这个,两种可能

smc和花指令

我们看汇编,这是正常的

那么就是smc自加密了

动调

再次编译下这个函数就ok了

int __cdecl sub_41D000(char *Str)
{char v2; // [esp+0h] [ebp-558h]size_t m; // [esp+190h] [ebp-3C8h]BOOL v4; // [esp+19Ch] [ebp-3BCh]int k; // [esp+1A8h] [ebp-3B0h]int v6; // [esp+1B4h] [ebp-3A4h]int v7; // [esp+1C0h] [ebp-398h]int i; // [esp+1CCh] [ebp-38Ch]int j; // [esp+1CCh] [ebp-38Ch]int v10; // [esp+1CCh] [ebp-38Ch]char v11; // [esp+1DBh] [ebp-37Dh]char v12; // [esp+1DBh] [ebp-37Dh]char v13[540]; // [esp+1E4h] [ebp-374h]char v14[24]; // [esp+400h] [ebp-158h] BYREFint v15; // [esp+418h] [ebp-140h]char v16[264]; // [esp+424h] [ebp-134h] BYREFchar v17[40]; // [esp+52Ch] [ebp-2Ch] BYREF__CheckForDebuggerJustMyCode(&unk_425036);v17[0] = 15;v17[1] = -108;v17[2] = -82;v17[3] = -14;v17[4] = -64;v17[5] = 87;v17[6] = -62;v17[7] = -32;v17[8] = -102;v17[9] = 69;v17[10] = 55;v17[11] = 80;v17[12] = -11;v17[13] = -96;v17[14] = 94;v17[15] = -53;v17[16] = 44;v17[17] = 22;v17[18] = 40;v17[19] = 41;v17[20] = -2;v17[21] = -1;v17[22] = 51;v17[23] = 70;v17[24] = 14;v17[25] = 87;v17[26] = -126;v17[27] = 34;v17[28] = 82;v17[29] = 38;v17[30] = 43;v17[31] = 110;v17[32] = -28;v17[33] = -126;v17[34] = 36;j_memset(v16, 0, 0x100u);v15 = j_strlen(Str);strcpy(v14, "you_are_master");v13[531] = 0;v6 = 0;for ( i = 0; i < 256; ++i ){v13[i + 264] = i;v13[i] = v14[i % j_strlen(v14)];}for ( j = 0; j < 256; ++j ){v6 = (v13[j] + v6 + v13[j + 264]) % 256;v11 = v13[j + 264];v13[j + 264] = v13[v6 + 264];v13[v6 + 264] = v11;}v7 = 0;v10 = 0;for ( k = 0; k < v15; ++k ){v10 = (v10 + 1) % 256;v7 = (v7 + v13[v10 + 264]) % 256;v12 = v13[v10 + 264];v13[v10 + 264] = v13[v7 + 264];v13[v7 + 264] = v12;v16[k] = v13[(v13[v7 + 264] + v13[v10 + 264]) % 256 + 264] ^ Str[k];}v4 = j_strlen(Str) == 35;for ( m = 0; m < j_strlen(v17); ++m ){if ( v17[m] != v16[m] ){v4 = 0;break;}}if ( v4 )return sub_41114F("right!!!!", v2);elsereturn sub_41114F("please try agin~", v2);
}

进入是一个RC4加密算法

from Crypto.Cipher import ARC4
# 假设这是经过RC4加密的数据
encrypt_data = [15, 148, 174, 242, 192, 87, 194, 224, 154, 69,55, 80, 245, 160, 94, 203, 44, 22, 40, 41,254, 255, 51, 70, 14, 87, 130, 34, 82, 38,43, 110, 228, 130, 36]
key = 'you_are_master'
encrypt_data_bytes = bytes("HDCTF{y0u_ar3_rc4_t3a_smc_m4ster!!}")
key_bytes = bytes(key, 'utf-8')
cipher = ARC4.new(key_bytes)
decrypted_data = cipher.encrypt(encrypt_data_bytes)
# 输出解密后的数据
try:print(decrypted_data.decode('utf-8'))  # 尝试以UTF-8格式解码
except UnicodeDecodeError:print("无法以UTF-8解码,原始数据可能不是以UTF-8编码。请检查原始数据的编码方式。")
# 如果你知道原始数据的具体编码方式,替换上面的 'utf-8' 为你知道的编码方式

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

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

相关文章

代码随想录阅读笔记-字符串【反转字符串】

题目 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印…

未来已来:科技驱动的教育变革

我们的基础教育数百年来一成不变。学生们齐聚在一个物理空间&#xff0c;听老师现场授课。每节课时长和节奏几乎一致&#xff0c;严格按照课表进行。老师就像“讲台上的圣人”。这种模式千篇一律&#xff0c;并不适用于所有人。学生遇到不懂的问题&#xff0c;只能自己摸索或者…

Linux查看硬件型号详细信息

1.查看CPU &#xff08;1&#xff09;使用cat /proc/cpuinfo或lscpu &#xff08;2&#xff09;使用dmidecode -i processor Dmidecode 这款软件允许你在 Linux 系统下获取有关硬件方面的信息。Dmidecode 遵循 SMBIOS/DMI 标准&#xff0c;其输出的信息包括 BIOS、系统、主板、…

UE4_调试工具_绘制调试球体

学习笔记&#xff0c;仅供参考&#xff01; 效果&#xff1a; 步骤&#xff1a; 睁开眼睛就是该变量在此蓝图的实例上可公开编辑。 勾选效果&#xff1a;

【Linux】进程与可执行程序的关系fork创建子进程写实拷贝的理解

一、进程与可执行程序之间关系的理解 系统会将此时在系统运行的进程的各种属性都以文件的形式给你保存在系统的proc目录下。运行一个程序的时候&#xff0c;本质就是把磁盘中的程序拷贝到内存中&#xff0c;当一个进程运行起来的时候&#xff0c;它本质已经和磁盘中的可执行程序…

基于springboot和mysql实现的在线考试系统

1.项目介绍 一个在线考试系统&#xff0c;考生可以注册&#xff0c;成为本平台的一个用户&#xff0c;然后进行考试&#xff0c;考完生成成绩&#xff0c;同时用户可以查询自己考试的试卷&#xff0c;可以查看试卷解析。 升级改版 新增出卷人角色&#xff0c;主要职责是进入…

滴滴 Flink 指标系统的架构设计与实践

毫不夸张地说&#xff0c;Flink 指标是洞察 Flink 任务健康状况的关键工具&#xff0c;它们如同 Flink 任务的眼睛一般至关重要。简而言之&#xff0c;这些指标可以被理解为滴滴数据开发平台实时运维系统的数据图谱。在实时计算领域&#xff0c;Flink 指标扮演着举足轻重的角色…

【C++】了解一下编码

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. ASCII编码3. unicode4. GBK5. 类型转换 1. 前言 看到string里面还有Template instantiations&#xff1a; string其实是basic_string<char>&#xff0c;它还是一个模板。 再看看wstring&#xff1…

Linux中的文件类型

一、Linux系统如何区分文件类型&#xff1f; Linux系统中不以文件后缀名来区分文件类型&#xff0c;而是通过文件属性中第一列来区分 &#xff08;Linux系统不以文件后缀名区分文件类型&#xff0c;但是不代表Linux系统不使用文件后缀名&#xff0c;LInux系统中的许多工具例如…

Linux 自带的耳机拔插检测驱动

Linux 自带的耳机拔插检测驱动是混在声卡驱动中&#xff0c;耳机拔插状态通过 input 子系统上报。 kernel-5.15/sound/soc/generic/simple-card-utils.c 571 int asoc_simple_init_jack(struct snd_soc_card *card, 572 struct asoc_simple_jack *sjack, 573 in…

C#按下enter键时keydown无响应的问题

KeyPreview已经设置为true了之后&#xff0c;按下enter键keydown不响应&#xff0c;但会根据系统默认的响应方法&#xff08;重复按下焦点所在button键&#xff09;做出响应。 解决方法&#xff1a; 在Form类中添加函数&#xff1a; protected override bool ProcessDialogKe…

AWTK 开源串口屏的配置文件

配置文件 每个 HMI 应用程序都需要一个配置文件&#xff0c;用于配置 HMI 的基本信息、服务、持久化、告警信息、历史数据等。 文件位置 design/default/data/settings.json基本配置 name - 名称&#xff08;必须配置&#xff0c;只能用字母、数字、下划线&#xff09; se…

如果网络不好 如何下载huggingface上的模型

很多朋友网络不太好&#xff0c;有时候上不了huggingface这样的国外网站&#xff1b; 或者网络流量不太够&#xff0c;想要下载一些stable diffusion模型&#xff0c;或者其他人工智能的大模型的时候&#xff0c;看到动辄几个G的模型文件&#xff0c;不太舍得下载&#xff1b;…

5 张图带你了解分布式事务 Saga 模式中的状态机

大家好&#xff0c;我是君哥。 状态机在我们的工作中应用非常广泛&#xff0c;今天聊一聊分布式事务中间件 Seata 中 Saga 模式的状态机。 1 状态机简介 状态机是一个数学模型&#xff0c;它将工作中的运行状态和流转规则抽象出来&#xff0c;可以协调相关信号来完成预先设定…

Pycharm安装阿里云通义码灵插件图文教程

前提&#xff1a;必须安装pycharm&#xff0c;可以访问 pycharm下载链接打开页面下载 点击下载后&#xff0c;将下载文件打开&#xff0c;然后无脑安装&#xff0c;安装好后继续看。 然后就安装好了&#xff0c;然后关闭安装&#xff0c;然后打开pycharm即可。 &#x1f680;…

【XML】xml转Freemind思维导图

通过以下代码可以将xml转换为Freemind软件的思维导图&#xff0c;方便查看各数据结构该代码运行需要安装lxml库 pip install lxml使用方式示例 python xml2mm.py *.xml *.mm转化完成示例&#xff0c;使用Freemind软件打开&#xff0c;该软件在ubuntu的软件商店中即可下载pyth…

如何在idea中配置tomcat服务器,然后部署一个项目

文章目录 前言第一步 先新建一个空项目第二步 添加框架支持第三步 添加配置及如何部署最后一步 运行及检查有没有问题总结 前言 本章学习的是在idea中配置tomcat服务器&#xff0c;然后部署一个项目 如果没有下载Tomcat服务器的可以在上一个博客观看下载及手动部署&#xff0c;…

es6有哪些新特性?

ES6&#xff08;ECMAScript 2015&#xff09;引入了许多新特性&#xff0c;使 JavaScript 更加现代化、强大和易用。以下是一些 ES6 的主要新特性&#xff1a; let 和 const 声明&#xff1a;引入了 let 和 const 关键字用于声明变量&#xff0c;let声明的变量具有块级作用域&a…

Ubuntu系统中尚未安装NVIDIA驱动程序

当执行命令&#xff1a; nvidia-smi提示 Command nvidia-smi not found, but can be installed with:apt install nvidia-340 # version 340.108-0ubuntu5.20.04.2, or apt install nvidia-utils-390 # version 390.157-0ubuntu0.20.04.1 apt install nvidia-utils-450-ser…

【通信原理笔记】【二】随机信号分析——2.2 平稳随机过程

文章目录 前言一、平稳随机过程1.1 广义平稳过程1.2 遍历性 二、两个随机过程之间的关系2.1 联合平稳2.2 随机过程的相关关系2.2.1 随机变量的不相关2.2.2 随机过程的不相关 总结 前言 我们学习了随机信号以及随机信号的相关函数与功率谱的计算方法&#xff0c;但是这种计算还…