DeadSec CTF 2024 Misc Writeup

news2024/11/20 1:35:23

文章目录

    • Misc
      • Welcome
      • Mic check
      • flag_injection
      • GoLParty
      • MAN in the middle
      • Forgotten Password
    • Crypto
      • Flag killer

好久没做这么爽了噜
DK盾云服务器: https://www.dkdun.cn/
最近活动是香港的1-1-3 9.9/月

Misc

Welcome

进discord群签到即可

Mic check

就是他说什么就重复什么即可

from pwn import *
context.log_level="debug"
p = remote('34.121.62.108',31646)

for i in range(1, 101):
    response = p.recvuntil(b'submit test words > ').decode()
    word = response.split('>')[1].split('[')[0].strip()
    p.sendline(word.encode())
p.recv()
p.recv()

flag_injection

题目是这样的

from string import ascii_lowercase
from time import sleep
from os import getenv

ALPHABET     = set(ascii_lowercase + "_")
SECRET_FLAG  = getenv("FLAG", "DEAD{test_flag_which_is_exactly_this_long}")
SECRET_FLAG  = SECRET_FLAG.replace("{", "_").replace("}", "_").replace("DEAD","dead")

assert len(SECRET_FLAG) == 42, "Bad flag length"
assert set(SECRET_FLAG).issubset(ALPHABET), "Bad flag chars"

def get_flag():
    print(SECRET_FLAG)

def split_flag():
    start_offset = int(input("Start of flag substring: "))
    end_offset   = int(input("End of flag substring: "))
    new_flag     = SECRET_FLAG[start_offset:end_offset]
    assert       len(new_flag) >= 13, "Can't have such a small piece"
    anything     = input("Anything to add? Tell me: ").strip()[:20]
    assert       set(anything).issubset(ALPHABET), "That's a crazy thing to add!"
    new_flag     += anything
    globals()[new_flag] = ":)"

if __name__ == "__main__":
    split_flag()
    what_to_do = input("What should I do now? Tell: ")
    if not set(what_to_do).issubset(ALPHABET):
        print("Plz no hack :(")
    else:
        # No brute force for you. Test locally instead!
        sleep(10)
        print(eval(what_to_do))

弄了好一会,在本地都不知道怎么弄,毕竟只能用小写和下划线,没得括号可以用

突然发现会这样,上午在本地测的时候也遇到了,但是没想到

在这里插入图片描述

于是乎尝试让他自己说出flag

在这里插入图片描述

dead_ivswjlv

在这里插入图片描述

看来太长了是不行的

在这里插入图片描述

就一直这样下去就行了

最后拼接,得到dead_ivswjlvahxmifksxjgifrzfhljkdprcaubac_,然后下划线换成括弧,dead的大小写转换一下

验证一下

在这里插入图片描述

因此得到flag为DEAD{ivswjlvahxmifksxjgifrzfhljkdprcaubac}

GoLParty

生命游戏,要连续答对题目,我用这个修改的:https://github.com/thomas-broethaler/conways-game-of-life/blob/master/conways_game_of_life.ipynb

然后要注意的点主要就是接收整个情况了

from pwn import *
import numpy as np
from copy import deepcopy


class GameOfLife:

    def __init__(self, cells=[], generations=1):
        self.cells = cells.copy()
        self.generations = generations
        self.dim_y = len(cells)
        self.dim_x = len(cells[0])
        self.cur_dim_y = 0
        self.cur_dim_x = 0

    def get_neighbors(self, y, x):
        neighbor_list = []
        for i in range(y - 1, y + 2):
            if i < 0 or i > (self.cur_dim_y - 1):
                continue
            else:
                for j in range(x - 1, x + 2):
                    if j < 0 or j > (self.cur_dim_x - 1):
                        continue
                    elif i == y and j == x:
                        continue
                    else:
                        neighbor_list.append(self.cells[i][j])
        return neighbor_list

    def check_neighbors(self, cur_cell, neighbor_list):
        next_gen_cell = cur_cell
        alive_count = neighbor_list.count(1)
        if cur_cell == 1:
            if alive_count == 2 or alive_count == 3:
                next_gen_cell = 1
            else:
                next_gen_cell = 0
        else:
            if alive_count == 3:
                next_gen_cell = 1
        return next_gen_cell

    def add_empty_boarder(self, cur_field, cur_dim_y, cur_dim_x):
        new_field = np.zeros((cur_dim_y + 2, cur_dim_x + 2))
        for y, row in enumerate(cur_field):
            for x, cur_cell in enumerate(row):
                new_field[y + 1, x + 1] = cur_cell
        return new_field

    def remove_empty_boarder(self, new_cells):
        new_cells = np.array(new_cells)
        removing = True
        while removing == True:
            if len(new_cells) == 0:
                return [[]]
            elif np.count_nonzero(new_cells[0]) == 0:
                new_cells = np.delete(new_cells, 0, 0)
            elif np.count_nonzero(new_cells[::-1][0]) == 0:
                new_cells = np.delete(new_cells, -1, 0)
            elif np.count_nonzero(new_cells.T[0]) == 0:
                new_cells = np.delete(new_cells, 0, 1)
            elif np.count_nonzero(new_cells.T[::-1][0]) == 0:
                new_cells = np.delete(new_cells, -1, 1)
            else:
                removing = False
        return new_cells

    def evaluate_generations(self):
        self.cells = deepcopy(self.add_empty_boarder(self.cells, self.dim_y, self.dim_x))
        new_cells = deepcopy(self.cells)
        for generation in range(0, self.generations):
            self.cur_dim_y = len(self.cells)
            self.cur_dim_x = len(self.cells[0])
            new_cells = deepcopy(self.add_empty_boarder(new_cells, self.cur_dim_y, self.cur_dim_x))
            self.cells = deepcopy(new_cells)
            for y, row in enumerate(self.cells):
                for x, cur_cell in enumerate(row):
                    neighbor_list = self.get_neighbors(y, x)
                    new_cells[y][x] = self.check_neighbors(cur_cell, neighbor_list)
        new_cells = self.remove_empty_boarder(new_cells)
        return new_cells.tolist()


def get_generation(cells, generations):
    result = GameOfLife(cells=cells, generations=generations)
    return result.evaluate_generations()


context.log_level = "debug"
p = remote('34.44.175.226', 31532)

p.recvuntil(b'Game On :D')

correct_count = 0
first_time = True
while correct_count < 10:
    if first_time:
        initial_grid = p.recvuntil(b'[*]').decode().split('\n')[2:-2]
        first_time = False
    else:
        initial_grid = p.recvuntil(b'[*]').decode().split('\n')[:-2]

    p.recvuntil(b' Enter the number of live cells after ')
    generations = int(p.recvuntil(b' generations: ').decode().split(' ')[0])

    def parse_grid(grid):
        return [[1 if cell == '■' else 0 for cell in row] for row in grid]
    print(len(initial_grid),initial_grid)

    initial_grid_array = parse_grid(initial_grid)

    result_grid = get_generation(initial_grid_array, generations)
    live_cells_after_generations = sum(sum(row) for row in result_grid)

    print(f"Number of live cells after {generations} generations: {live_cells_after_generations}")

    p.sendline(str(int(live_cells_after_generations)).encode())

    response = p.recvline()
    print(response.decode())

    if b'Correct!' in response:
        correct_count += 1
    else:
        exit()

    #b'[+] Correct!\n'
    #b'[*] Game Over! Thank you for playing.\n'
    #b'[+] Congratulations! Here is your flag: DEAD{GoL_P4rty_W4s_4_Fun_4nd_1ntr1gu1ng_G4m3}'

MAN in the middle

这个题吧,昨天想了一天都不知道怎么处理01串,今天刚起来晃了一眼题就想明白了。

首先拿到的是一个音频文件

在这里插入图片描述

放大看能发现

在这里插入图片描述

因此尝试直接去看十六进制,发现只有32767和-32767这两种。然后每种长度是44个短样本,写个脚本把他转换成01串

def convert_waveform_to_binary(input_file, output_file):
    with open(input_file, 'rb') as f:
        data = f.read()

    binary_data = []
    for i in range(0, len(data), 88):
        sample = data[i:i+88]
        if sample == b'\xFF\x7F' * 44:
            binary_data.append('1')
        elif sample == b'\x01\x80' * 44:
            binary_data.append('0')
        else:
            print(f"Unexpected value: {sample[:8]}... (showing first 8 bytes)")

    binary_string = ''.join(binary_data)

    with open(output_file, 'w') as f:
        f.write(binary_string)

    print(f"Decoded binary data written to {output_file}")

convert_waveform_to_binary('flag.data', 'binary_output.txt') #flag.data是wav的纯data数据,去掉了开头部分

得到01串后,首先会发现不是直接能from binary的,猜测是一种波形编码。

这里经过尝试后没有解出来,第二天才发现是在转换的时候自己弄错了,实际上就直接按照01和10替换成1和0就行。

with open('binary_output.txt', 'r') as file:
    binary_str = file.readline().strip()

converted_str = ""

for i in range(0, len(binary_str), 2):
    pair = binary_str[i:i + 2]
    if pair == "10":
        converted_str += "0"
    elif pair == "01":
        converted_str += "1"
    else:
        pass
    
print(converted_str)
#0110110101100001011011100110001101101000011001010111001101110100011001010111001000100000011001010110111001100011011011110110010001101001011011100110011100100000011010010111001100100000011000010010000001101101011001010111010001101000011011110110010000100000011011110110011000100000011001010110111001100011011011110110010001101001011011100110011100100000011001000110100101100111011010010111010001100001011011000010000001100100011000010111010001100001001000000110100101101110001000000111011101101000011010010110001101101000001000000110010101100001011000110110100000100000011000100110100101110100001000000110111101100110001000000110010001100001011101000110000100100000011010010111001100100000011100100110010101110000011100100110010101110011011001010110111001110100011001010110010000100000011000100111100100100000011101000111011101101111001000000111011001101111011011000111010001100001011001110110010100100000011011000110010101110110011001010110110001110011001011000010000001100101011011100111001101110101011100100110100101101110011001110010000001100001001000000111010001110010011000010110111001110011011010010111010001101001011011110110111000100000011000010111010000100000011101000110100001100101001000000110110101101001011001000110010001101100011001010010000001101111011001100010000001100101011000010110001101101000001000000110001001101001011101000010000001110000011001010111001001101001011011110110010000101110001000000111010001101000011010010111001100100000011101000111001001100001011011100111001101101001011101000110100101101111011011100010000001110011011001010111001001110110011001010111001100100000011000010111001100100000011000100110111101110100011010000010000001100001001000000110001101101100011011110110001101101011001000000110000101101110011001000010000001100100011000010111010001100001001000000111001101101001011001110110111001100001011011000010110000100000011011010110000101101011011010010110111001100111001000000110100101110100001000000110100001101001011001110110100001101100011110010010000001100101011001100110011001100101011000110111010001101001011101100110010100100000011001100110111101110010001000000111001101111001011011100110001101101000011100100110111101101110011011110111010101110011001000000110001101101111011011010110110101110101011011100110100101100011011000010111010001101001011011110110111000101110001000000110010001100101011101100110010101101100011011110111000001100101011001000010000001100010011110010010000001100111001011100010000001100101001011100010000001110100011010000110111101101101011000010111001100101100001000000110110101100001011011100110001101101000011001010111001101110100011001010111001000100000011001010110111001100011011011110110010001101001011011100110011100100000011010010111001100100000011101110110100101100100011001010110110001111001001000000111010101110011011001010110010000100000011010010110111000100000011101100110000101110010011010010110111101110101011100110010000001100011011011110110110101101101011101010110111001101001011000110110000101110100011010010110111101101110001000000111000001110010011011110111010001101111011000110110111101101100011100110010110000100000011010010110111001100011011011000111010101100100011010010110111001100111001000000110010101110100011010000110010101110010011011100110010101110100001011100010000001101001011101000111001100100000011100000111001001101001011011010110000101110010011110010010000001100001011001000111011001100001011011100111010001100001011001110110010100100000011011000110100101100101011100110010000001101001011011100010000001101001011101000111001100100000011100100110111101100010011101010111001101110100011011100110010101110011011100110010000001100001011001110110000101101001011011100111001101110100001000000111010001101001011011010110100101101110011001110010000001100101011100100111001001101111011100100111001100100000011000010110111001100100001000000110010101100001011100110110010100100000011011110110011000100000011000110110110001101111011000110110101100100000011100100110010101100011011011110111011001100101011100100111100100101100001000000110000101110011001000000111010001101000011001010010000001110010011001010110011101110101011011000110000101110010001000000111010001110010011000010110111001110011011010010111010001101001011011110110111001110011001000000110010101101110011000010110001001101100011001010010000001110100011010000110010100100000011100100110010101100011011001010110100101110110011001010111001000100000011101000110111100100000011011010110000101101001011011100111010001100001011010010110111000100000011100110111100101101110011000110110100001110010011011110110111001101001011110100110000101110100011010010110111101101110001000000111011101101001011101000110100000100000011101000110100001100101001000000111010001110010011000010110111001110011011011010110100101110100011101000110010101110010001011100010000001100010011110010010000001100101011011010110001001100101011001000110010001101001011011100110011100100000011101000110100001100101001000000110001101101100011011110110001101101011001000000111001101101001011001110110111001100001011011000010000001110111011010010111010001101000011010010110111000100000011101000110100001100101001000000110010001100001011101000110000100100000011100110111010001110010011001010110000101101101001011000010000001101101011000010110111001100011011010000110010101110011011101000110010101110010001000000110010101101110011000110110111101100100011010010110111001100111001000000110110101101001011101000110100101100111011000010111010001100101011100110010000001110100011010000110010100100000011100100110100101110011011010110010000001101111011001100010000001110011011110010110111001100011011010000111001001101111011011100110100101111010011000010111010001101001011011110110111000100000011011000110111101110011011100110010110000100000011011010110000101101011011010010110111001100111001000000110100101110100001000000110000100100000011100100110010101101100011010010110000101100010011011000110010100100000011000110110100001101111011010010110001101100101001000000110011001101111011100100010000001101000011010010110011101101000001011010111001101110000011001010110010101100100001000000110010001101001011001110110100101110100011000010110110000100000011001000110000101110100011000010010000001110100011100100110000101101110011100110110110101101001011100110111001101101001011011110110111000101110001000000110000101101110011001000010000001101000011001010111001001100101001000000110100101110011001000000111100101101111011101010111001000100000011001100110110001100001011001110011101000100000011001000110010101100001011001000111101101101101001101000110111001100011011010000011001100110101001101110011001101110010010111110011010001011111001101110110100000110011010111110111011100110001011011100111110100100000011001110110111101101111011001000010000001101010011011110110001000100001

得到flag:dead{m4nch3573r_4_7h3_w1n}

Forgotten Password

题目描述是这样的:

I was going to create this extremely easy forensics challenge for you, but accidentally used the flag as the password when I encrypted the archive. This flag is now deleted, and since it is not possible to brute-force it, I guess that means this challenge can no longer be solved, or can it?

给了两个文件,一个加密的zip,一个py文件,内容是这样的:

from io import BytesIO
import os
import subprocess
import pycdlib # pip install pycdlib

try:
    FLAG = open("flag.txt","r").read()
except FileNotFoundError:
    FLAG = "fake_flag_for_testing"

iso = pycdlib.PyCdlib()
iso.new(interchange_level=4)

iso.add_fp(BytesIO(FLAG.encode()), len(FLAG), '/flag.txt;1')

iso.write('challenge.iso')
iso.close()

subprocess.check_output(["zip", "challenge.zip", "challenge.iso", "-P", FLAG])

其实给出这个py文件主要就是生成iso

这里手动也生成两个iso,先单独对比两个iso的区别:

在这里插入图片描述

不同点在于生成的时间,但是比赛的iso不清楚时区,所以我就放弃去还原这个

接着用zip压缩这俩文件,分别得到这样的

在这里插入图片描述

发现都有32字节的\x00,其实拿到题的时候就想用bkcrack,但是注意到https://github.com/kimci86/bkcrack/blob/master/example/tutorial.md里说的

The not so easy way: deflated file
Let us assume the zip file did not contain the uncompressed spiral.svg.

Then, to guess some plaintext, we can guess the first bytes of the original advice.jpg file from its extension. The problem is that this file is compressed. To run the attack, one would have to guess how those first bytes are compressed, which is difficult without knowing the entire file.

In this example, this approach is not practical. It can be practical if the original file can easily be found online, like a .dll file for example. Then, one would compress it using various compression software and compression levels to try and generate the correct plaintext.

通常来说都是对储存的进行明文,而对于压缩的,很难去做,通常都是有完全相同的文件

这里看到有相同的32字节的00,就在思考是否可以尝试用bkcrack去爆破呢,由于这个00字节虽然是32,但是无法得知是在何处开始

虽然不知道何处开始,但是能观察到创建的例子开头第一个是在61处,第二是在64处,由于只需要12位已知,因此可以折中选择一个,然后用16的大小

首先bkcrack -L challenge.zip看看

bkcrack 1.7.0 - 2024-05-26
Archive: .\challenge.zip
Index Encryption Compression CRC32    Uncompressed  Packed size Name
----- ---------- ----------- -------- ------------ ------------ ----------------
    0 ZipCrypto  Deflate     17ee7183        53248          382 challenge.iso

接着尝试破解.\bkcrack.exe -C .\challenge.zip -c challenge.iso -x 68 0000000000000000000000000000

在这里插入图片描述

得到key是6b13ebc5 cc0be8ac 709e18f9

然后.\bkcrack.exe -C .\challenge.zip -k 6b13ebc5 cc0be8ac 709e18f9 -D dec.zip

解压后直接搜索即可

在这里插入图片描述

DEAD{weird_how_this_encryption_is_the_default_in_2024}

Crypto

Flag killer

from binascii import hexlify, unhexlify

def FLAG_KILLER(value):
    index = 0
    temp = []
    output = 0
    while value > 0:
        temp.append(2 - (value % 4) if value % 2 != 0 else 0)
        value = (value - temp[index]) // 2
        index += 1
    temp = temp[::-1]
    for index in range(len(temp)):
        output += temp[index] * 3 ** (len(temp) - index - 1)
    return output

output = '0e98b103240e99c71e320dd330dd430de2629ce326a4a2b6b90cd201030926a090cfc5269f904f740cd1001c290cd10002900cd100ee59269a8269a026a4a2d05a269a82aa850d03a2b6b900883'

def reverse_FLAG_KILLER(output_segment):
    for i in range(4096):
        if FLAG_KILLER(i) == int(output_segment, 16):
            return i
    return None

index = 0
reversed_flag = ''
while index < len(output):
    segment = output[index:index+5]
    original_value = reverse_FLAG_KILLER(segment)
    if original_value is None:
        print("Error: No matching value found.")
        break
    reversed_flag += '%03x' % original_value
    index += 5
print(reversed_flag)
#444541447b3236336638373165383830653964633764323430313030303330346663363065393863376335383807d 注意07d改成7d
#-->DEAD{263f871e880e9dc7d2401000304fc60e98c7c588}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts所遇到的问题,个人记录

TreeMap 矩形树图&#xff0c;label设置富文本之后&#xff0c;无法垂直居中 font-size 支持rem&#xff0c;其余不支持 font-size 支持 rem&#xff0c;但是其余的属性如height&#xff0c;width等不支持 echarts-for-react 绑定事件&#xff0c;会覆盖实例上绑定的 当给cha…

通过服务端注入的广告被拦截 YouTube现在可能会出现黑屏静音视频段

为避免用户使用广告拦截程序直接拦截 YouTube 平台的所有广告&#xff0c;这段时间谷歌正在采取各种措施与社区进行技术对抗&#xff0c;即谷歌不停地开发新的广告检测方式阻止用户使用广告拦截程序&#xff0c;广告拦截程序则不停地开发应对方法用来继续屏蔽广告和各种提示。 …

uni-app全局文件与常用API

文章目录 rpx响应式单位import导入css样式及scss变量用法与static目录import导入css样式uni.scss变量用法 pages.json页面路由globalStyle的属性pages设置页面路径及窗口表现tabBar设置底部菜单选项及iconfont图标 vite.config中安装插件unplugin-auto-import自动导入vue和unia…

AJAX(2)——URL

URL 什么是URL&#xff1f; 定义&#xff1a;统一资源定位符&#xff0c;缩写&#xff1a;URL&#xff0c;或称统一资源定位器、定位地址&#xff0c;URL地址,俗称网页地址&#xff0c;简称网址&#xff0c;是因特网上标准的资源的地址。 概念&#xff1a;URL就是统一资源定…

Linux下C++动态链接库的生成以及使用

目录 一.前言二.生成动态链接库三.使用动态链接库 一.前言 这篇文章简单讨论一下Linux下如何使用gcc/g生成和使用C动态链接库&#xff08;.so文件&#xff09;。 二.生成动态链接库 先看下目录结构 然后看下代码 //demo.h#ifndef DEMO_H #define DEMO_H#include<string&…

【C++】C++应用案例-检验幻方

“幻方”是数学上一个有趣的问题&#xff0c;它让一组不同的数字构成一个方阵&#xff0c;并且每行、每列、每个对角线的所有数之和相等。比如最简单的三阶幻方&#xff0c;就是把1~9的数字填到九宫格里&#xff0c;要求横看、竖看、斜着看和都是15。 口诀&#xff1a;二四为肩…

Pip换源实战指南:加速你的Python开发

1. Pip换源的重要性 在使用Python进行软件开发或数据分析时&#xff0c;pip 是Python的包管理工具&#xff0c;用于安装和管理第三方库。然而&#xff0c;由于网络环境的差异&#xff0c;特别是在某些国家&#xff0c;访问默认的PyPI&#xff08;Python Package Index&#xff…

debain12中安装mysql8

本文安装使用的官方deb&#xff0c;最新的官方安装包地址&#xff1a;https://repo.mysql.com/mysql-apt-config_0.8.29-1_all.deb 前期准备&#xff1a; 1.安装了debain12.6的虚拟机&#xff0c;我是用的virtualBox安装的12.6 Edu的镜像&#xff1b; 开始安装&#xff1a; …

微服务的入门

带着问题进行学习&#xff1a; 1. 对服务进行拆分后&#xff0c;物理上是隔离的&#xff0c;数据上也是隔离的&#xff0c;如何进行不同服务之间进行访问呢&#xff1f; 2.前端是怎么样向后端发送请求的&#xff1f; 通过http请求&#xff0c;通过url&#xff0c;请求的…

最新版Golang pprof使用(引入、抓取、分析,图文结合)

最新版Golang pprof使用 &#x1f525;具体实践: Go调试神器pprof使用教程Golang线上内存爆掉问题排查&#xff08;pprof&#xff09; Github地址:https://github.com/ziyifast/ziyifast-code_instruction/tree/main/go-demo/go-pprof 引入pprof:import _ “net/http/pprof” …

python 查询机器python、gpu、安装包等环境版本信息

checkenv.py """Check environment configurations and dependency versions."""import importlib import os import resource import subprocess import sys from collections import OrderedDict, defaultdictimport torch# 查询自己想要的包…

【开源】一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。

基于 LLM 大语言模型的知识库问答系统 基于大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;的知识库问答系统是一种利用先进的自然语言处理技术来理解用户查询并从知识库中检索出准确答案的系统。这里的LLM指的是能够处理和理解大量文本数据的人工智能…

【Go - 如何查看类型,运行前/运行时】

方式1 - 运行时查看 在Go中&#xff0c;你可以使用reflect.TypeOf()函数来获取变量的类型。这需要导入reflect包。以下是个示例&#xff0c;在运行时打印变量的类型&#xff1a; package mainimport ("context""fmt""reflect""go.mongodb…

精通推荐算法13:图神经网络之GraphSAGE

1 引言 近年来&#xff0c;图神经网络&#xff08;Graph Neural Networks&#xff0c;GNN&#xff09;在NLP、风控和推荐系统等领域的研究十分火热&#xff0c;其对推荐系统、生物医药、社交网络和知识图谱等非结构化数据有十分优秀的处理能力。基于图神经网络的Embedding表征…

用户登录安全是如何保证的?如何保证用户账号、密码安全?

1.HTTP协议直接传输密码&#xff08;无加密&#xff09; 前端 直接发送HTTP请求&#xff08;无加密&#xff09;&#xff0c;攻击者可直接捕获网络包&#xff0c;看到下面的明文信息 因此&#xff0c;使用HTTP协议传输会直接暴露用户敏感信息。 2.HTTPS协议直接传输密码&…

windows环境 python + opencv 加载 onnx 人脸检测模型识别人脸测试

参考博客&#xff1a; 1. OpenCV-Python 4.5.4 人脸识别应用&#xff1a;https://blog.csdn.net/qq_36563273/article/details/121510440( 代码就是在此博客代码基础上改的&#xff0c;主要添加了人脸画框的逻辑 ) 1. windows环境&#xff1a;win11 2. 安装 miniconda2-4.7.1…

用python解释进程与协程(python实例二十八)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.创建进程池&#xff0c;异步执行多个任务 3.1 代码构思 3.2 代码示例 3.3 运行结果 4. 模拟协程堵塞 4.1 代码构思 4.2 代码示例 4.3 运行结果 5.总结 1.认识Python Python 是一个高…

算法019:x的平方根

x的平方根. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/sqrtx/ 这个题乍一看很奇怪&#xff0c;但是换个角度&#xff0c;我们用二分查找的思想来完成这个题。 …

组队学习——决策树(以泰坦尼克号公共数据集为例)

本次我们挑战的数据集为泰坦尼克号公共数据集&#xff0c;为了降低难度&#xff0c;我们在原有数据集的基础上进行了优化&#xff0c;具体数据集介绍如下&#xff1a; 在这里也介绍一下数据的含义吧 数据介绍&#xff1a; Survived&#xff1a;是否存活&#xff08;label&#…

巧用外部资源加速任务执行

1. 背景 在人工智能时代&#xff0c;对算力的要求越来越高&#xff0c;为了加速任务的执行&#xff0c;可以削减软件层面的干扰以充分挖掘本机的硬件算力&#xff0c;具体可参考前面的文章。 若充分挖掘本机硬件能力之后还显不足&#xff0c;就需要增加硬件或提高硬件配置&am…