当前位置:网站首页>CTF练习
CTF练习
2022-07-07 21:47:00 【pipasound】
文章目录
- reverseMe
- what-is-this
- red-green
- pure_color
- Aesop_secret
- 倒立屋
- a_good_idea
- 2017_Dating_in_Singapore
- simple-transfer
- hit-the-cote
- Ditf
- gif
- ext3
- simpleRAR
- base64stego
- Misc-pic-again
- Banmabanma
- 适合做桌面
- Hear-with-your-Eyes
- something in image
- stage1
- Miscellaneous-200(绘图)
- 心仪的公司
- hidden massege
- Recover-Deleted-File
- funny_video(音频隐写Matroska+Audition)
- 再见李华
- 普通的数独
- 普通的Disco
- 小小的PDF
- Excaliflag
- 神奇的modbus
- embarass
- 打野
- 2-1
- halo(base64异或用法)
- 签到题
- MISCall
- 就在其中
- flag_universe
- get_the_key.txt
- reverse it
- 3-11
- Become_a_Rockstar
- intoU
- Cephalopod
- 我们的秘密是绿色的
- Just-No-One(协议)
- 心仪的公司
- labour
- 4-2
- low
- misc1
- 隐藏的信息
- Miscellaneous-300
- challenge_how_many_Vigenère
- Py-Py-Py
- 快乐肥宅题
reverseMe
what-is-this
修改后缀名.zip,继续解压.
使用stegsolve工具的combiner功能将两张图片组合,即可得到flag
red-green
pure_color
Aesop_secret
这道题涉及动态图分解,ASE解密(需要解密两次)。
AES是一个对称密码,需要密钥解密。
1.在动态图解析网站,把图片解析出来。
动态图解析网站
得到密钥ISCC
2,再用010editor打开,最底下看到base64编码
AES加密解密网站
倒立屋
a_good_idea
先分离图片得到两张图
进行image combiner
黑里透红,那就是说明像素的对比度起到决定性作用。
调整曝光度
先保存图片,然后使用Photoshop打开图片,我们在右侧面板打开调整->曝光度:
曝光度开到最大,出现二维码
2017_Dating_in_Singapore
simple-transfer
分离pcap
用notepad++打开
hit-the-cote
我们发现大写的XCTF每个字母之间只隔了四个字母,使用python提取一下,得到flag。
num='cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}'
flag=''
for i in range (3,len(num),5):
#第0个数是第一个数,步数算到关键字后
flag+=num[i]
print(flag)
Ditf
拉高图片出密码
分离图片得流量包
流量包搜索flag无果,试试搜索png,jpg,zip。得到base编码,出flag
gif
x=[0b01100110, 0b01101100, 0b01100001, 0b01100111, 0b01111011, 0b01000110, 0b01110101, 0b01001110, 0b01011111, 0b01100111, 0b01101001, 0b01000110, 0b01111101]
b="";
for a in x:
b+=chr(a);
print(b)
ext3
对挂载的理解
安装mount
sudo apt-get install mount
mkdir ctf //新建一个目录 ctf
mount f1fc23f5c743425d9e0073887c846d23 ctf/ //中间的为附件名,再挂载进这个目录里
find / -name flag.txt 在根目录下查找flag.txt,表示在整个硬盘查找
find ctf -name flag.txt 在ctf目录下查找
find . -name flag.txt 在当前目录下查找
umount -f f1fc23f5c743425d9e0073887c846d23//取消挂载
simpleRAR
base64stego
import base64
# 64个Base64 字符
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('C:\\Users\\韩\\Desktop\\stego.txt', 'rb') as f:#rb按照二进制读取
bin_str = ""
flag = ""
for line in f.readlines():#读取每一行
# 转换为str类型
stegb64 = str(line, "utf-8").strip("\n")#以UTF-8编码存储,strip:去除换行符号
# 解码再编码后,得到隐写前的 Base64编码
rowb64 = str(base64.b64encode(base64.b64decode(stegb64)), "utf-8").strip("\n")
# 两次编码的末尾的数据会存在差异,主要是由于 Base64 隐写将一部分二进制码 存到了 在编码过程中会被丢弃的二进制码中
# 我们要做的就是把被舍弃的那一部分的二进制码找出来并拼接,转换,找出二进制码所表示的字符串
# 查找每一种编码的最后一个字符的所在位置的差异 => 将会得到 相差的位数,将位数转化成二进制码即可得到被隐写的那一部分的二进制码
offset = abs(b64chars.index(stegb64.replace('=', '')[-1]) - b64chars.index(rowb64.replace('=', '')[-1]))#红色区域
#abs返回数字的绝对值 [-1]数组的最后一个
# 每一行的 ‘=’ 的个数 => 得到补充 0 的位数
# 一个 ‘=’ 表示 补了 两个二进制位
# 两个 ’=‘ 表示 补了 四个二进制位
# 这些二进制位可能存在被隐写的部分
equalnum = stegb64.count('=')
# 包含 ‘=’ 时 即 可能包含 Base64 隐写时
if equalnum:
# 将差异位 转换为 二进制 => 得到相应的二进制码并进行拼接
# equalnum * 2 的意思为:添加的二进制位
bin_str += bin(offset)[2:].zfill(equalnum * 2)#拼接二进制
#zfill函数主要是为字符串定义长度,如不满足,缺少的部分用0填补
# 将二进制文件转换为字符串
for i in range(0, len(bin_str), 8):
flag += chr(int(bin_str[i:i + 8], 2))
print(flag)
解题思路
依次读取每行,从中提取出隐写位。
如果最后没有‘=’,说明没有隐写位,跳过。
如果最后是一个‘=’,说明有两位隐写位,将倒数第二个字符转化为对应的二进制索引,然后取后两位。
如果最后是两个‘=’,说明有四位隐写位,将倒数第三个字符转化为对应的二进制索引,然后取后四位。
将每行提取出的隐写位依次连接起来,每8位为一组转换为ASCII字符,最后不足8位的丢弃。
Misc-pic-again
zsteg -a//尝试所有已知的组合
zsteg -e "b1,bgr,lsb,xy" pcat.png > p.exe//导出内容
grep 使用正则在文本中搜索字符
strings在文件中搜索文本
strings '/root/Desktop/1' | grep "hctf"
Banmabanma
我们直接利用条形码在线阅读得到其内容:https://online-barcode-reader.inliteresearch.com/
适合做桌面
用stegolve绿色通道发现二维码
Hear-with-your-Eyes
打开二进制发现wav,先修改成wav,不能打开,那就修改成文件夹,用audacity打开wav,换成频谱图得到flag
something in image
strings '/root/Desktop/badimages' | grep -i Flag(-i不分大小写)
stage1
将图片用strgolve翻出二维码
扫描后得到一串十六进制的数,把它放进010editor,看到是pyc文件,然后进行反编译
python反编译地址
def flag():
str = [
65,
108,
112,
104,
97,
76,
97,
98]
flag = ''
for i in str:
flag += chr(i)
print flag
修改一下
str = [
65,
108,
112,
104,
97,
76,
97,
98]
flag = '03F30D0AB6266A576300000000000000000100000040000000730D0000006400008400005A00006401005328020000006300000000030000000800000043000000734E0000006401006402006403006404006405006406006405006407006708007D00006408007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100712B00577C010047486400005328090000004E6941000000696C000000697000000069680000006961000000694C0000006962000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007307000000746573742E7079520300000001000000730A00000000011E0106010D0114014E280100000052030000002800000000280000000028000000007307000000746573742E707974080000003C6D6F64756C653E010000007300000000'
for i in str:
flag += chr(i)
print(flag)
Miscellaneous-200(绘图)
全是三原色数值,可以绘图
脚本如下
from ast import literal_eval as make_tuple
from PIL import Image
f = open(r'.txt', 'r')
corl = [make_tuple(line) for line in f.readlines()]
f.close()
img0 = Image.new('RGB', (270, 270), '#ffffff')
k=0
for i in range(246):
for j in range(246):
img0.putpixel ([i , j], corl[k])
k=k+1
img0.save("result.png")
心仪的公司
strings可用在pcap.记得进入桌面
strings webshell.pcapng | grep {
hidden massege
UDP协议传输数据包:端口隐写
0和1转换转字符串
Recover-Deleted-File
funny_video(音频隐写Matroska+Audition)
再见李华
掩码爆破
普通的数独
数独看着像二维码,将有数字的为1,没数字的为0
用二进制做二维码
# -*- coding:utf-8 -*-
from PIL import Image
x = 45
y = 45
im = Image.new("RGB", (x, y)) # 创建图片
file = open('1.txt', 'r') # 打开rbg值文件
for i in range(0, x):
line = file.readline() # 获取一行
for j in range(0, y):
if line[j] == '0':
im.putpixel((i, j), (255, 255, 255)) # rgb转化为像素
else:
im.putpixel((i, j), (0, 0, 0)) # rgb转化为像素
im.show()
普通的Disco
这里用audacity打开,看到二进制
注意数二进制数,是105个,也就是步长为7
s = '110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101'
flag = ''
for i in range(0,len(s),7):
flag += chr(int('0'+s[i:i + 7],2))
print(flag)
- int(x,2)代表处理成二进制的样子
被一个地方卡死了,怎么找到二进制的波形图,直接放大就行
小小的PDF
foremost即可
Excaliflag
stegslove在蓝色通道里找到了
神奇的modbus
工业设备消息传输使用modbus协议,过滤一下直接搜,但是它sctf{Easy_Mdbus},中间加个o,sctf{Easy_Modbus}就对了
embarass
一开始对流量进行分离,但是内容太多了,直接进行搜索
打野
zsteg看到
2-1
打开发现png头文件不正确89504E47
修改后仍打不开,打开010editor发现没有宽
运行得到准确宽高(crc就是第二行后面)
import struct
import binascii
import os
# 记得加上crc
m = open(r"C:/Users/Lenovo/Desktop/148a3ba22b8541f48f354f3e27f0aa4c.png", "rb").read()
k = 0
for i in range(5000):
if k == 1:
break
for j in range(5000):
c = m[12:16] + struct.pack('>i', i) + struct.pack('>i', j)+m[24:29]
crc = binascii.crc32(c) & 0xffffffff
if crc == 0x932f8a6b:
k = 1
print(hex(i), hex(j))
break
halo(base64异或用法)
from base64 import *
b = b64decode('aWdxNDs0NDFSOzFpa1I1MWliT08w')
data = list(b)
for i in range(0, 200):
key = ''
for j in range(len(data)):
# 注意,python3中已经不用ord去转了
key += chr(data[j]^i)
print(key)
有个在线工具,但是需要密钥
这个看起来较为正常
签到题
SSCTF线上选举美男大赛开始了,泰迪拿着他的密码去解密了,提交花括号内内容(Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==)
base64解密:[email protected]_sw{gfhgs#}
栅栏解密(位移7):ggqht{ggQht_gsQ10jsf#@fopwh}
凯撒密码(位移14):ssctf{ssCtf_seC10ver#@rabit}
MISCall
原理:git信息泄露
下载下来的文件名字太长,先改个名字
[email protected]:~/Desktop/CTF# mv d02f31b893164d56b7a8e5edb47d9be5 miscall
[email protected]:~/Desktop/CTF# ls
miscall
先来查看文件类型
[email protected]:~/Desktop/CTF# file miscall
miscall: bzip2 compressed data, block size = 900k
发现是个bzip2的压缩包,解压
[email protected]:~/Desktop/CTF# bzip2 -d miscall
bzip2: Can't guess original name for miscall -- using miscall.out
#无法猜出miscall的原始名称--使用miscall.out
[email protected]:~/Desktop/CTF# ls
miscall.out
虽然报了错误,但是可以发现文件名发生了改变
[email protected]:~/Desktop/CTF# bzip2 -d miscall
bzip2: Can't guess original name for miscall -- using miscall.out
[email protected]:~/Desktop/CTF# ls
miscall.out
二话不说再看看文件类型
[email protected]:~/Desktop/CTF# file miscall.out
miscall.out: POSIX tar archive (GNU) #tar文件
继续解压
[email protected]:~/Desktop/CTF# tar -xvf miscall.out
[email protected]:~/Desktop/CTF# ls
ctf miscall.out
发现出现了一个新的目录ctf,进去看看,终于看到flag了,可是是个假的
[email protected]:~/Desktop/CTF# cd ctf/
[email protected]:~/Desktop/CTF/ctf# ls
flag.txt
[email protected]:~/Desktop/CTF/ctf# cat flag.txt
Nothing to see here, moving along...
什么都没有,怎么办?再仔细看看,发现了隐藏文件.git,是个啥,百度一波,找到了可用的命令,试试看
[email protected]:~/Desktop/CTF/ctf# ls -a
. .. flag.txt .git
使用命令查看git记录
[email protected]:~/Desktop/CTF/ctf# git log
commit bea99b953bef6cc2f98ab59b10822bc42afe5abc (HEAD -> master)
Author: Linus Torvalds <[email protected]>
Date: Thu Jul 24 21:16:59 2014 +0200
Initial commit
git stash show显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加[email protected]{$num},比如第二个 git stash show [email protected]{1}
git stash apply应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即[email protected]{0},如果要使用其他个,git stash apply [email protected]{$num} , 比如第二个:git stash apply [email protected]{1} ,相当于恢复改变的内容
打开s.py或python s.py
得到flag
就在其中
我们在平时的 Linux 运维管理的时候,经常会进行各种数据备份任务。将数据导出然后打包。通常在安全性要求比较高的环境下,我们可以借助 OpenSSL 工具对打包后的数据进行加密解密,这样能进一步的保障数据的安全性。
文章
在追踪第二个流时发现一些文档,pub.key公钥,推测有私钥
一个流量文件有多个tcp流,往下翻就行。其他流的查找也是这样
找到私钥,保存为pri.key(一定是.key的后缀)
foremost流量包会得到jpg、pdf、zip,zip解压后得到key.txt,发现是乱码,推测存在加密,用openssl解密
命令:openssl rsautl -decrypt -in key.txt -inkey pri.key -out flag.txt
-in 为要解密的加密文档 -inkey 为密钥 -out 为输出文档
[具体的详见如何运用OpenSSL 对文件进行加密和解密_petpig0312的博客-CSDN博客_openssl加密文件](https://blog.csdn.net/petpig0312/article/details/79784016)
flag_universe
流量包中提取文件:1、tcpxtract -f +文件名 2、用NetworkMiner 3、用wireshark 4、foremost -v -i +文件名 5、用Chaosreader
[文章](https://www.cnblogs.com/micr067/p/14076573.html)
流量包里搜索universe,能找到几个universe.png,应该是从流量包里提取图片,binwalk一下发现确实有图片,但是foremost提取不出来
用NetworkMiner
具体打开方式看大佬文章
之前binwalk分离看到有很多图片,我们把NetworkMiner的图片全部进行zsteg,找到flag
get_the_key.txt
没有后缀,file一下查看类型
mkdir创建一个新目录,mount挂载
mkdir ctfff
mount forensic100 ctfff
cd _forensic100.extracted//进入目录
ls
grep -r key.txt//grep -r 在某一目录下递归查找某一子串,根据题目是查找key.txt
file 1//查看文件,是gzip
gunzip<1//进行解压
umount forensic100//取消挂载
reverse it
拖进010editor里观察,开头是FFD9,结尾是FFD8,全部的十六进制反过来了
a='所有十六进制'
b=[::a]
print(b)
打开图片
3-11
zsteg隐写发现有压缩包zsteg -e b1,rgb,lsb,xy 2.png -> 1.zip
,提取出来,解压,得到一串base64码,转图片
Become_a_Rockstar
没有后缀,先去查询类型,发现是txt,但是打开后发现一大段没用的话
仔细看后缀是rock.rockstar是一种语言
将rockstar转成python语言
运行python,我在vscode上面没有运行成功,用的是IDLE
intoU
考点:audacity的采样率
文章
Cephalopod
可以直接搜索flag发现图片打开
binwalk,foremost显示有图片,但是打不开,networkMiner也没有
apt-get install tcpxtract
Tcpxtract -f 文件名//在root里面找
我们的秘密是绿色的
- OurSecret
根据题目,用到工具OurSecret。在Unhide域进行解密
密码看图片,绿色的数字 - 暴力破解
生日是八位纯数字,进行破解 - 明文攻击
出现两个readme.txt,将readme.txt压缩成zip - 栅栏密码
- 凯撒密码
- 伪加密
压缩源文件数据区:
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
01 00:全局方式位标记(判断有无加密的重要标志)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
00 00:扩展记录长度
6B65792E7478740BCECC750E71ABCE48CDC9C95728CECC2DC849AD284DAD0500
压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记(0x02014b50)
3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密的重要标志,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
16 B5 80 14:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
07 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 00 00 00:外部文件属性
00 00 00 00:局部头部偏移量
6B65792E7478740A00200000000000010018006558F04A1CC5D001BDEBDD3B1CC5D001BDEBDD3B1CC5D001
压缩源文件目录结束标志:
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
59 00 00 00:目录区尺寸大小
3E 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度
划重点!
用010hex打开zip文件。
把504B0304后的第3、4个byte改成0000还有
把504B0102后的第5、6个byte改成0000即可破解伪加密。
##识别真假加密
无加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为00 00
假加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为09 00
真加密
压缩源文件数据区的全局加密应当为09 00
且压缩源文件目录区的全局方式位标记应当为09 00
————————————————
版权声明:本文为CSDN博主「BJFU_vth」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41687289/article/details/82695801
Just-No-One(协议)
得到一个exe
发现是个安装包
在协议发现flag
心仪的公司
这个搜flag搜不到,只能搜fl,用strings命令搜也行,在wireshark里搜也行,fl4g:{ftop_Is_Waiting_4_y}
labour
打开后没后缀,不知道文章类型,先用nodepad++看里面内容
打开后发现是可下载的软件ExpertGPS
将文件改后缀名(.gpx)
Use appropriate brackets and underscores to separate words if you succeed–>翻译就是“如果成功,使用适当的方括号和下划线分隔单词 – >”
文章
4-2
quipqiup分析
特点就是加密的最后几个单词
low
- 低位隐写 lsb隐写
- StegSolve发现二维码被覆盖了,需要像素处理
from PIL import Image
img = Image.open('./pic/low.bmp')
img_tmp = img.copy()
pix = img_tmp.load()
width, height = img_tmp.size
for w in range(width):
for h in range(height):
if pix[w, h] & 1 == 0:
pix[w,h] = 0
else:
pix[w, h] = 255
img_tmp.show()
misc1
每两个分组十六进制,转成十进制后-128(偏移量为128)
再转成ascii码得到flag:DDCTF{9af3c9d377b61d269b11337f330c935f}
python脚本
import re
s = 'd4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd'
num = re.findall('\w{2}' ,s)
flag = ''
for i in num:
ch = chr(int(i,16)-128)
flag += ch
print(flag)
隐藏的信息
是八进制数字,用CaptfEncoder
(网络安全工具套件)转换,还挺好用的
八进制转ASCII,发现长得像base64
Miscellaneous-300
得到一个压缩包,需要密码,winhex看了下,不是伪加密,爆破发现密码和文件名一模一样,解压得到下一个加密文件,密码依旧和文件名相同,连续好多个,俄罗斯套娃一样,找了个脚本
import zipfile
import re
zipname = "C:\\Users\\86139\\Desktop\\tmp\\"+"47096.zip"
while True:
if zipname != "C:\\Users\\86139\\Desktop\\tmp\\73168.zip":
ts1 = zipfile.ZipFile(zipname)
res = re.search('[0-9]*',ts1.namelist()[0])
print(res.group())
passwd = res.group()
ts1.extractall("C:\\Users\\86139\\Desktop\\tmp\\",pwd=passwd.encode('ascii'))
zipname = "C:\\Users\\86139\\Desktop\\tmp\\"+ts1.namelist()[0]
else:
print("find")
运行到12475.zip时报错了,爆破得到密码是b0yzz
得到mess.wav,仍进AUdacity里,调成频谱图,发现flag,BallsRealBolls
challenge_how_many_Vigenère
Py-Py-Py
- Stegosaurus pyc隐写
Stegosaurus 是一款隐写工具,它允许我们在 Python 字节码文件( pyc 或 pyo )中嵌入任意 Payload 。由于编码密度较低,因此我们嵌入 Payload 的过程既不会改变源代码的运行行为,也不会改变源文件的文件大小。 Payload 代码会被分散嵌入到字节码之中,所以类似 strings 这样的代码工具无法查找到实际的 Payload 。 Python 的 dis 模块会返回源文件的字节码,然后我们就可以使用 Stegosaurus 来嵌入 Payload 了。
git clone https://github.com/AngelKitty/stegosaurus
快乐肥宅题
下载下来是个swf文件,用PotPlayer打开可以进行每一帧的遍历,玩通关也行
边栏推荐
- Antd date component appears in English
- The essence of analog Servlet
- Vs custom template - take the custom class template as an example
- Robot autonomous exploration series papers environment code
- Dbsync adds support for mongodb and ES
- Install mxnet GPU version
- 如何实现横版游戏中角色的移动控制
- Cataloger integrates lidar and IMU for 2D mapping
- Revit secondary development - modify wall thickness
- Redis官方ORM框架比RedisTemplate更优雅
猜你喜欢
PDF文档签名指南
如何选择合适的自动化测试工具?
Select sort (illustration +c code)
100million single men and women "online dating", supporting 13billion IPOs
微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xf9 in position 56: illegal multibyte sequence
客户案例|华律网,通过观测云大幅缩短故障定位时间
Dayu200 experience officer MPPT photovoltaic power generation project dayu200, hi3861, Huawei cloud iotda
Application practice | the efficiency of the data warehouse system has been comprehensively improved! Data warehouse construction based on Apache Doris in Tongcheng digital Department
苹果在iOS 16中通过'虚拟卡'安全功能进一步进军金融领域
随机推荐
Matplotlib quick start
OpenGL homework - Hello, triangle
反爬通杀神器
微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
Paint basic graphics with custompaint
IP network active evaluation system -- x-vision
Debezium系列之:引入对 LATERAL 运算符的支持
Gazebo import the mapping model created by blender
OpenGL configuration vs2019
Anti climbing killer
Failed to initialize rosdep after installing ROS
How to choose the appropriate automated testing tools?
Ueeditor custom display insert code
How to quickly check whether the opening area ratio of steel mesh conforms to ipc7525
Use partial derivatives to display normals in unity
What does it mean to prefix a string with F?
IP网络主动测评系统——X-Vision
The difference between NPM uninstall and RM direct deletion
C # realizes the communication between Modbus protocol and PLC
PKPM 2020 software installation package download and installation tutorial