四川技能大赛——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个文件…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
