[HNCTF 2022 WEEK4]flower plus

第一种花指令
image.png
第二种花指令
image.png
根据两种花指令特征,写出去花指令脚本
image.png
image.png

saddr=0x401000
eaddr=0x435000
for i in range(saddr,eaddr):if get_wide_dword(i)==0x01740275:print(hex(i)+','+hex(get_wide_dword(i)))patch_byte(i-5,0x90)patch_dword(i-4,0x90909090)patch_dword(i,0x90909090)patch_word(i+4,0x9090)if get_qword(i)==0x8336E800000001E8:print(hex(i)+','+hex(i+4)+','+hex(get_wide_dword(i)))patch_qword(i,0x9090909090909090)patch_dword(i+8,0x90909090)patch_byte(i+12,0x90)

使用脚本将花指令去除后,u,c,p一下基本没啥问题。
可以得到下面正常main函数
image.png
分析可得为rc4+xor加密

saddr=0x401000
eaddr=0x435000
for i in range(saddr,eaddr):if get_wide_dword(i)==0x01740275:print(hex(i)+','+hex(get_wide_byte(i)))patch_dword(i,0x90909090)patch_dword(i-4,0x90909090)patch_word(i+4,0x9090)patch_byte(i-5,0x90)if get_wide_dword(i)==0x000001E8:if get_wide_dword(i+4)==0x8336E800:print(hex(i)+','+hex(get_wide_byte(i)))patch_dword(i,0x90909090)patch_dword(i+4,0x90909090)patch_dword(i+8,0x90909090)patch_byte(i+12,0x90)

用下面idapython脚本得到密文和key

enc=list(map(lambda x:get_wide_dword(x),range(0x004440E0,0x004440E0+27*4,4)))
print(enc)
key=''.join(map(lambda x:chr(get_wide_byte(x)),range(0x00446900,0x0044690f)))
print(key)

exp

#include<iostream>
#include<cstdint>
using namespace std;void main()
{uint8_t aHelloCtfers[] = "Hello_Ctfers!!!";uint32_t key_len = sizeof(aHelloCtfers);uint32_t data[] = { 77, 4294967270, 73, 4294967189, 3, 45, 43, 4294967226, 4294967274, 109, 4294967295, 89, 112, 0, 27, 4294967209, 44, 4294967216, 50, 4294967192, 111, 4294967180, 86, 4294967202, 76, 121, 127 };uint32_t data_len = 27;for (int i = data_len - 1; i >= 0; i--) {data[i] = data[i] ^ data[(i + 1) % data_len];}uint32_t result; // eaxuint8_t v4[320]; // [esp+Ch] [ebp-25Ch]uint32_t v5; // [esp+14Ch] [ebp-11Ch]uint32_t k; // [esp+150h] [ebp-118h]uint32_t j; // [esp+154h] [ebp-114h]uint32_t i; // [esp+158h] [ebp-110h]uint32_t v9; // [esp+15Ch] [ebp-10Ch]uint32_t m; // [esp+160h] [ebp-108h]uint8_t v11[256]; // [esp+164h] [ebp-104h] BYREFfor (i = 0; i < 256; ++i){v11[i] = i;v4[i] = aHelloCtfers[i % key_len];}v9 = 0;for (j = 0; j < 256; ++j){v9 = (v4[j] + v9 + v11[j]) % 256;swap(v11[j], v11[v9]);}m = 0;v9 = 0;for (k = 0; k < data_len; ++k){m = (m + 3) % 256;v9 = (v9 + v11[m] + 1) % 256;swap(v11[m], v11[v9]);v5 = (v11[v9] + v11[m]) % 256;v4[k + 256] = v11[v5];}for (m = 0; ; ++m){result = m;if (m >= data_len)break;data[m] ^= v4[m + 256];}for (int i = 0; i < 27; i++)cout << (char)data[i];
}

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

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

相关文章

插卡式仪器模块:数字万用表模块(插卡式)

• 6 位数字表显示 • 24 位分辨率 • 250 KSPS 采样率 • 电源和数字 I/O 均采用隔离抗噪技术 • 电压、电流、电阻、电感、电容的高精度测量 • 二极管/三极管测试 通道122输入 阻抗 电压10 MΩHigh-Z, 10 MΩ电流10 Ω50 mΩ / 2 Ω / 2 KΩ输入范围电压 5 V0–60 V电流…

Ubuntu 配置动态链接器的搜索路径(/etc/ld.so.conf.d)

引言 为了使程序在运行时可以正常找到指定的lib库&#xff0c;防止出现卡死或闪退现象。 /etc/ld.so.conf.d 路径是程序运行时&#xff0c;系统查找共享库&#xff08;如 .so 文件&#xff09;的位置。 简要说明 如果你安装了一个第三方软件&#xff0c;它可能将其共享库放在…

【C语言】Leetcode-312 戳气球

文章目录 题目思路代码如下 题目 链接: Leetcode-312 戳气球 思路 我们观察戳气球的操作&#xff0c;发现这会导致两个气球从不相邻变成相邻&#xff0c;使得后续操作难以处理。于是我们倒过来看这些操作&#xff0c;将全过程看作是每次添加一个气球。 首先 我们需要创建一个…

【xilinx】使用vivado编译中methodology的相关介绍

Vivado Methodology 是 Xilinx 提供的一系列设计流程和最佳实践&#xff0c;旨在帮助工程师使用 Vivado Design Suite 工具链来开发高质量的 FPGA 和 SoC 应用。Vivado Methodology 涵盖了从设计开始到最终实现的整个流程&#xff0c;包括设计规划、实现、验证和优化等多个方面…

EF Core Model-First

使用C# .NET Core 3.1和EF Core Model-First方法生成数据库表的详细步骤&#xff0c;并介绍EF Core数据库迁移常用命令。 使用C# .NET Core 3.1和EF Core的Model-First方法生成数据库表 1. 安装EF Core包 首先&#xff0c;在你的项目中安装EF Core和相关的工具包。可以使用Nu…

后端Long类型参数前端接受精度丢失解决方案

背景 在项目中使用雪花Id作为主键Id使用&#xff0c;前端返回查询数据时在展示时出现精度丢失&#xff0c;如原Id为1797913405167583236进度丢失后为1797913405167583000 解决方案&#xff08;前后端&#xff09; 前端方案 前端解决精度问题很简单&#xff0c;通过字符串接…

58.CountdownLatch

用来进行线程同步协作,等待所有线程完成倒计时。 构造参数用来初始化等待计数值,await方法用来等待计数归零,countDown方法用来让计数减一。 CountdownLatch普通使用 @Slf4j public class CountdownLatchDemo {public static void main(String[] args) {CountDownLatch c…

Numpy基本操作之矩阵的检索与赋值

一 Numpy基本操作 创建矩阵 检索与赋值[y,x] 获取子数组[:,:] 二 Numpy检索与赋值 [y,x] [y,x,channel] import cv2import numpy as np#定义zeros矩阵 imgnp.zeros((480,640),np.uint8)print(img[100,100]) count0 while count<200:img[count,100,1]255countcount1cv2.i…

初学者使用sql时易犯的错误(持续更新)

DDL&#xff08;数据定义&#xff09; DROP 子句 用于删除指定的列名&#xff0c; ◼ 若选择RESTRICT &#xff0c;则删除的基本表不能被其他表的约 束所引用&#xff08;如 CHECK &#xff0c; FOREIGN KEY 等约束&#xff09;&#xff0c;不 能有视图&#xff0c;不能有触…

Python 冷门语法:深度探索与奇妙应用

Python 冷门语法&#xff1a;深度探索与奇妙应用 在Python的广阔天地中&#xff0c;除了那些广为人知的常用语法特性&#xff0c;还隐藏着一些冷门但极具魅力的语法。这些冷门语法虽然在日常编程中不常用&#xff0c;但它们的存在无疑为Python的多样性和灵活性增添了浓墨重彩的…

卷积的计算过程

卷积的计算过程 flyfish 包括手动计算&#xff0c;可视化使用torch.nn.Conv2d实现 示例 import torch import torch.nn as nn# 定义输入图像 input_image torch.tensor([[1, 2, 3, 0, 1],[0, 1, 2, 3, 4],[2, 3, 0, 1, 2],[1, 2, 3, 4, 0],[0, 1, 2, 3, 4] ], dtypetorch.f…

springboot 3 oauth2认证this.authorizationService.save(authorization)生成token报错异常

springboot 3 oauth2认证this.authorizationService.save(authorization)生成token报错异常&#xff0c;使用springboot版本3.3.0。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>&…

2024年政治经济学与社会科学国际会议(ICPESS 2024)

2024年政治经济学与社会科学国际会议 2024 International Conference on Political Economy and Social Sciences 会议简介 2024年政治经济学与社会科学国际会议是一个致力于探讨政治经济学与社会科学交叉领域前沿问题的国际盛会。本次会议汇聚了全球顶尖的专家学者、研究人员和…

DNS解析和bond网卡

DNS解析 ​ dns就是域名系统的简称,作用就是ip地址之间的映射关系 ​ 在互联网中,ip地址是通信的唯一标识,逻辑地址 ​ 访问网站,域名,ip地址不好记,域名朗朗上口,好记 ​ 域名解析的目的就是为了实现访问域名就等于ip地址 ​ 在访问域名的时候,通过dns解析,把域名映射的i…

探索智慧农业系统架构的设计与应用

随着科技的不断进步和农业现代化的推进&#xff0c;智慧农业正逐渐成为农业发展的重要趋势。智慧农业系统架构的设计与应用&#xff0c;将农业生产与信息技术相结合&#xff0c;为农业生产提供了新的思路和解决方案。本文将深入探讨智慧农业系统架构的设计与应用&#xff0c;从…

vite 配置 typescript 环境

要在 Vite 项目中配置 TypeScript 环境&#xff0c;你需要遵循几个步骤来确保 TypeScript 被正确设置并可以与 Vite 一起工作。以下是一个基本的指南&#xff1a; 初始化项目 如果你还没有初始化项目&#xff0c;可以使用 npm 或 yarn 初始化一个新的项目&#xff1a; npm i…

用爬虫实现---模拟填志愿

先来说实现逻辑&#xff0c;首先我要获取到这个网站上所有的信息&#xff0c;那么我们就可以开始对元素进行检查 我们发现他的每一个学校信息都有一个对应的属性&#xff0c;并且是相同的&#xff0c;那么我们就可以遍历这个网页中的所有属性一样的开始爬取 在来分析&#xff0…

补篇协程:susend 挂起函数的深入理解

suspend 挂起的原理&#xff1a; 挂起函数是一种可以在不阻塞线程的情况下挂起和恢复执行的函数。在Kotlin中&#xff0c;我们可以使用suspend关键字来定义一个挂起函数。挂起函数只能在协程或其他挂起函数中调用。 被suspend修饰的函数,该函数就会挂起.挂起函数能够以与普通函…

美团大规模KV存储挑战与架构实践--图文分析

美团大规模KV存储挑战与架构实践–图文分析 原作者&#xff1a;美团技术团队 原文链接&#xff1a;https://tech.meituan.com/2024/03/15/kv-squirrel-cellar.html 1 美团 KV 存储发展历程 第一代&#xff1a;使用Memcached 什么是一致性哈希&#xff1f; 哈希&#xff1a…

kafka如何保证消息不丢失

Kafka发送消息是异步发送的&#xff0c;所以我们不知道消息是否发送成功&#xff0c;所以会可能造成消息丢失。而且Kafka架构是由生产者-服务器端-消费者三种组成部分构成的。要保证消息不丢失&#xff0c;那么主要有三种解决方法。 生产者(producer)端处理 生产者默认发送消息…