2024蓝桥杯CTF--逆向

蓝桥杯付费CT--逆向

    • 题目:RC4
    • 题目:happytime
    • 总结:

题目:RC4

  1. 先查壳,无壳,并且是32位:

  2. 用32位的ida打开,直接定位到main函数:

  3. 重点关注sub_401005函数,这个应该就是加密函数无疑:

  4. 典型的RC4加密无疑,这里有两种方法进行逆向,第一种:可以在main函数中第52行打上断点,运行到这里后直接查看内存中的V5,即位flag。第二种:将需要的信息提取出来key=gamelab@,使用脚本进行解密:

  5. 第一种:

  6. 第二种:

#RC4加密
def rc4(key, ciphertext):# 初始化S盒sbox = list(range(256))j = 0for i in range(256):j = (j + sbox[i] + key[i % len(key)]) % 256sbox[i], sbox[j] = sbox[j], sbox[i]# 生成密钥流i = 0j = 0keystream = []for _ in range(len(ciphertext)):i = (i + 1) % 256j = (j + sbox[i]) % 256sbox[i], sbox[j] = sbox[j], sbox[i]k = sbox[(sbox[i] + sbox[j]) % 256]keystream.append(k)# print(keystream)# 解密密文plaintext = []for i in range(len(ciphertext)):m = ciphertext[i] ^ keystream[i]plaintext.append(m)print(plaintext)# 将明文转换为字符串return ''.join([chr(p) for p in plaintext])# 测试
key = b"gamelab@"
ciphertext =[0xB6,0x42,0xB7,0xFC,0xF0,0xA2,0x5E,0xA9,0x3D,0x29,0x36,0x1F,0x54,0x29,
0x72,0xA8,0x63,0x32,0xF2,0x44,0x8B,0x85,0xEC,0xD,0xAD,0x3F,0x93,0xA3,0x92,
0x74,0x81,0x65,0x69,0xEC,0xE4,0x39,0x85,0xA9,0xCA,0xAF,0xB2,0xC6]
# for i in ciphertext:
#     print(chr(i),end="")
plaintext = rc4(key, ciphertext)
print(plaintext)
#flag{12601b2b-2f1e-468a-ae43-92391ff76ef3}
  1. 两个flag一样,说明正确。

题目:happytime

  1. 同样的流程,查壳无,64位的.elf程序,使用ida打开,直接进入main函数:

  2. printf输出提示信息Let’s have a drink,pay your answer(flag):,read在键盘读取flag输入,重要的关键函数是cry加密函数,接受v5和输入的flag,这里的11应该是flag被分割成了11组,最后一个循环比较加密后的flag和V6,刚好和上面v6数组对应:

  3. 根据函数的特征,可以判定这是XXTEA加密无疑,找到其中的DELTA,密文(main函数中的v6),和key(前面main函数的V5),即可编写脚本解密(输出的时候注意大小端序):

#include <stdbool.h>
#include <stdio.h>
#define MX (((z >> 5) ^ (y << 2)) + ((y >> 3) ^ (z << 4)) ^ (sum ^ y) + (k[(p & 3) ^ e] ^ z))
bool btea(unsigned int *v, int n, unsigned int *k)
{unsigned int z = v[n - 1], y = v[0], sum = 0, e, DELTA = 0x61C88647;unsigned int p, q;if (n > 1){ /* enCoding Part */q = 415 / n + 114;while (q-- > 0){sum += DELTA;e = (sum >> 2) & 3;for (p = 0; p < (n - 1); p++){y = v[p + 1];z = v[p] += MX;}y = v[0];z = v[n - 1] += MX;}return 0;}else if (n < -1){ /* Decoding Part */n = -n;q = 415 / n + 114;sum = -q * DELTA;while (sum != 0){e = (sum >> 2) & 3;for (p = n - 1; p > 0; p--){z = v[p - 1];y = v[p] -= MX;}z = v[n - 1];y = v[0] -= MX;sum += DELTA;}return 0;}return 1;
}int main()
{unsigned int v[11] = {0x480AC20C, 0xCE9037F2, 0x8C212018, 0xE92A18D, 0xA4035274, 0x2473AAB1, 0xA9EFDB58, 0xA52CC5C8, 0xE432CB51, 0xD04E9223, 0x6FD07093}, key[4] = {0x79696755, 0x67346F6C, 0x69231231, 0x5F674231};int n = 11;       // n为要加密的数据个数btea(v, -n, key); // 取正为加密,取负为解密char *p = (char *)v;for (int i = 0; i < 44; i++){printf("%c", *p);p++;}return 0;
}
//flag{efccf8f0-0c97-12ec-82e0-0c9d9242e335}
  1. 最后输入验证flag成功!!!

总结:

  1. 蓝桥杯CTF(付费CTF),逆向题难度签到题难度,题目质量。。。。,也难怪圈。

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

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

相关文章

SDM模型——建模用户长短期兴趣的Match模型

1. 引言 SDM模型(Sequential Deep Matching Model)是阿里团队在2019年CIKM的一篇paper。模型属于序列召回模型&#xff0c;研究的是如何通过用户的历史行为序列去学习到用户的丰富兴趣。 SDM模型把用户的历史序列根据交互的时间分成了短期和长期两类&#xff0c;然后从短期会…

hwte git GitHub

电脑重装系统或者第一次配置HWTE Git&#xff0c;需要配置hosts文件 配置hosts 文件 1、先检查host文件&#xff1a;vim(sudo vim) /etc/hosts&#xff0c;是否配置了如下内容&#xff0c;没有的话&#xff0c;将如下内容加进去&#xff0c; #Radar hosts 17.34.114.138 atla…

构建NodeJS库--前端项目的打包发布

1. 前言 学习如何打包发布前端项目&#xff0c;需要学习以下相关知识&#xff1a; package.json 如何初始化配置&#xff0c;以及学习npm配置项&#xff1b; 模块类型type配置&#xff0c; 这是nodejs的package.json的配置main 入口文件的配置 webpack 是一个用于现代 JavaSc…

【动态规划】Leetcode 416. 分割等和子集【中等】

分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和 [1…

正则表达式的常见语法

目录 一、基本的正则表达式语法 1.1 字符类 1.2 单个字符的特殊表示 1.3 量词表示 1.4 边界匹配 1.5 分组与捕获 二 、java中的使用 在Java中使用正则表达式进行字符串匹配可以说是一个很重要的技能&#xff0c;尤其对于需要进行文本处理或者字符替换的程序来说&#xff0…

基于java+springboot+vue实现的个人博客系统(文末源码+Lw)200

摘 要 随着国内市场经济这几十年来的蓬勃发展&#xff0c;突然遇到了从国外传入国内的互联网技术&#xff0c;互联网产业从开始的群众不信任&#xff0c;到现在的离不开&#xff0c;中间经历了很多挫折。本次开发的个人博客系统&#xff0c;有管理员&#xff0c;用户&#xf…

excel一列同乘同一个数

excel一列同乘同一个数 第一种方法&#xff08;excel本身功能&#xff09; 在空白区域输入要乘以的数&#xff0c;比如0.5 右键选择复制 选中需要乘以的单元格&#xff0c;选择性粘贴 点击乘&#xff0c;选择确定 删除0.5后也不会改变值 第二种方法&#xff08;方方格子…

HODL、FUD、FOMO 等其他比特币俚语是什么意思?

作者&#xff1a;Paxful Team 1、FOMO&#xff08;惧怕错失机会&#xff09; FOMO 是惧怕错失机会的缩写&#xff0c;可用于日常生活。它指的是当其他人都在谈论比特币时&#xff0c;产生的购买比特币的紧迫感。 2、Shill&#xff08;不断推广吹捧&#xff09; Shilling 是指…

上传jar到github仓库,作为maven依赖存储库

记录上传maven依赖包到github仓库问题 利用GitHubPackages作为依赖的存储库踩坑1 仓库地址问题踩坑2 Personal access tokens正确姿势一、创建一个普通仓库&#xff0c;比如我这里是fork的腾讯Shadow到本地。地址是&#xff1a;https://github.com/dhs964057117/Shadow二、生成…

[C++ QT项目实战]----C++ QT系统实现多线程通信

前言 在C QT中&#xff0c;多线程通信原理主要涉及到信号与槽机制和事件循环机制。 1、信号与槽机制&#xff1a; 在QT中&#xff0c;信号与槽是一种用于对象间通信的机制。对象可以通过发送信号来通知其他对象&#xff0c;其他对象通过连接槽来接收信号并进行相应的处…

mysql 临时表 dual postgre 是否也有

MySQL 和 PostgreSQL 对于 DUAL 表的处理方式有所不同&#xff1a; MySQL&#xff1a; MySQL 中确实存在一个名为 DUAL 的特殊表&#xff0c;但它是一个虚拟表&#xff0c;没有实际数据。其主要用途是为那些不需要从任何实际表中获取数据&#xff0c;但仍需要符合 SQL 语法规则…

39岁TVB靓仔小生自曝恋情,曾沦为洗车工如今半年赚足7位数

39岁高钧贤自从2005年参加香港先生选举夺冠后&#xff0c;之后加入TVB拍摄过多套电视剧集&#xff0c;最近更有份参与《逆天奇案2》&#xff0c;日前他回到TVB电视城一厂与冯盈盈宣传剧集&#xff0c;更随即拍摄短片纪录放在网上分享&#xff0c;意外曝光TVB餐厅餐单&#xff0…

MFRC50001T 封装SOP-32 高性能非接触式读写芯片

MFRC50001T是由NXP Semiconductors&#xff08;恩智浦半导体&#xff09;生产的一款高性能非接触式读写芯片。这款芯片主要针对13.56 MHz频段的RFID&#xff08;无线射频识别&#xff09;和MIFARE Classic协议&#xff0c;支持ISO/IEC 14443 Type A标准的多层应用。MFRC50001T芯…

pve(Proxmox VE)安装i225v网卡驱动

配置pve源 备份原来的源 mv /etc/apt/sources.list /etc/apt/sources.list.bak打开文件 vi /etc/apt/sources.list将以下内容粘贴进去 deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmwaredeb https://mirrors.tuna.tsing…

计算机常识 | 快速格式化、擦除格式化、覆盖格式化 | 直连电脑可相互ping通

文章目录 一、快速格式化、擦除格式化、覆盖格式化二、两台没有联网的设备通过网线直接相连能够相互ping通的原因 一、快速格式化、擦除格式化、覆盖格式化 快速格式化、擦除格式化和覆盖格式化是针对计算机存储设备&#xff08;如硬盘驱动器或固态硬盘&#xff09;上数据删除和…

yolov5中的C3、yolov8中的C2f的【全称】和【代码】

文章目录 yolov5的C3全称yolov8的C2f全称 yolov5的C3全称 点击可找到C3模块然后查看全称&#xff1a;https://github.com/ultralytics/yolov5/blob/master/models/common.py全称为&#xff1a;CSP Bottleneck with 3 convolutions C3模块代码 class C3(nn.Module):# CSP Bott…

AI大模型探索之路-训练篇5:大语言模型预训练数据准备-词元化

系列文章目录&#x1f6a9; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据…

深入理解Java消息中间件-组件-消息队列

引言: 消息中间件在现代分布式系统中扮演着至关重要的角色&#xff0c;它解决了系统之间异步通信和解耦的需求。而在消息中间件的架构中&#xff0c;核心组件之一就是消息队列。本文将深入探讨消息队列的架构组件&#xff0c;帮助读者加深对消息中间件的理解和应用。 一、什么…

DML触发器的创建

目录 触发器的创建 DML触发器的创建 语句级 DML 触发器的创建 创建触发器&#xff0c;当对emp数据表进行添加记录、更新记录和删除记录的时候&#xff0c;判断是否是工作时间段&#xff0c;如果不是工作时间段&#xff0c;不允许执行 在数据表 dept 上创建触发器&#xff…