[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系统中的许多工具例如…

如果网络不好 如何下载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;…

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

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

线程常用方法

一常用方法第一组 1.setName 设置线程名称&#xff0c;使之与参数name相同&#xff1b; 2.getName 返回该线程的名字&#xff1b; 3.start 使该线程开始执行&#xff0c;java虚拟机底层调用该线程的statr0方法&#xff1b; 4.run …

前端学习之css伪元素选择器

伪元素选择器 &#xff08;注释是对各个内容的解释与理解&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>伪元素选择器</title><!-- 双冒号开头一般都称为伪元素&#xff0c;…

面向对象编程第三式: 多态 (Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

(三)OpenOFDM符号对齐

符号对齐 模块&#xff1a;sync_long.v输入&#xff1a;I (16), Q (16), phase_offset (32), short_gi (1)输出&#xff1a;long_preamble_detected (1), fft_re (16), fft_im (16) 检测到数据包后&#xff0c;下一步是精确确定每个 OFDM 符号的起始位置。在802.11中&#xf…

vue2+vant2+Laravel7 实现多图上传到七牛云

后端接口 1、路由&#xff0c;在 routes/api.php 中 Route::resource(photos, PhotoController)->only(store);2、创建对应控制器 <?php namespace App\Http\Controllers; use Illuminate\Http\Request;class PhotoController extends Controller {/**** 上传图片* p…

深度学习-基于机器学习的语音情感识别系统的设计

概要 语音识别在现实中有着极为重要的应用&#xff0c;现在语音内容的识别技术已日趋成熟。当前语音情感识别是研究热点之一&#xff0c;它可以帮助AI和人更好地互动、可以帮助心理医生临床诊断、帮助随时随地高效测谎等。本文采用了中科院自动化所的CASIA语料库作为样本&#…

算法---滑动窗口练习-6(找到字符串中所有字母异位词)

找到字符串中所有字母异位词 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;找到字符串中所有字母异位词 2. 讲解算法原理 有效字符个数count更新条件&#xff1a;满足【hash1表&#xff08;遍历s的表&#xff09;中对应元素出现次数<hash2表&am…