四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛
四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛
文章目录
- 四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛
- C1-比64少的bas - DONE
- C2-affine - DONE
- C3-简单的RSA - DONE
- M1-不要动我的flag - DONE
- M2-simpleUSB -
- M3-我我我是谁 -
- P1-getitez -
- P2-bbstack -
- R1-谁的DNA动了 - DONE
- R2-DontTouchMe - DONE
- W1-little_game - DONE
- W2-justppb - DONE
- W3-ezbbs -
- W4-smart -
C1-比64少的bas - DONE
2i9Q8AtDZiEsSn13rF6xchPe1EaiU5u7qKbEd2HDH5jS7N4UfiL3DwFsBa

flag{2a098f9f-d384-b6d0-4096-9eaf0f5654a3}
C2-affine - DONE
wohz{k533q73q-t76t-9292-351w-h880t22q2q59}
a=3 b=7
CyberChef一把:

flag{b533d73d-e76e-9292-351f-a880e22d2d59}
C3-简单的RSA - DONE
chall.py
from Crypto.Util.number import *
from secret import flag
from sympy import nextprimeflag=b''r = getRandomNBitInteger(64)
p = r**5 + r**4 - r**3 + r**2 - r + 2023
q = r**5 - r**4 + r**3 - r**2 + r + 2023
p =nextprime(p)
q =nextprime(q)
n = p*qdef enc(flag, n):m = bytes_to_long(flag)return pow(m, 65537, n)c = enc(flag, n)
print(n)
print(c)# 25066797992811602609904442429968244207814135173233823574561146780193277243588729282392464721760638040595480284865294238118778099149754637586361909432730412493061503054820202744474632665791457
# 18808483076270941157829928736000549389727451019027515249724024369421942132354537978233676261769285858813983730966871222263698559152437016666829640339912308636169767041243411900882395764607422
n = = p ∗ q = = ( r ∗ ∗ 5 + . . . ) ∗ ( r ∗ ∗ 5 − . . . ) n==p*q == (r**5 + ...)*(r**5 - ...) n==p∗q==(r∗∗5+...)∗(r∗∗5−...)
由上可知, n约为r的10次方。如果对n开10次方,则低位可忽略,爆破一下即可求出r。
exp:
from Crypto.Util.number import *
from gmpy2 import irootN = 25066797992811602609904442429968244207814135173233823574561146780193277243588729282392464721760638040595480284865294238118778099149754637586361909432730412493061503054820202744474632665791457
t,f = iroot(N, 10)for r in range(t-10000,t+10000):p = r**5 + r**4 - r**3 + r**2 - r + 2023q = r**5 - r**4 + r**3 - r**2 + r + 2023p =nextprime(p)q =nextprime(q)n = p*qif n==N:print(f"p = {p}\nq = {q}\n")break
# 得到:
p = 158324975897082020097339281935818129320954195255971408941591049179715138878370817761203475160123
q = 158324975897082020068454470275147007824077754451975255433855101769279209145578273309232489165459
再常规RSA:
n = 25066797992811602609904442429968244207814135173233823574561146780193277243588729282392464721760638040595480284865294238118778099149754637586361909432730412493061503054820202744474632665791457
c = 18808483076270941157829928736000549389727451019027515249724024369421942132354537978233676261769285858813983730966871222263698559152437016666829640339912308636169767041243411900882395764607422
e = 65537
d = inverse(e, (p-1)*(q-1))
m = pow(c,d,n)
print(long_to_bytes(m))
# flag{5afe5cbb-4b4c-9cb6-f8b6-032cabf4b7e7}
M1-不要动我的flag - DONE
追踪TCP流,在第0个流中发现代码:
import hashlibwith open("flag") as f:flag=f.readlines()[0]
if "c7e6ea42b7301e6330ba****fe407930191d371885935ad4cd51e95e********" == hashlib.sha256(flag.encode()).hexdigest():print("......")
else:print("......")
在第3个TCP流中发现flag(部分):
flag{22af230f-bbed-????-95fa-b6b1ca6dc32e}
爆破sha256:
from hashlib import sha256
from string import hexdigits
from itertools import productfor i in product(hexdigits, repeat=4):f = "flag{22af230f-bbed-" + ''.join(i) + "-95fa-b6b1ca6dc32e}"h = sha256(f.encode()).hexdigest()if h[:20]== 'c7e6ea42b7301e6330ba':print(f, h)
# flag{22af230f-bbed-48b9-95fa-b6b1ca6dc32e} c7e6ea42b7301e6330ba3959fe407930191d371885935ad4cd51e95e857a3155
M2-simpleUSB -
原题:HWS第七期夏令营(硬件安全营)预选赛wp Misc1
https://www.cnblogs.com/fuxuqiannian/p/17560359.html
usb流量包.
键盘是8字节: usbhid.data
鼠标是4字节:

将键盘流量全部导出后加冒号:
#!/usr/bin/env python
# -*- coding:utf-8 -*-import ospcapfile = "misc1.pcapng"
if not os.path.exists(pcapfile):print("Pcap file not found!")exit(0)# hid.txt
usbKBf = 'usbKBf.txt'
cmd = "tshark -r " + pcapfile + " -T fields -Y \"usb.usbpcap_header_len==27\" -e usbhid.data > " + usbKBf
os.system(cmd)
# 删除空行,并加冒号
lline2 = []
lline1 = open(usbKBf, 'r').readlines()
for line in lline1:line = line.strip()if line:newline = ':'.join([ line[i:i+2] for i in range(0, len(line), 2)])lline2.append(newline)
with open('out.txt', 'w') as f:f.write('\n'.join(lline2))normalKeys = {"04": "a", "05": "b", "06": "c", "07": "d", "08": "e", "09": "f", "0a": "g", "0b": "h", "0c": "i", "0d": "j","0e": "k", "0f": "l", "10": "m", "11": "n", "12": "o", "13": "p", "14": "q", "15": "r", "16": "s", "17": "t","18": "u", "19": "v", "1a": "w", "1b": "x", "1c": "y", "1d": "z", "1e": "1", "1f": "2", "20": "3", "21": "4","22": "5", "23": "6", "24": "7", "25": "8", "26": "9", "27": "0", "28": "<RET>", "29": "<ESC>", "2a": "<DEL>","2b": "\t", "2c": "<SPACE>", "2d": "-", "2e": "=", "2f": "[", "30": "]", "31": "\\", "32": "<NON>", "33": ";","34": "'", "35": "<GA>", "36": ",", "37": ".", "38": "/", "39": "<CAP>", "3a": "<F1>", "3b": "<F2>", "3c": "<F3>","3d": "<F4>", "3e": "<F5>", "3f": "<F6>", "40": "<F7>", "41": "<F8>", "42": "<F9>", "43": "<F10>", "44": "<F11>","45": "<F12>"
}shiftKeys = {"04": "A", "05": "B", "06": "C", "07": "D", "08": "E", "09": "F", "0a": "G", "0b": "H", "0c": "I", "0d": "J","0e": "K", "0f": "L", "10": "M", "11": "N", "12": "O", "13": "P", "14": "Q", "15": "R", "16": "S", "17": "T","18": "U", "19": "V", "1a": "W", "1b": "X", "1c": "Y", "1d": "Z", "1e": "!", "1f": "@", "20": "#", "21": "$","22": "%", "23": "^", "24": "&", "25": "*", "26": "(", "27": ")", "28": "<RET>", "29": "<ESC>", "2a": "<DEL>","2b": "\t", "2c": "<SPACE>", "2d": "_", "2e": "+", "2f": "{", "30": "}", "31": "|", "32": "<NON>", "33": "\"","34": ":", "35": "<GA>", "36": "<", "37": ">", "38": "?", "39": "<CAP>", "3a": "<F1>", "3b": "<F2>", "3c": "<F3>","3d": "<F4>", "3e": "<F5>", "3f": "<F6>", "40": "<F7>", "41": "<F8>", "42": "<F9>", "43": "<F10>", "44": "<F11>","45": "<F12>"
}output = []
keys = open('out.txt')for line in keys:try:if line[0] != '0' or (line[1] != '0' and line[1] != '2') or line[3] != '0' or line[4] != '0' or line[9] != '0' or line[10] != '0' or line[12] != '0' or line[13] != '0' or line[15] != '0' or line[16] != '0' or line[18] != '0' or line[19] != '0' or line[21] != '0' or line[22] != '0' or line[6:8] == "00":continueif line[6:8] in normalKeys.keys():output += [normalKeys[line[6:8]], shiftKeys[line[6:8]]][line[1] == '2']else:output += ['[unknown]']except:passkeys.close()flag = 0
print("".join(output))for i in range(len(output)):try:a = output.index('<DEL>')del output[a]del output[a - 1]except:passfor i in range(len(output)):try:if output[i] == "<CAP>":flag += 1output.pop(i)if flag == 2:flag = 0if flag != 0:output[i] = output[i].upper()except:passprint('output: ' + "".join(output))
运行得到:
AomgHy<DEL>Y$\<CAP>a@q7<CAP>gW2d6oO0fGm1hAI'/4<DEL>;<CAP>ms@p<CAP>frQ149K[unknown]
output: AomgHy<DEL>Y$\<CAP>a@q7<CAP>gW2d6oO0fGm1hAI'/4<DEL>;<CAP>ms@p<CAP>frQ149K[unknown]
猜测是base85解密,但未成功。再看一下导出的HID Data,发现流量中有20开头的,这个20开头的也算是shiftKeys。
添加条件到代码中,重新运行得到:
base85 --> flag{ec1b8b96-56a9-f15c-4e39-503e92ab45d2}
M3-我我我是谁 -
P1-getitez -
P2-bbstack -
R1-谁的DNA动了 - DONE
先F12看一下字符串,发现有:
flag{Th14_15_a_xxxx_flAg},the MD5 hash value of xxxx is \"7c76fb919bab9a1abfe854cf80725a09\",just 4 bytes
爆破一下md5,结果是Fak3:
from hashlib import md5
from string import ascii_letters
from itertools import productfor i in product("FAKE43fake", repeat=4):f = ''.join(i)h = md5(f.encode()).hexdigest()if h== '7c76fb919bab9a1abfe854cf80725a09':print(f, h)
# Fak3 7c76fb919bab9a1abfe854cf80725a09 --> flag{Th14_15_a_Fak3_flAg}
但提交不正确。明显是一个fake flag.
有以下判断逻辑:
for ( i = 0; i < v4; ++i )
{memset(&s, 0, sizeof(s));encode((unsigned int)inputs[i], &s); // 对输入的flag进行编码outputs[4 * i + 3] = s; // 这里是4字符中,高低位的字符互换: 1234 --> 4321outputs[4 * i + 2] = BYTE1(s);outputs[4 * i + 1] = BYTE2(s);outputs[4 * i] = HIBYTE(s);
}
if ( judge((__int64)outputs, (__int64)CODE, v4) ) // judge()函数需返回为真
{puts("well done!you get it");
}
CODE的内容是:

Shift+E导出:
"CGCGCGATCGTCCGCACAGATACATATGTACCTATTTATTTAGTCGTCTACCCGCCTACGCGCCTACGTACCCGCTCGTCTATTTATCCGTATATTTACTTAGCTATCTACTCGTATACTTACATACGCGTCCGCCTATTTAGTTACACAAC"ps: 开始以为是DNA编码,使用ToolxFX解码未成功。只能硬逆了。
先看下judge()函数:
bool __fastcall judge(__int64 a1, __int64 a2, int a3)
{int v4; // ebxint v5; // ebxint v6; // r12dint v8; // [rsp+28h] [rbp-18h]int i; // [rsp+2Ch] [rbp-14h]v8 = 0;if ( 4 * a3 > strlen(CODE) )return 0;for ( i = 0; i < a3; ++i ) // 主要逻辑在这里。{v4 = Int((unsigned int)*(char *)(i + a1));v5 = Int((unsigned int)*(char *)(i + a2)) + v4;v6 = Int(75LL); // 75 --> 'K':Int('K')=7if ( v5 == v6 - (unsigned int)Int(66LL) ) // 66 --> 'B':Int('B')=4++v8;}return 4 * v8 == strlen(CODE);
}// Int()函数可以视为一个字典:
__int64 __fastcall Int(char a1)
{__int64 result; // raxswitch ( a1 ){case 'A':result = 0LL;break;case 'B':result = 4LL;break;case 'C':result = 2LL;break;case 'D':result = 5LL;break;case 'F':result = 6LL;break;case 'G':result = 1LL;break;case 'K':result = 7LL;break;case 'M':result = 8LL;break;case 'T':result = 3LL;break;default:result = 10LL;break;}return result;
}
Int()函数可以视为一个字典:
intD = {"A":0, "B":4, "C":2, "D":5, "F":6, "G":1, "K":7, "M":8, "T":3, "O":10}
judge是一个简单的加减算法,逆一下:
intD = {"A":0, "B":4, "C":2, "D":5, "F":6, "G":1, "K":7, "M":8, "T":3, "O":10}
CODE = "CGCGCGATCGTCCGCACAGATACATATGTACCTATTTATTTAGTCGTCTACCCGCCTACGCGCCTACGTACCCGCTCGTCTATTTATCCGTATATTTACTTAGCTATCTACTCGTATACTTACATACGCGTCCGCCTATTTAGTTACACAAC"
# uniq一下CODE,只有AGCT共4个字符,对应于0123.
CODE2 = ''
for i in range(len(CODE)):v5 = 3t = intD[CODE[i]]v4 = v5 - tfor k in intD.keys():if intD[k] == v4:D = kprint(D)CODE2 += Dbreakelse:print("WRONG", v4, t)
print(CODE2) # GCGCGCTAGCAGGCGTGTCTATGTATACATGGATAAATAAATCAGCAGATGGGCGGATGCGCGGATGCATGGGCGAGCAGATAAATAGGCATATAAATGAATCGATAGATGAGCATATGAATGTATGCGCAGGCGGATAAATCAATGTGTTG
再看以下代码和encode()函数:
for ( i = 0; i < v4; ++i ){memset(&s, 0, sizeof(s));encode((unsigned int)inputs[i], &s); // 对输入的flag进行编码outputs[4 * i + 3] = s; // 这里是4字符中,高低位的字符互换: 1234 --> 4321outputs[4 * i + 2] = BYTE1(s);outputs[4 * i + 1] = BYTE2(s);outputs[4 * i] = HIBYTE(s);}__int64 __fastcall encode(unsigned int a1, __int64 a2)
{__int64 result; // raxint i; // [rsp+1Ch] [rbp-4h]result = a1;for ( i = 0; i <= 3; ++i ){result = (unsigned __int8)box[((char)a1 >> (2 * i)) & 3];*(_BYTE *)(i + a2) = result;}return result;
}
可以发现,该代码逻辑是将字符转换为二进制(8bit),分4个2bit分别处理,映射为:
00 --> 0 --> A
01 --> 1 --> G
10 --> 2 --> C
11 --> 3 --> T
于是,写一下逆向代码:
CODE2 = GCGCGCTAGCAGGCGTGTCTATGTATACATGGATAAATAAATCAGCAGATGGGCGGATGCGCGGATGCATGGGCGAGCAGATAAATAGGCATATAAATGAATCGATAGATGAGCATATGAATGTATGCGCAGGCGGATAAATCAATGTGTTG
box = "AGCT"
for i in range(0, len(CODE2), 4):t = box.index(CODE2[i]) * 64 + box.index(CODE2[i+1]) * 16 + box.index(CODE2[i+2]) * 4 + box.index(CODE2[i+3])print(chr(t), end='')
# flag{725008a5e6e65da01c04914c476ae087}
R2-DontTouchMe - DONE
W1-little_game - DONE
js代码小游戏。找到success()函数,在浏览器中F12,在控制台下运行一下即可得到flag:

arr='1234567890qwertyuiopasdfghjklzxcvbnm{}-'
index = [23,28,20,24,36,1,3,7,6,3,38,2,8,9,5,7,21,38,9,3,6,18,22,38,26,16,6,18,15,37]
s = ''
for i in index:s += arr[i]print(s)
# flag{24874-39068s-047od-ju7oy}
W2-justppb - DONE
题目提示:使用Burp。
题目给了一个登录框,输入admin等常规的账号名时,提示用户名错误。
【考点】:使用Burp中自带的字典、密码。

爆破成功后,登录即显示flag. 【坑】
W3-ezbbs -
一个jar。
W4-smart -
smarty反序列化漏洞利用。
赛后评价:
1 - 线下赛,现场不提供零食,中午却可以一起就餐…
2 - 题目质量嘛:呵呵,
(1)W2-justppb
考点是Burp自带的用户名、密码字典,这个。
我现场用自己的fuzz字典、爆破的字典,居然都不行。哎,痛失5分。
(2)M3-我我我是谁
这个题硬是不知道怎么做。听大佬说,是他们用自己团队的一个脚本自动跑出来的。
哎!
(3)C1-比64少的base, C2-affine:
这2题是拿来当省级赛事的吗?
(4)M2-simpleUSB
原题。HWS第七期夏令营(硬件安全营)预选赛wp Misc1
(5)其他
反正不会做了。
相关文章:
四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛
四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛 文章目录 四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛C1-比64少的bas - DONEC2-affine - DONEC3-简单的RSA - DONEM1-不要动我的f…...
死锁(面试常问)
1.什么是死锁 简单来说就是一个线程加锁后解锁不了 一个线程,一把锁,线程连续加锁两次。如果这个锁是不可重入锁,会死锁。两个线程,两把锁。 举几个例子,1.钥匙锁车里了,车钥匙锁家里了。2. 现在有一本书…...
GO设计模式——3、抽象工厂模式(创建型)
目录 抽象工厂模式(Abstract Factory Pattern) 抽象工厂模式的核心角色 优缺点 代码实现 抽象工厂模式(Abstract Factory Pattern) 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他…...
AUTOSAR_PRS_LogAndTraceProtocol文档翻译
1简介和概述 本协议规范规定了AUTOSAR协议Dlt的格式、消息序列和语义。 该协议允许将诊断、日志和跟踪信息发送到通信总线上。 因此,Dlt模块从应用程序或其他软件模块收集调试信息,向调试信息添加元数据,并将其发送到通信总线。 此外&#x…...
自定义比较器
package org.jeecg.modules.develop.api.livePort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; // 创建一个泛型类 class MyObject { private T data; public MyObject(T data) {this.data data; }p…...
【NLP】如何管理大型语言模型 (LLM)
什么是LLM编排? LLM 编排是管理和控制大型语言模型 (LLM)的过程,以优化其性能和有效性。这包括以下任务: 提示LLM:生成有效的提示,为LLMs提供适当的背景和信息以产生所需的输出。链接LLM: 结合多个LLM的输…...
利用机器学习实现客户细分的实战
前言: Hello大家好,我是Dream。 今天来学习一下机器学习实战中的案例:创建客户细分,在此过程中也会补充很多重要的知识点,欢迎大家一起前来探讨学习~ 一、导入数据 在此项目中,我们使用 UCI 机器学习代码库…...
Tair(4):Tair原理架构
一个Tair集群主要包括3个必选模块:ConfigServer、Dataserver和Client 通常情况下,一个 Tair 集群中包含2台 Configserver 及多台 DataServer。其中两台 Configserver 互为主备。通过和 Dataserver 之间的心跳检测获取集群中存活可用的 Dataserver&#…...
SAP UI5 walkthrough step7 JSON Model
这个章节,帮助我们理解MVC架构中的M 我们将会在APP中新增一个输入框,并将输入的值绑定到model,然后将其作为描述,直接显示在输入框的右边 首先修改App.controllers.js webapp/controller/App.controller.js sap.ui.define([&…...
智能检测/摄像头监控系统EasyCVR无法启动进程是什么原因?如何解决?
国标GB28181智慧安防平台EasyCVR支持高清视频的接入和传输、分发,平台采用了开放式的网络结构,提供实时远程视频监控、录像回放与存储等功能。视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持…...
export命令详解
export命令详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! Export命令详解:释放Linux强大的数据导出能力 在Linux世界中,export命令是…...
十几个软件测试实战项目【外卖/医药/银行/电商/金融】
项目一:ShopNC商城 项目概况: ShopNC商城是一个电子商务B2C电商平台系统,功能强大,安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城,系统PC后台是基于ThinkPHP MVC构架开发的跨…...
用python打印出菱形图案
你可以使用Python编写一个简单的函数来打印菱形图案。下面是一个例子,这个函数接受一个参数n,表示菱形的高度,然后打印出一个菱形图案: def print_diamond(n): # 上半部分 for i in range(n): print(" " …...
k8s 中externalTrafficPolicy应用场景和实践
在Kubernetes(K8s)中,externalTrafficPolicy 是一个用于控制服务的外部流量的策略。这个字段可以在 Service 的定义中设置,其主要作用是决定服务对外部请求的负载均衡行为。具体来说,externalTrafficPolicy 有两个可选…...
Selenium自动化测试框架(超详细)
Selenium自动化测试(基于python) 1、Selenium简介 1.1 Selenium是一款主要用于Web应用程序自动化测试的工具集合。Selenium测试直接运行在浏览器中,本质是通过驱动浏览器,模拟浏览器的操作,比如跳转、输入、点击、下…...
蚂蚁SEO实用的网络baidu蜘蛛有哪些
网络蜘蛛是一种用于从互联网上自动抓取信息的程序。它们根据给定的规则和指令,遍历网站上的页面,收集信息并将其存储在数据库中。网络蜘蛛在搜索引擎、数据挖掘、信息提取等领域有着广泛的应用。本文将介绍一种实用的网络蜘蛛,并探讨其实现原…...
滑动窗口如人生,回顾往事不复还———力扣刷题
第一题:长度最小的子数组 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 思路: 第一想法肯定时暴力枚举,枚举数组任何一个元素,把他当起始位置,然后从起始位置找最短区间,使得…...
VM实现方式及其优缺点
在众多VM实现方式中,我可以说几种常见的实现方式。例如,基于栈的方式、基于寄存器的方式、基于堆的方式等。下面我将分别对这几种方式进行阐述,并讨论它们各自的优点和缺点,以及它们各自的应用场景。 基于栈的方式 基于栈的方式…...
MySQL——库,表基础操作
目录 一.库的操作 1.显示当前的数据库列表 2.创建数据库 3.字符集和校验规则 4.操纵数据库 5.删除数据库 6.数据库备份与还原 7.查看连接情况 二.表的操作 1.创建表 2.查看表结构 3.修改表 4.删除表 一.库的操作 1.显示当前的数据库列表 show databases; 2.创建数…...
文件批量管理方法:100个文件要怎样快速放在100个指定的文件夹中
处理大量文件时,经常要将多个文件放入相应的文件夹中。如果要处理的文件数量较大,例如100个文件要放入100个指定的文件夹中,那么如何快速有效地完成这个任务呢?下面看下云炫文件管理批量管理文件的方法,快速将100个文件…...
为什么很多商城系统,只适合“创业期”,却撑不起“增长期”?——真正成熟的系统,核心从来不是“今天能跑”,而是“业务增长后依然可控”
很多企业第一次做商城系统时,通常都会特别关注: 能不能快速上线功能够不够用页面能不能快速交付能不能尽快开始运营 因为在业务初期。 企业最重要的: 通常都是: 先把业务跑起来 所以很多系统前期的发展逻辑都很类似ÿ…...
泉州某卫浴GEO优化实战:四标融合+场景化方法论,从搜索不可见到AI优先引用
我们在服务制造业企业的过程中发现一个根本性变化:过去大家关心“怎么让用户搜到我”,现在AI直接生成答案,企业真正的挑战变成了“怎么让AI准确信任我、优先引用我”。传统SEO在AI的“黑箱”面前越来越失效,企业必须重新建立一套可…...
BG3 Mod Manager终极指南:如何轻松管理《博德之门3》模组
BG3 Mod Manager终极指南:如何轻松管理《博德之门3》模组 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 你是否曾经因为《博德之门3》模…...
质子CT技术:原理、系统设计与临床应用
1. 质子CT技术概述:从原理到临床需求在放射治疗领域,质子治疗因其独特的布拉格峰(Bragg Peak)特性而备受关注。与传统X射线治疗相比,质子束在组织中沉积的能量分布具有明显的物理优势——在射程末端释放最大剂量后迅速衰减。这一特性使得肿瘤…...
Arm SME指令集:多向量整数运算与矩阵加速详解
1. SME指令集与多向量整数运算概述在现代处理器架构中,SIMD(单指令多数据)技术已经成为提升计算性能的关键手段。作为Armv9架构的重要扩展,SME(Scalable Matrix Extension)指令集专门针对矩阵运算进行了深度…...
别再混淆Eb/N0和SNR了!手把手教你用Python仿真验证MQAM误码率公式
别再混淆Eb/N0和SNR了!手把手教你用Python仿真验证MQAM误码率公式 在通信系统设计与性能分析中,Eb/N0(每比特能量与噪声功率谱密度之比)和SNR(信噪比)是最基础却最易混淆的概念。许多工程师在仿真MQAM系统时…...
【亲测免费】 为你的C Winform项目增添亮色:C Winform图标资源库推荐
为你的C# Winform项目增添亮色:C# Winform图标资源库推荐 【下载地址】CWinform图标资源库 C# Winform 图标资源库本仓库提供了一系列适用于 C# Winform 程序开发的图标资源,包括 ico 和 png 格式,尺寸涵盖 16x16、32x32 等多种常用大小 项…...
Browser-Use 实战指南:让 AI 自己操控浏览器的 7 个实用场景
Browser-Use 实战指南:让 AI 自己操控浏览器的 7 个实用场景 你打开浏览器,搜索、填表、采集数据、截图、下载文件。这些每天重复的动作,能不能让 AI 替你干? Browser-Use 给了一个相当干脆的答案:把浏览器交给 AI&…...
VScode:将VScode界面的显示语言改为简体中文
这是 VS Code 设置语言的标准方式,直接强制指定界面语言: 在 VS Code 界面按下快捷键 Ctrl Shift P(Windows/Linux),Mac 用户用 Cmd Shift P,打开「命令面板」 在弹出的输入框里,输入 Confi…...
多智能体协同控制未来的前景和方向如何?
在AI技术快速演进的今天,单一智能体已难以满足企业复杂业务场景的需求,多智能体协同正成为行业关注的焦点,它通过多个智能体分工协作、动态交互,形成更强大、更灵活的数字员工团队,有望重塑企业运营模式,推…...
