CTF-MISC(入门|笔记|工具)

news2024/12/23 15:35:27

文章目录

    • 音频隐写
      • 直接隐写
      • 频谱隐写
    • 流量分析
      • 第一种流量包修复
      • 第二种是协议分析
      • 第三种数据提取
    • 图片分析
      • zsteg
      • BMP
      • PNG
        • foremost 工具
        • binwalk
        • steghide
        • stegslove
        • tweakpng
      • JPG
        • F5-steganography
        • stegdetect
    • 压缩包分析
      • zip伪加密
      • crc32
      • zip包明文攻击
    • 其它
      • 条形码扫描
      • pyc反编译
        • 数据转换到ASCII乱码
        • strings命令
        • 动态图片分解
      • 关于PDF的数据隐写
    • PIL库
    • MISC工具包

音频隐写

直接隐写

顾名思义,要么就不装了直接给你一个摩斯电码,要么就是双声道中有一个声道是摩斯电码,这种慢慢数一数就行

频谱隐写

音频中的频谱隐写是将字符串隐藏在频谱中,此类音频通常会有一个较明显的特征,听起来是一段杂音或者比较刺耳。

eg:Su-ctf-quals-2014:hear_with_your_eyes

在这里插入图片描述

流量分析

一般流量分析分为以下三种情况:

  • 流量包修复
  • 协议分析
  • 数据提取

第一种流量包修复

考的很少,可以参考:https://www.cnblogs.com/ECJTUACM-873284962/p/9884447.html

第二种是协议分析

我们通过分析不同类型的数据包,来查找flag可能出现的位置,常用的手段:

  • 第一步,查看协议分级,找出流量最多的协议,然后过滤重点查看
  • 第二步,将当前可疑的协议进行溯源,例如TCP溯源或者HTTP,然后分析可能出现的地方
  • 第三步,分析观察可疑流量的包头信息以及流量的去向信息(例如flag可能以某种规律出现在包头,或者说当前流量是一次盲注攻击)
  • 第四步,要是啥也没分析出来,去试试binwalk或者foremost分离一下试试,没准有隐藏文件(不过一般流量分析的时候就能看出来)

第三种数据提取

其实就是上面的操作,只不过可能需要使用T-shark写脚本,来提取流量中某种特定规律,例如

CTFhub中的ICMP的流量分析三道题

在这里插入图片描述

图片分析

zsteg

这是一个用于检测PNG和BMP中的隐藏数据隐藏数据的工具,可以快速提取隐藏信息。

命令:zsteg 文件名 --all

BMP

目前遇到的是2017世安杯的LOW,题目链接:https://adworld.xctf.org.cn/challenges/details?hash=7c7e8acc-38c7-43c5-af88-a44964ba88c6_2

考点是图片隐写,我们先用画图打开文件,然后另存为png格式的,然后使用stegSlove打开,看一下色道就会发现一个二维码,然后直接扫描就得到flag

考点是LSB隐写,可以参考一下这个博客:https://blog.csdn.net/weixin_34075268/article/details/88744599

PNG

foremost 工具

这个工具主要是做文件的分离的恢复

ctf这类文件分离的题目,大多时候可以使用 binwalk或者 winhex也可以使用 dd命令。可以使用 foremost,相对来说 binwalk更加强大,速度也快,但是有时候如果不能分离出来,就可以试试看 foremost

-V  - 显示版权信息并退出
-t  - 指定文件类型.  (-t jpeg,pdf ...)
-d  - 打开间接块检测 (针对UNIX文件系统)
-i  - 指定输入文件 (默认为标准输入)
-a  - 写入所有的文件头部, 不执行错误检测(损坏文件)
-w  - 向磁盘写入审计文件,不写入任何检测到的文件
-o  - 设置输出目录 (默认为./output)
-c  - 设置配置文件 (默认为foremost.conf)
-q  - 启用快速模式. 在512字节边界执行搜索.
-Q  - 启用安静模式. 禁用输出消息.
-v  - 详细模式. 向屏幕上记录所有消息。

binwalk

和上面的foremost功能类似,是一个文件提取分离的工具

博客讲解:https://www.bilibili.com/read/cv11310186

steghide

这个是一个色道隐写的工具

stegslove

这个也是观察色道的一个工具

该工具还能进行图片合并功能,例题:https://adworld.xctf.org.cn/challenges/details?hash=ba932136-a9c1-4eff-8b7b-2320c775ca62_2 ,给了你一个压缩包里面有两张图,然后我们需要将两个图片进行合并得到FLAG

在这里插入图片描述

tweakpng

这个工具可以帮我们检查png的一些参数,例如IHDRCRC等等

JPG

F5-steganography

F5刷新隐写

命令:java Extract 路径
然后会得到一个output.txt

stegdetect

通过统计分析技术评估 JPEG 文件的 DCT 频率系数的隐写工具, 可以检测到通过 JStegJPHideOutGuessInvisible SecretsF5appendXCamouflage 等这些隐写工具隐藏的信息,并且还具有基于字典暴力破解密码方法提取通过 Jphideoutguessjsteg-shell 方式嵌入的隐藏信息。

-q 仅显示可能包含隐藏内容的图像。
-n 启用检查JPEG文件头功能,以降低误报率。如果启用,所有带有批注区域的文件将被视为没有被嵌入信息。如果JPEG文件的JFIF标识符中的版本号不是1.1,则禁用OutGuess检测。
-s 修改检测算法的敏感度,该值的默认值为1。检测结果的匹配度与检测算法的敏感度成正比,算法敏感度的值越大,检测出的可疑文件包含敏感信息的可能性越大。
-d 打印带行号的调试信息。
-t 设置要检测哪些隐写工具(默认检测jopi),可设置的选项如下:
j 检测图像中的信息是否是用jsteg嵌入的。
o 检测图像中的信息是否是用outguess嵌入的。
p 检测图像中的信息是否是用jphide嵌入的。
i 检测图像中的信息是否是用invisible secrets嵌入的。

一般命令为:.\stegdetect.exe -tjopi -s 10 Misc.jpg

如果反馈是negative那就说明没看出来是什么类型

压缩包分析

zip伪加密

https://blog.csdn.net/xiaozhaidada/article/details/124538768

crc32

这是一个很暴力的方法,只能适用于压缩包文件内容很小,因为我们不去爆破压缩包的密码,而是直接去爆破源文件的内容,我这里附上几个脚本代码吧,感觉zip包的题目很少出到

crc-1byte.py

import binascii
import string

def crack_crc():
    print('-------------Start Crack CRC-------------')
    crc_list = [0xda6fd2a0, 0xf6a70, 0x70659eff, 0x862575d]#文件的CRC32值列表,注意顺序
    comment = ''
    chars = string.printable
    for crc_value in crc_list:
        for char1 in chars:
            char_crc = binascii.crc32(char1.encode())#获取遍历字符的CRC32值
            calc_crc = char_crc & 0xffffffff#将获取到的字符的CRC32值与0xffffffff进行与运算
            if calc_crc == crc_value:#将每个字符的CRC32值与每个文件的CRC32值进行匹配
                print('[+] {}: {}'.format(hex(crc_value),char1))
                comment += char1
    print('-----------CRC Crack Completed-----------')
    print('Result: {}'.format(comment))

if __name__ == '__main__':
    crack_crc()

crc-2byte.py

import binascii
import string

def crack_crc():
    print('-------------Start Crack CRC-------------')
    crc_list = [0xef347b51, 0xa8f1b31e, 0x3c053787, 0xbbe0a1b]#文件的CRC32值列表,注意顺序
    comment = ''
    chars = string.printable
    for crc_value in crc_list:
        for char1 in chars:
            for char2 in chars:
                res_char = char1 + char2#获取遍历的任意2Byte字符
                char_crc = binascii.crc32(res_char.encode())#获取遍历字符的CRC32值
                calc_crc = char_crc & 0xffffffff#将获取到的字符的CRC32值与0xffffffff进行与运算
                if calc_crc == crc_value:#将获取字符的CRC32值与每个文件的CRC32值进行匹配
                    print('[+] {}: {}'.format(hex(crc_value),res_char))
                    comment += res_char
    print('-----------CRC Crack Completed-----------')
    print('Result: {}'.format(comment))

if __name__ == '__main__':
    crack_crc()

crc-3byte.py

import binascii
import string

def crack_crc():
    print('-------------Start Crack CRC-------------')
    crc_list = [0x2b17958, 0xafa8f8df, 0xcc09984b, 0x242026cf]#文件的CRC32值列表,注意顺序
    comment = ''
    chars = string.printable
    for crc_value in crc_list:
        for char1 in chars:
            for char2 in chars:
                for char3 in chars:
                    res_char = char1 + char2 + char3#获取遍历的任意3Byte字符
                    char_crc = binascii.crc32(res_char.encode())#获取遍历字符的CRC32值
                    calc_crc = char_crc & 0xffffffff#将遍历的字符的CRC32值与0xffffffff进行与运算
                    if calc_crc == crc_value:#将获取字符的CRC32值与每个文件的CRC32值进行匹配
                        print('[+] {}: {}'.format(hex(crc_value),res_char))
                        comment += res_char
    print('-----------CRC Crack Completed-----------')
    print('Result: {}'.format(comment))

if __name__ == '__main__':
    crack_crc()

crc-4byte.py

import binascii
import string

def crack_crc():
    print('-------------Start Crack CRC-------------')
    crc_list = [0xc0a3a573, 0x3cb6ab1c, 0x85bb0ad4, 0xf4fde00b]#文件的CRC32值列表,注意顺序
    comment = ''
    chars = string.printable
    for crc_value in crc_list:
        for char1 in chars:
            for char2 in chars:
                for char3 in chars:
                    for char4 in chars:
                        res_char = char1 + char2 + char3 + char4#获取遍历的任意4Byte字符
                        char_crc = binascii.crc32(res_char.encode())#获取遍历字符的CRC32值
                        calc_crc = char_crc & 0xffffffff#将遍历的字符的CRC32值与0xffffffff进行与运算
                        if calc_crc == crc_value:#将获取字符的CRC32值与每个文件的CRC32值进行匹配
                            print('[+] {}: {}'.format(hex(crc_value),res_char))
                            comment += res_char
    print('-----------CRC Crack Completed-----------')
    print('Result: {}'.format(comment))

if __name__ == '__main__':
    crack_crc()

crc-5byte.py

import binascii
import string

def crack_crc():
    print('-------------Start Crack CRC-------------')
    crc_list = [0x5a904a21]#文件的CRC32值列表,注意顺序
    comment = ''
    chars = 'abcdefghijklmnopqrstuvwxyz\{\}'
    for crc_value in crc_list:
        for char1 in chars:
            for char2 in chars:
                for char3 in chars:
                    for char4 in chars:
                        for char5 in chars:
                            res_char = char1 + char2 + char3 + char4 + char5#获取遍历的任意5Byte字符
                            char_crc = binascii.crc32(res_char.encode())#获取遍历字符的CRC32值
                            calc_crc = char_crc & 0xffffffff#将遍历的字符的CRC32值与0xffffffff进行与运算
                            if calc_crc == crc_value:#将获取字符的CRC32值与每个文件的CRC32值进行匹配
                                print('[+] {}: {}'.format(hex(crc_value),res_char))
                                comment += res_char
    print('-----------CRC Crack Completed-----------')
    print('Result: {}'.format(comment))

if __name__ == '__main__':
    crack_crc()

上面的五个代码其实也就是对应的不同字节数的压缩文件

zip包明文攻击

  • 我们为zip压缩文件所设定的密码,首先被转换成 3 3 3 32 32 32 bitkey,所以可能的 key 的组合是 2 96 2^{96} 296,这是个天文数字,如果用暴力穷举的方式是不太可能的,除非你的密码比较短或者有个厉害的字典。
  • 压缩软件用这3个key加密所有包中的文件,也就是说,所有文件的key是一样的,如果我们能够找到这个key,就能解开所有的文件。
  • 如果我们找到加密压缩包中的任意一个文件,这个文件和压缩包里的文件是一样的,我们把这个文件用同样的压缩软件同样的压缩方式进行无密码的压缩,得到的文件就是我们的Known plaintext(已知明文)。用这个无密码的压缩包和有密码的压缩包进行比较,分析两个包中相同的那个文件,抽取出两个文件的不同点,就是那3个key了,如此就能得到 key 。两个相同文件在压缩包中的字节数应该相差 12 12 12byte,就是那 3 3 3key了。虽然我们还是无法通过这个key还原出密码,但是我们已经可以用这个key解开所有的文件,所以已经满足我们的要求了,毕竟对我们而言,得到解压后的文件比得到密码本身更重要。

简单说一下就是两个通过相同加密的文件,如果已经有一个压缩包是被解出来了(伪加密),我们就可以将这个压缩包作为明文对另一个压缩包进行攻击,最终破解出第二个压缩包的密码,我们使用ARCHPR工具进行攻击:(不过貌似挺慢)

在这里插入图片描述

其它

条形码扫描

https://online-barcode-reader.inliteresearch.com/

例题:https://adworld.xctf.org.cn/challenges/details?hash=eaf7cbbe-2377-433f-841a-461d431d4a72_2

pyc反编译

使用Uncompyle6进行反编译,例题:https://adworld.xctf.org.cn/challenges/details?hash=7a4e06c0-811c-4493-a628-886dc5bd59b4_2

题目思路大概是丢进stegslove,然后观察色道发现有一个色道隐写的二维码,然后扫描后发现一串字母和数字,然后Hex解码后发现可能是pyc文件,于是丢进winhex然后使用Uncompyle6进行反编译,命令:uncompyle6 -o ans.py kk.pyc,然后打开ans.py跑一下代码就出来了

# uncompyle6 version 3.8.0
# Python bytecode 2.7 (62211)
# Decompiled from: Python 3.9.4 (tags/v3.9.4:1f2e308, Apr  6 2021, 13:40:21) [MSC v.1928 64 bit (AMD64)]
# Embedded file name: 1.py
# Compiled at: 2016-10-18 15:12:57


def flag():
    str = [
     102, 108, 97, 103, 123, 51, 56, 97, 53, 55, 48, 51, 50, 48, 56, 53, 52, 52, 49, 101, 55, 125]
    flag = ''
    for i in str:
        flag += chr(i)

    print flag

数据转换到ASCII乱码

题目链接:https://adworld.xctf.org.cn/challenges/details?hash=d8d12470-34b6-4146-a27e-5cd1c057d186_2

碰到了这样的题目,给你一串十六进制的字符串,然后就没有信息了,直接转换ASCII会乱码,搜索后发现是数据偏移了 128 128 128 位,然后,mark一下博主的脚本:

cipher = 'd4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd'
print(''.join([chr(int(cipher[i:i + 2], 16) - 128) for i in range(0,len(cipher), 2)]))

strings命令

strings命令加上grep筛选和正则表达可以帮我们在文件中特定的字段,例如:strings 8deb5f0c2cd84143807b6175f58d6f3f.core| grep {.*}

动态图片分解

网站:https://tu.sioe.cn/gj/fenjie/

关于PDF的数据隐写

刚才做了一道大无语的题,就是:

https://adworld.xctf.org.cn/challenges/details?hash=3dc21fd0-684f-4a05-9360-4c2339c9a377_2

CSAW的一道MSIC数据隐写,数据是隐写在这个pdf中的,不过可能颜色上做了遮盖,用浏览器打开ctrl+a一键提取所有字,就能得到flag

PIL库

常用的一些功能如下:

from PIL import Image,ImageFilter,ImageGrab,ImageDraw,ImageFont
# 创建图片:宽800*高600,红色
imNew = Image.new('RGB',(800,600),(255,0,0))
# 显示图片
#imNew.show()
# 抓取屏幕
imGrab = ImageGrab.grab()
imGrab.save('grab.jpg', 'jpeg')
# 打开图片
im = Image.open('1.jpg')
# 复制图片
im1 = im.copy()
im2 = im.copy()
im3 = im.copy()
im4 = im.copy()
im5 = im.copy()
im6 = im.copy()
im7 = im.copy()
# 获得图片宽高:
w, h = im.size
print('图片宽高:{} * {}'.format(w, h))
# 缩略图(图片不会被拉伸,只能缩小)
im.thumbnail((w//2, h//2))
im.save('1_thumbnail.jpg', 'jpeg')
# 缩放(图片可能会被拉伸,可缩小也可放大)
im1 = im1.resize((w//2, h//2))
im1.save('1_resize.jpg', 'jpeg')
# 模糊图片
im2 = im2.filter(ImageFilter.BLUR)
im2.save('1_blur.jpg', 'jpeg')
# 旋转图片,逆时钟旋转45度
im3 = im3.rotate(45)
im3.save('1_rotate.jpg', 'jpeg')
# 图片转换:左右转换 FLIP_LEFT_RIGHT,上下转换 FLIP_TOP_BOTTOM
im4 = im4.transpose(Image.FLIP_LEFT_RIGHT)
im4.save('1_transpose.jpg', 'jpeg')
# 图片裁剪
box = (200,200,400,400) #左上角(0,0),4元组表示坐标位置:左、上、右、下
im5 = im5.crop(box)
im5.save('1_crop.jpg', 'jpeg')
# 图片上添加文字
draw = ImageDraw.Draw(im6)
#truetype设置字体、文字大小
#stxingka.ttf华文行楷 simkai.ttf 楷体 simli.ttf 隶书
font = ImageFont.truetype("C:\\WINDOWS\\Fonts\\stxingka.ttf", 20) 
draw.text((100,100), ('hello word \n你好,世界'), fill='#0000ff', font=font)
im6.save('1_drawText.jpg', 'jpeg')
# 图片上添加图片(粘贴图片)
imTmp = Image.new('RGB',(30,30),'blue')
im7.paste(imTmp, (50,50)) #第2个参数为坐标
im7.save('1_paste.jpg','jpeg')
# 图片横向拼接:拼接上面im6、im7(两张图片大小一样)
im6Width, im6Height = im6.size
imHorizontal = Image.new('RGB', (im6Width * 2, im6Height))
imHorizontal.paste(im6, (0,0))
imHorizontal.paste(im7, (im6Width,0))
imHorizontal.save('1_horizontal.jpg', 'jpeg')
# 图片竖向拼接:拼接上面im6、im7
imVertical = Image.new('RGB', (im6Width, im6Height*2))
imVertical.paste(im6, (0,0))
imVertical.paste(im7, (0,im6Height))
imVertical.save('1_vertical.jpg', 'jpeg')

ImageDraw 模块提供了 Draw 类,它能在 Image 实例上进行简单的 2D 绘画。你可以使用这个模块来创建新图像或者修饰现有图像。

有关 PIL 的更高级绘图库,可以参考 aggdraw模块
创建 Draw 类的实例

要在 Image 实例上绘制新的图样,首先要创建一个 Draw 类的实例。

这里粗略介绍下 Draw 类中的基本绘画操作函数(英文都是函数名):

  • 弦/弧/扇形: chord / arc / pieslice
  • 椭圆: ellipse
  • 线段/多段线: line
  • 点: point
  • 多边形: polygon
  • 矩形: rectangle
  • 文字: text
  • 文字大小: textsize

详细的使用说明,请看官方文档:Draw 类的各函数使用说明

画直线

Draw 类提供了 line(xy,options) 函数绘制直线。 其中 xy 表示坐标列表,它可以是任何包含 2 2 2 元组 [(x,y),…] 或者数字 [x,y,…] 的序列对象,至少包含两个坐标:

  • [ ( x 1 , y 1 ) , ( x 2 , y 2 ) , … ] [(x1, y1), (x2, y2), …] [(x1,y1),(x2,y2),] :包含若干个元组的列表
  • [ x 1 , y 1 , x 2 , y 2 , … ] [x1, y1, x2, y2, …] [x1,y1,x2,y2,] :按照顺序包含坐标信息的列表
  • [ x 1 , y 1 , ( x 2 , y 2 ) , … ] [x1, y1, (x2, y2), …] [x1,y1,(x2,y2),] :以上两种情况的混合
  • ( ( x 1 , y 1 ) , ( x 2 , y 2 ) , … ) ((x1, y1), (x2, y2), …) ((x1,y1),(x2,y2),) :包含若干个元组的元组
  • ( x 1 , y 1 , x 2 , y 2 , … ) (x1, y1, x2, y2, …) (x1,y1,x2,y2,) :按照顺序包含坐标信息的元组
  • ( x 1 , y 1 , ( x 2 , y 2 ) , … ) (x1, y1, (x2, y2), …) (x1,y1,(x2,y2),) :以上两种情况的混合options 可用的选项:
    • fill = (R,G,B) :指定线条颜色
    • width = integer :指定线条宽度,单位是px

附上一道例题:梅花香之苦寒来

脚本:

from PIL import Image,ImageDraw
import re
img = Image.new('RGB',(272,272),(0,0,0))
drawAvatar = ImageDraw.Draw(img)


with open('key.txt','r') as f:
    key = f.read()
    key = key.split('\n')
    
    for i in range(len(key)):
        pox = (key[i])
        indx = pox.find(',')
        a = int(pox[1:indx])
        b = int(pox[indx+1:len(pox)-1])
        print(a,b)
        tp = (a,b)
        drawAvatar.point(tp,fill=(255,255,255))

    img.show()

MISC工具包

其实MISC的题目很杂很杂,大家可以多多去一些平台做一些MISC的题目,拓展一下自己的见识,我这里附上我常用的MISC工具包吧(一般情况下应该够用):

链接:https://pan.baidu.com/s/10IbBjwmZQvvQrXdDTYL-zQ
提取码:vet6

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

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

相关文章

2022年安徽建筑施工电工(建筑特种作业)模拟试题及答案

百分百题库提供特种工(电工)考试试题、特种工(电工)考试真题、特种工(电工)证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 149.使⽤绝缘操作杆时,下列…

NTZ改机原理全公开(二)-- 实现篇

最核心的逻辑就是代码hook了,找这些hook点可不是一件容易的事情,但是借鉴这个事情就容易得多。这批文章就将这些hook列出来,帮大家节省时间。 主要的hook点为: 音频build属性连接上下文文件访问位置信息其他包管理传感器设置磁盘信息系统时钟系统属性电话相关wifi信息wifi…

uniapp微信小程序 引入腾讯视频插件

参考:微信小程序(或uniapp)引入腾讯视频插件播放视频_苏苏哇哈哈的博客-CSDN博客_微信小程序播放腾讯视频1.在manifest.json里面 "plugins": { "tencentvideo": { …

计算机图形学 着色(shader) 学习笔记

画家算法:从远到近的光栅化,近的物体的着色覆盖远的物体的着色,近的物体的RGB优先 实际计算机图形学使用的是Z-Buffer深度缓冲 先看地板,地板要渲染的像素先放进二位数组内,接下来要看正方体,正方体与之前…

前端路由应该理解的一些前置知识

1. URI和URL 与URI相比,我们更熟悉URL。URL正是使用web浏览器等访问web页面时需要输入的网页地址。比如我们经常输入的 https://www.baidu.com/ 就是 URL 1.1 统一资源标识符 URI是 Uniform Resource Identifier 的缩写。RFC2396分别对这三个单词进行了以下定义: Uniform …

Spring的基础用法

前言 上面的目录内容本文章不一定都会写到,本次的文章将非常简略,主写主要内容,次要内容需要读者有一定的学习基础才可以看懂以及掌握,本文章比较偏向于理论复习,注意是理论,本文章代码不多,代…

【python】异常处理及程序调试(一)

异常类和异常处理 一、程序的错误类型 语法错误:不符合语法规则而产生的错误,如:标识符命名错误,缩进错误,访问未定义的变量等。这类错误在编辑或解释时就会被检测出来,产生这类错误,程序将会…

node.js+uni计算机毕设项目基于微信小程序点餐与结账系统LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

2023跨年代码(烟花+自定义文字+背景音乐+雪花+倒计时)

2023年快要到来啦,很高兴这次我们又能一起度过~ 目录 一、前言 二、跨年烟花 三、效果展示 倒计时 2023​编辑 兔圆圆​编辑 四、编码实现 index.html 烟花,雪花,背景音乐,页面样式 index.js 自定义文字 五、获取代码 需…

算法 | 如何通过Math.random()方法实现X平方或更多次方的概率?

前言 本文主要介绍Java中Math.random()方法以及该方法的简单应用。 每种语言都有随机方法,在Java中的随机方法有Math.random()方法、Random类。 Math.random Math.random()方法的返回值的是double类型,其返回值的范围为[0,1),包含0&#…

每日笔记

下周要做一个hmi获取登录码、小程序码的新接口,需要用到新的知识来实现这个功能 接口英文名 getUnlimitedQRCode 功能描述 该接口用于获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量…

Es客户端学习

版本:opensearch-rest-high-level-client-2.3.0.jar,httpcore-nio-4.4.11.jar,httpasyncclient-4.1.4.jar 问题背景 初始化es索引逻辑是监听大数据团队消息,然后异步写入es(org.opensearch.client.RestHighLevelClient#bulkAsyn…

七、Kubernetes1.25应用部署、发布的两种方式

1、概述 通过现代的 Web 服务,用户希望应用程序能够 24/7 全天候使用,开发人员希望每天可以多次发布部署新版本的应用程序。 容器化可以帮助软件包达成这些目标,使应用程序能够以简单快速的方式发布和更新,而无需停机。这段话是Ku…

智子商城项目实践开发文档

ZutShop Junior practical training project 在csdn暂存一下开发文档 本人大三做的实训项目,前后端分离。 后端:https://github.com/roydonGuo/ZutShop 前端使用Vue,前端项目地址:https://github.com/roydonGuo/ZutShop-Vue 0. …

python利用json和pyecharts画折线图实例

目录 一.json模块对数据进行处理 二.利用pyecharts画折线图 三.利用pyecharts画美、日、印三国家折线图 四.本文数据集 注:本次实验的数据在文章最后面,我已上传至百度网盘 一.json模块对数据进行处理 上面三个txt文本是这三个国家疫情爆发相关的数据 …

linux有磁盘空间却显示不足 linux中inode使用率过高处理办法

linux中inode使用率过高处理办法 前几天收到监控告警,说Inode节点空间不足,之前没处理过这种问题,所以记录一下处理过程,便于以后查阅。 Inode使用率高并不会影响系统正常运行和新文件的创建,但是当使用率达到100%的…

【Linux】Linux编译器gcc/g++的使用

今天不学习,明天变垃圾。 文章目录一、程序的翻译过程1.预处理(1.2.3把你的代码编译成二进制代码)2.编译(C语言 > 汇编语言)3.汇编(无法被执行的二进制文件,为什么捏?&#xff09…

腾讯云Windows 轻量应用服务器如何搭建 FTP 服务?

本文档介绍如何在 Windows 操作系统的轻量应用服务器上通过 IIS 搭建 FTP 站点。 本文搭建 FTP 服务组成版本如下: Windows 操作系统,本文以系统镜像 Windows Server 2012 为例。IIS:Web 服务器,本文以 IIS 8.5 为例。 步骤1&am…

自行车在线租赁管理系统的设计与实现

自行车在线租赁管理系统 摘 要 随着Internet的不断发展,在线租赁在现实生活中的使用和普及,自行车在线租赁行业成为近年内出现的一个新行业,并且能够成为大众广为认可和接受的行为和选择。设计自行车在线租赁管理系统的目的就是借助计算机…

(四)汇编语言——简单程序

目录 编写程序的工作过程 编写汇编源程序 伪指令 汇编指令 注释 编写步骤 编译连接 编译 连接 运行 总结 编写程序的工作过程 接下来,我们简单介绍一下一个汇编程序,从写出到最后执行,他到底经历了哪些步骤。 编写汇编源程序 首先…