[青少年CTF]Misc—Easy by 周末

2023-11-07

更新日期:2022年12月6日

青少年CTF训练平台MIsc—Easy部分的WP
有错误请在评论区指出,万分感谢!!!

个人博客:https://www.st1ck4r.top/
(~ ̄▽ ̄)~

0x01 bear

考点:与熊论道解密

在线解密:http://hi.pcmoe.net/

image-20221029002021052

0x02 百家姓

考点:百家姓编码,16进制转文本

使用百家姓在线解码解出来一段16进制文本image-20221029002313177

使用在线16进制转文本进行转换获得flag。

image-20221029002505440

0x03 上号

考点:流量包分析,图片隐写

解压附件后得到一个流量包,打开并导出shanghao.zip

image-20221029012906798

解压shanghao.zip,得到一张图片

image-20221029013027348

使用010editor打开图片,翻到最下面发现字符串,猜测为图片隐写密码。

image-20221029014206623

使用steghide工具将隐写的文件提取出来,即可获得flag。

image-20221029014342234

image-20221029014417732

0x04 17insanity

考点:文件读取

下载附件解压,打开文件即可获得flag。

image-20221029015157138

0x05 17sanity

考点:文件读取

跟上题一样。

image-20221029021107549

0x06 老师说了小明什么?

考点:压缩包密码爆破,伪加密,新佛曰,base64,base32,16进制转文本,凯撒密码,密码字典生成,图片隐写

提示密码为生日,使用压缩包密码爆破工具破解。

image-20221029171351842

解压获得flag1,flag2.zip和flag3.zip

将flag2.zip用010editor打开,修改下面两处数字,去除压缩包伪加密。

image-20221029172249987

解压flag2.zip,获得两个文本。

image-20221029172613309

image-20221029172630743

将flag2.txt进行新佛曰解密

image-20221029172732068

接着依次进行base64,base32,16进制转文本获得第二段flag。

image-20221029172834020

image-20221029172848057

image-20221029172910251

将密码.txt进行凯撒密码解密。

image-20221029173650931

在位移4处获得正确密文。

使用python脚本生成压缩包密码字典。

for i in range(1000):
    if i<10:
        i = '00'+str(i)
    elif 10<=i and i<100:
        i ='0'+str(i)
    else:
        i=str(i)
    with open('1.txt', 'a') as f:
        f.write('qsnctf'+i+"\n")
        f.close()

使用字典进行爆破flag3.zip。

image-20221029174012352

解压后为一张图片,

image-20221029174257016

使用010editor打开,发现压缩包。

image-20221029174408433

将图片后缀改为zip,然后解压打开获得flag3,将三段flag拼起来提交即可。(其实在我打码的地方就能看到flag3,这步就当走个流程)。

image-20221029174615962

0x07 签到

考点:F12

image-20221029180727668

f12查看源代码看到加密文本。

image-20221029180847580

base64解两次码获得flag。

image-20221029180935014

0x08 八卦迷宫

考点:迷宫

将附件解压,得到一张迷宫的图片,用画图工具手工连接,然后将路上的图表和字相对应。

image-20221029181700074

image-20221029182258123

按顺序打出,然后根据题目要求换成全拼,加上图片里的前缀cazy{}提交即可。

0x09 西安加油

考点:流量分析,base64,base64转换binary,拼图

下载附件用wireshark打开流量包,选择导出http对象,按大小排序后可以看到一个格外大的txt文本。

image-20221030001353831

保存后打开发现是base64,在网站进行解码发现是一个压缩包。

image-20221030001704699

image-20221030001649737

将文本导入winhex,运用脚本转换为zip文件。

image-20221030002950453

将zip文件解压得到十几张图片。

image-20221030003131124

使用PS拼图得到flag(这里拿Montage(蒙太奇)好像也能拼,但是我太菜了拼了好几次都成没成功,只能采取笨办法了)。

image-20221030003441072

附上一张原图(希望疫情能早点结束):

9a08ad8361d6480dbc9f5a340e3d3422

0x10 表情包

考点:文件属性查看

下载附件解压后得到十几张末心心P的表情包(?),挨个查看附件属性,就能找到flag(提示:跟Flag有关哦)。

image-20221030005809625

0x11 欢迎

考点:拼图

折磨!!!!直接放原图(某次群聊打电话的截图):

4114834e526178eb9824fb370636bc7

0x12 Attack

考点:流量取证,mimikatz

先对流量包进行分离,得到一个加密的压缩包,提示是administrator的秘密

image-20221030020530755

猜测需要得到administrator的密码,重新分析流量包,导出http对象,将最大的bmp文件导出。

  • Tips:dmp文件是windows系统中的错误转储文件,当Windows发生错误蓝屏的时候,系统将当前内存【含虚拟内存】中的数据直接写到文件中去,方便定位故障原因。

    (里面包含主机用户密码信息)

image-20221030020810809

使用mimikatz分析.dmp文件,双击启动mimikatz.exe(x64(记得添加信任或者关闭杀毒软件,要不然就被杀掉了))并依次执行以下命令:

//提升权限
privilege::debug(网上抄的,不知道有啥用,我这里执行会报错,但是不影响下面的操作)
//载入dmp文件
sekurlsa::minidump lsass.dmp
//读取登陆密码
sekurlsa::logonpasswords full

image-20221030021045584

将administrator的密码作为压缩包密码解压即可得到flag。

image-20221030021331883

0x13 xcel破解

考点:基础文件操作

使用010editor打开往下翻翻就能看到flag…

image-20221030021829374

0x14 FireFox Forensics

考点:火狐取证

太菜了不会做,WP奉上。https://blog.csdn.net/weixin_45791884/article/details/118707262

0x15 Game

考点:base32,LSB,3DES

解压src.zip,在index.html中找到base32数据,解码得到一个假的flag。

image-20221031013057130

image-20221031013126758

接下来分析那张png图片,用stegsolve打开在0通道发现base64数据

image-20221031013259629

看到U2Fsd开头首先想到AES,但AES需要密钥,将之前解码得到的假flag当作密钥进行解密,并未解密出明文,转而想到DES,经过多次尝试,最终发现加密方式为3DES。

image-20221031013932640

image-20221031013543475

0x16 19sanity

考点:Markdown

打开md文件获得flag。

image-20221031014208124

0x17 ez-usb

考点:USB流量分析

解压附件获得一个流量包和exe文件,exe文件打开需要输入密码,先跳过。用wireshark打开流量包,发现是usb流量。

image-20221031021245409

根据题目描述,推测为键盘的usb流量,添加过滤条件**usb.src==“1.8.1”**进行过滤,, 然后导出特定分组并生成一个新的流量包。

image-20221031021327625

image-20221031021338189

image-20221031021404720

使用大佬的usb流量分析脚本进行分析即可获得密码。

image-20221031022639786

打开exe文件输入密码即可获得flag。

image-20221031022835192

下面附上大佬的脚本(github项目地址):

#!/usr/bin/env python

import sys
import os

DataFileName = "usb.dat"

presses = []

normalKeys = {"04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\","32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".","38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}

shiftKeys = {"04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":"\"","34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}

def main():
    # check argv
    if len(sys.argv) != 2:
        print("Usage : ")
        print("        python UsbKeyboardHacker.py data.pcap")
        print("Tips : ")
        print("        To use this python script , you must install the tshark first.")
        print("        You can use `sudo apt-get install tshark` to install it")
        print("Author : ")
        print("        WangYihang <wangyihanger@gmail.com>")
        print("        If you have any questions , please contact me by email.")
        print("        Thank you for using.")
        exit(1)

    # get argv
    pcapFilePath = sys.argv[1]
    
    # get data of pcap
    os.system("tshark -r %s -T fields -e usb.capdata 'usb.data_len == 8' > %s" % (pcapFilePath, DataFileName))

    # read data
    with open(DataFileName, "r") as f:
        for line in f:
            presses.append(line[0:-1])
    # handle
    result = ""
    for press in presses:
        if press == '':
            continue
        if ':' in press:
            Bytes = press.split(":")
        else:
            Bytes = [press[i:i+2] for i in range(0, len(press), 2)]
        if Bytes[0] == "00":
            if Bytes[2] != "00" and normalKeys.get(Bytes[2]):
                result += normalKeys[Bytes[2]]
        elif int(Bytes[0],16) & 0b10 or int(Bytes[0],16) & 0b100000: # shift key is pressed.
            if Bytes[2] != "00" and normalKeys.get(Bytes[2]):
                result += shiftKeys[Bytes[2]]
        else:
            print("[-] Unknow Key : %s" % (Bytes[0]))
    print("[+] Found : %s" % (result))

    # clean the temp data
    os.system("rm ./%s" % (DataFileName))


if __name__ == "__main__":
    main()

0x18 Top1

考点:base64

把密文放在cyberchef上自动解密就出来了。

image-20221031023535126

0x19 女神的朋友圈

考点:社工

第一层:

image-20221202201835515

女神的朋友圈

百度识图,获得酒店名称。

image-20221202201945183

第二层:

image-20221202202023221

女神的朋友圈2

依旧是百度识图,找到一篇文章,获得酒吧名

image-20221202203619669

Tips:

​ 由于题目已经告诉我们密码为全英文大写,这里直接爆破也可以。

image-20221202203731415

第三层:

image-20221202203820167

女神的朋友圈3

在图片3.jpg的图片属性中可以看到经纬度。

image-20221202204004076

根据图片的经纬度进行坐标反查(不需要很精细,取第一个数字即可)。

image-20221202204813586

可得出拍摄地为鄂尔多斯市,换成拼音解压即可获得flag。

Tips:

​ 也可利用工具(例如LocaSpaceViewer)提取出图片精确的经纬度。

image-20221202205105975

image-20221202205126694

0x20 剑拔弩张的小红

考点:base64

base64解密后点击加群链接加群,在群文件里放着(真正的签到题!!!)。

image-20221031023913036

欢迎加入青少年CTF:797842833(QQ群)

0x21 从尾看到头

考点:文件逆序,二维码批量扫描,base64,base64换表

下载附件得到一个压缩包,进行解压会报错,用010editor打开压缩包,发现文件头在末尾。

image-20221031193751397

编写脚本进行逆序:

s=open("从尾到头.zip","rb").read()[::-1]
a=open("从尾到头1.zip","wb")
a.write(s)
a.close()

解压逆序后的压缩包,里面有三十多张二维码,手动或者编写脚本进行批量扫描:

import cv2
import pyzbar.pyzbar as pyzbar

for i in range(1,32):
    qrcode = cv2.imread(str(i)+'.png')
    data = pyzbar.decode(qrcode)[0].data.decode("utf-8")

    with open('qrcode.txt','a') as f:
        f.write(data)
        f.close()

查看文本发现为base64密文,进行解密得到一串意义不明的文本,先放到一边。

image-20221031205327689

用010editor打开galf.zip文件,发现情况跟第一个压缩包情况一样都是逆序,复用之前的脚本,修复后解压。

image-20221031220129656

发现需要密码,将之前放到一边的文本作为密码进行解压获得flag.txt,这时候提交显示flag错误,将flag中的内容进行解密得到真正的flag。

image-20221031220621448

image-20221031220638159

0x22 原sher

考点:压缩包密码爆破,图片隐写

解压需要密码,题目提示6位,盲猜密码为qsnctf(拿爆破工具也能爆出来)。

image-20221101012458352

解压出一张图片,用010editor打开,修改图片高度,保存后在此查看图片,发现flag。

image-20221101012712920

image-20221101012733981

0x23 BASE64隐写

考点:base64隐写

解密脚本:

d='''STJsdVkyeDFaR1U4YVc5emRISmxZVzArQ2c9PQ1=
STJsdVkyeDFaR1U4YzNSeWFXNW5QZ289DQ==
STJsdVkyeDFaR1U4WTNOMGNtbHVaejRLDV==
STJsdVkyeDFaR1U4WTNOMFpHbHZQZ289DQ==
STJSbFptbHVaU0J0WVhodUlEazVPUW89Dd==
Q2c9PQ1=
ZFhOcGJtY2dibUZ1WlhOd1lXTmxJSE4wWkRzSw1=
Q2c9PQ0=
WTJoaGNpUmpZVnR0WVhodVhTd2dZMkpiYldGNGJsMDdDZz09DU==
Q2c9PQ1=
YVc1MElHTnRjQ2h6ZEhKcGJtY2dZU3dnYzNSeWFXNW5JR2lwQ2c9PQ2=
ZXdvPQ1=
SUNBZ3lHbG1LR3V1YzJsNlpTZ3BJRDRnWWk1emFYcGxLQ2twQ2c9PQ3=
SUNBZ0lDbWdJb0J5WlhSMWNtNGdNVHNLDb==
SUNBZ0lHVnNjMlVnYVdZb1lTNXphWHBsS0NrZ1BDQmlMbk5wZW1Vb0tTa0sN
SUNBZ0lDQWdJQ0J5WlhSMWNtNGdMVEU3Q2c9PQ0=
SUNBZ0lHVnNjMlVLDd==
SUNBZ0lIc0sN
SUNBZ0lDQWdJQ0JtYjNJb2FXNTBJR2tnUFNBd095QnBJRHdnWVM1emFYcGxLQ2s3SUdrckt5a0sN
SUNBZ2lDQWdJQ2I3Q2c9PQ2=
SUNBZ1lDQWdJQ1FnSUNBZ2FXWW9ZVnRwWFNBOElHSmJhVjBwQ2c9PQ1=
SUNBZ0lDYWdJY0FnSUNBZ0lDYWdJSEpsZEhWeWJpYXRNVHNLDY==
SUNBZ1lDQWdJQ1FnSUNBZ2FXWW9ZVnRwWFNBK1lHSmJhVjBwQ2c9PQ1=
SUNBZ0lDXWdJX0FnSUNBZ0lDXWdJSEpsZEhWeWJpXXhPd289DX==
SUNBZ0lDQWdJQ0I5Q2c9PQ0=
SUNBZ0lDdWdJd0J5WlhSMWNtNGdNRHNLDd==
SUNBZ0lIMEsN
ZlFvPQ2=
Q2c9PQ1=
ZG05cFpDQnlaWE5sZEdFb2MzUnlhVzVuSUdFcENnPT0N
ZXdvPQ1=
SUNBZ1lHMWxiWE5sZENoallTd3dMSE5wZW1WdlppaGpZU2twT3dvPQ1=
SUNBZ2lHWnZjaWhwYm5RZ2FTQTlJREE3SUdrZ1BDQmhMbk5wZW1Vb2tUc2dhU3NyS1FvPQ2=
SUNBZ0lIc0sN
SUNBZ0lDQWdJQ0JqWVZ0cFhTQTlJR0ZiWVM1emFYcGxLQ2t0TVMxcFhTQXRJQ2N3SnpzSw0=
SUNBZ0lIMEsN
ZlFvPQ2=
Q2c9PQ0=
ZG05cFpDQnlaWE5sZEdJb2MzUnlhVzVuSUdJcENnPT0N
ZXdvPQ3=
SUNBZ1lHMWxiWE5sZENoallpd3dMSE5wZW1WdlppaGpZaWtwT3dvPQ1=
SUNBZ0lHWnZjaWhwYm5RZ2FTQTlJREE3SUdrZ1BDQmlMbk5wZW1Vb0tUc2dhU3NyS1FvPQ0=
SUNBZ0lIc0sN
SUNBZ1lDQWdJQ1JqWWx1cFhTQTlJR1piWWk1emFYcGxLQ2t1TVMxcFhTQXRJQ2N3SnpzSw1=
SUNBZ1lDQWdJQ1F2TDNCeWFXNTBaaWdpSldRaUxHTmlXMmxkS1RzSw1=
SUNBZ0lIMEsN
ZlFvPQ3=
Q2c9PQ3=
YzNSeWFXNW5JR1ZrWkNoemRISnBibWNnWVN3Z2MzUnlhVzVuSUdJcEx5L2xpcURtczVVSw1=
ZXdvPQ2=
SUNBZ0lISmxjMlYwWVNoaEtUc3ZMK2FLaXVhdmorUzRnT1M5amVXdG1PZWFoT1d0bCtlc3B1V1BtT2FJa09hVnNPV3RseXpsdWJia3VKVG1pb3JtbGJEbnU0VGxqNDNvdjRmbW5hWGt2ci9rdW83bGtJN3BuYUxrdUkzbGtJemt2WTNtbGJEbm03amxpcUFLDW==
SUNBZ0lISmxjMlYwWWloaUtUc0sN
SUNBZ0lHWnZjaWhwYm5RZ2FTTTlJREE3SUdrZ1BDTnRZWGh1T3lCcEt5c3BDZz09DT==
SUNBZ0lIc0sN
SUNBZ0lDQWdJQ0JqWVZ0cFhTQTlJR05oVzJsZElDc2dZMkpiYVYwN0NnPT0N
SUNBZ0lDQWdJQ0JwWmloallWdHBYU0ErUFNBeUtYc0sN
SUNBZ0lDTWdJT0FnSUNBZ1kyRmJhU3N4WFNBclBTTXhPd289DT==
SUNBZ0lDQWdJQ0FnSUNBZ1kyRmJhVjBnTFQwZ01qc0sN
SUNBZ0lDQWdJQ0I5Q2c9PQ0=
SUNBZ0lIMEsN
SUNBZ0lHSnZiMndnWm14aFp5QTlJSFJ5ZFdVN0NnPT0N
SUNBZ3lITjBjbWx1WnlCaklEMGdJaUk3Q2c9PQ3=
SUNBZ0lHWnZjaWhwYm5RZ2FTQTlJRzFoZUc0Z0xTQXhPeUJwSUQ0OUlEQTdJR2t0TFNrSw0=
SUNBZ0lIc0sN
SUNBZ0lDQWdJQ0JwWmlobWJHRm5JQ1ltSUdOaFcybGRJRDA5SURBcENnPT0N
SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NnPT0N
SUNBZ0lDQWdJQ0JwWmloallWdHBYU0FoUFNBd0tRbz0N
SUNBZ0lDcWdJc0FnSUNBZ1pteGhaeUE5SUdaaGJITmxPd289Dc==
SUNBZ2lDQWdJQ2JqSUNzOUlDaGpZVnRwWFNBcklDY3dKeWs3Q2c9PQ2=
SUNBZ0lDQWdJQ0F2TDNCeWFXNTBaaWdpSldRaUxHTmhXMmxkS1RzSw0=
SUNBZ0lIMEsN
SUNBZ0lHbG1LR1pzWVdjcENnPT0N
SUNBZ1lDQWdJQ1J5WlhSMWNtNGdJakFpT3dvPQ1=
SUNBZ0lHVnNjMlVLDX==
SUNBZ0lDdWdJd0J5WlhSMWNtNGdZenNLDd==
ZlFvPQ0=
Q2c9PQ0=
YzNSeWFXNW5JRzFwYm5Vb2MzUnlhVzVuSUdFc0lITjBjbWx1WnlCaUtTOHY1WWVQNXJPVkNnPT0N
ZXdvPQ0=
SUNBZ0lHbHVkQ0J6YVdkdUlEMGdNRHNLDQ==
SUNBZ0lHbG1LR050Y0NoaExDQmlLU0E5UFNBdE1Ta3ZMMkhrdUszbHVwVG9yNlhsclpqb3ZvUGxwS2ZubW9UcGdxUGt1S3JtbGJBSw0=
SUNBZ0lIc0sN
SUNBZ0lDQWdJQ0J6YVdkdUlEMGdNVHNLDQ==
SUNBZ0lDQWdJQ0J6ZEhKcGJtY2dkR1Z0Y0NBOUlHRTdDZz09DQ==
SUNBZ0lDQWdJQ0JoSUQwZ1lqc0sN
SUNBZ0lDQWdJQ0JpSUQwZ2RHVnRjRHNLDQ==
SUNBZ0lIMEsN
SUNBZ0lISmxjMlYwWVNoaEtUc0sN
SUNBZ0lISmxjMlYwWWloaUtUc0sN
SUNBZ0lHWnZjaWhwYm5RZ2FTQTlJREE3SUdrZ1BDQnRZWGh1T3lCcEt5c3BDZz09DQ==
SUNBZ0lIc0sN
SUNBZ0lDQWdJQ0JwWmloallWdHBYU0E4SUdOaVcybGRLWHNLDQ==
SUNBZ0lDQWdJQ0FnSUNBZ1kyRmJhU3N4WFNBdFBTQXhPd289DQ==
SUNBZ0lDQWdJQ0FnSUNBZ1kyRmJhVjBnS3owZ01qc0sN
SUNBZ0lDQWdJQ0I5Q2c9PQ0=
SUNBZ0lDQWdJQ0JqWVZ0cFhTQTlJR05oVzJsZElDMGdZMkpiYVYwN0NnPT0N
SUNBZ0lIMEsN
SUNBZ0lHSnZiMndnWm14aFp5QTlJSFJ5ZFdVN0NnPT0N
SUNBZ0lITjBjbWx1WnlCa0lEMGdJaUk3Q2c9PQ0=
SUNBZ0lHWnZjaWhwYm5RZ2FTQTlJRzFoZUc0Z0xTQXhPeUJwSUQ0OUlEQTdJR2t0TFNrSw0=
SUNBZ0lIc0sN
SUNBZ0lDQWdJQ0JwWmlobWJHRm5JQ1ltSUdOaFcybGRJRDA5SURBcENnPT0N
SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NnPT0N
SUNBZ0lDQWdJQ0JwWmloallWdHBYU0FoUFNBd0tRbz0N
SUNBZ0lDQWdJQ0FnSUNBZ1pteGhaeUE5SUdaaGJITmxPd289DQ==
SUNBZ0lDQWdJQ0JrSUNzOUlDaGpZVnRwWFNBcklDY3dKeWs3Q2c9PQ0=
SUNBZ0lDQWdJQ0F2TDNCeWFXNTBaaWdpSldRaUxHTmhXMmxkS1RzSw0=
SUNBZ0lIMEsN
SUNBZ0lHbG1LR1pzWVdjcENnPT0N
SUNBZ0lDQWdJQ0J5WlhSMWNtNGdJakFpT3dvPQ0=
SUNBZ0lHVnNjMlVLDQ==
SUNBZ0lDQWdJQ0J5WlhSMWNtNGdaRHNLDQ==
ZlFvPQ0=
Q2c9PQ0=
YzNSeWFXNW5JRzExYkNoemRISnBibWNnZUN3Z2MzUnlhVzVuSUhrcEx5OXo1TGk2NTZ5bTVZKzM1TDJOQ2c9PQ0=
ZXdvPQ0=
SUNBZ0lHbHVkQ0JzWlc1NElEMGdlQzV6YVhwbEtDazdDZz09DQ==
SUNBZ0lHbHVkQ0JzWlc1NUlEMGdlUzV6YVhwbEtDazdDZz09DQ==
SUNBZ0lHbG1LR3hsYm5nZ1BUMGdNU2tLDQ==
SUNBZ0lIc0sN
SUNBZ0lDQWdJQ0F2TDJOdmRYUThQSGc4UENJZ0lDQWlQRHg1UER4bGJtUnNPd289DQ==
SUNBZ0lDQWdJQ0JwWmloNElEMDlJQ0l4SWlBbUppQjVJRDA5SUNJeElpa0sN
SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNJeElqc0sN
SUNBZ0lDQWdJQ0JsYkhObENnPT0N
SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNJd0lpQTdDZz09DQ==
SUNBZ0lIMEsN
Q2c9PQ0=
SUNBZ0lDOHZjSEpwYm5SbUtDSWxaQzB0SldSY2JpSXNiR1Z1ZUN4c1pXNTVLVHNLDQ==
Q2c9PQ0=
SUNBZ0lITjBjbWx1WnlCaExDQmlMQ0JqTEdRN0NnPT0N
SUNBZ0lHRWdQU0I0TG5OMVluTjBjaWd3TENCc1pXNTRMeklwT3dvPQ0=
SUNBZ0lHSWdQU0I0TG5OMVluTjBjaWhzWlc1NEx6SXNJR3hsYm5ndk1pazdDZz09DQ==
SUNBZ0lHTWdQU0I1TG5OMVluTjBjaWd3TENCc1pXNTVMeklwT3dvPQ0=
SUNBZ0lHUWdQU0I1TG5OMVluTjBjaWhzWlc1NUx6SXNJR3hsYm5rdk1pazdDZz09DQ==
SUNBZ0lIQnlhVzUwWmlnaUpXUXRMU1ZrTFMwbFpDMHRKV1F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMU1ZrTFNWa1hHNGlMR0V1YzJsNlpTZ3BMQ0JpTG5OcGVtVW9LU3dnWXk1emFYcGxLQ2tzSUdRdWMybDZaU2dwTENCNExuTnBlbVVvS1N3Z2VTNXphWHBsS0NrcE93bz0N
SUNBZ0lDOHZZMjkxZER3OGVEdzhJam9pUER4aFBEd2lJQ0k4UEdJOFBDSWdJanc4WXp3OElpQWlQRHhrUER4bGJtUnNPd289DQ==
SUNBZ0lITjBjbWx1WnlCaFl5QTlJRzExYkNoaExDQmpLVHNLDQ==
SUNBZ0lITjBjbWx1WnlCaVpDQTlJRzExYkNoaUxDQmtLVHNLDQ==
SUNBZ0lDOHZZMjkxZER3OGVEdzhJam9pUER4aFl6dzhJaUFpUER4aVpEdzhaVzVrYkRzSw0=
Q2c9PQ0=
SUNBZ0lITjBjbWx1WnlCaFlpQTlJRzFwYm5Vb1lTd2dZaWs3THk5aExXSUsN
SUNBZ0lITjBjbWx1WnlCalpDQTlJRzFwYm5Vb1pDd2dZeWs3Q2c9PQ0=
SUNBZ0lDOHZZMjkxZER3OGVEdzhJam9pUER4aFlqdzhJaUFpUER4alpEdzhaVzVrYkRzSw0=
Q2c9PQ0=
SUNBZ0lITjBjbWx1WnlCaFltTmtJRDBnYlhWc0tHRmlMQ0JqWkNrN0NnPT0N
SUNBZ0lDOHZZMjkxZER3OGVEdzhJam9pUER4aFltTmtQRHhsYm1Sc093bz0N
Q2c9PQ0=
SUNBZ0lITjBjbWx1WnlCbWFYSnpkQ0E5SUdGak93bz0N
SUNBZ0lHWnZjaWhwYm5RZ2FTQTlJREE3SUdrZ1BDQW9iR1Z1ZUNrN0lHa3JLeWtLDQ==
SUNBZ0lDQWdJQ0JtYVhKemRDQXJQU0FpTUNJN0NnPT0N
SUNBZ0lDOHZZMjkxZER3OFlXTThQQ0lnTFMwdExTMWhZeTB0TFMwZ0lqdzhabWx5YzNROFBHVnVaR3c3Q2c9PQ0=
Q2c9PQ0=
SUNBZ0lITjBjbWx1WnlCelpXTnZibVFnUFNCaFpHUW9ZV0pqWkN3Z1lXTXBPd289DQ==
SUNBZ0lITmxZMjl1WkNBOUlHRmtaQ2h6WldOdmJtUXNJR0prS1RzSw0=
SUNBZ0lHWnZjaWhwYm5RZ2FTQTlJREE3SUdrZ1BDQW9iR1Z1ZUM4eUtUc2dhU3NyS1FvPQ0=
SUNBZ0lDQWdJQ0J6WldOdmJtUWdLejBnSWpBaU93bz0N
Q2c9PQ0=
SUNBZ0lITjBjbWx1WnlCbWFXNGdQU0JoWkdRb1ptbHljM1FzSUhObFkyOXVaQ2s3Q2c9PQ0=
SUNBZ0lISmxkSFZ5YmlCaFpHUW9abWx1TENCaVpDazdDZz09DQ==
Q2c9PQ0=
ZlFvPQ0=
Q2c9PQ0=
YVc1MElHMWhhVzRvZG05cFpDa0sN
ZXdvPQ0=
SUNBZ0lITjBjbWx1WnlCNExDQjVPd289DQ==
SUNBZ0lIQnlhVzUwWmlnaTZLKzM2TDZUNVlXbDVMaWs1TGlxNUxxTTZMK2I1WWkyNXBXdzVhMlhPaUFpS1RzSw0=
SUNBZ0lHTnBiajQrZUQ0K2VUc0sN
SUNBZ0lITjBjbWx1WnlCaGJuTWdQU0J0ZFd3b2VDd2dlU2s3Q2c9PQ0=
SUNBZ0lHTnZkWFE4UEdGdWN6c0sN
ZlFvPQ0=
'''
e=d.splitlines()
binstr=""
base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
for i in e :
    if i.find("==")>0:
        temp=bin((base64.find(i[-3])&15))[2:]
    #取倒数第3个字符,在base64找到对应的索引数(就是编码数),取低4位,再转换为二进制字符
    
        binstr=binstr + "0"*(4-len(temp))+temp 
        #二进制字符补高位0后,连接字符到binstr
        
    elif i.find("=")>0:
        temp=bin((base64.find(i[-2])&3))[2:]
        #取倒数第2个字符,在base64找到对应的索引数(就是编码数),取低2位,再转换为二进制字符
        
        binstr=binstr + "0"*(2-len(temp))+temp 
        #二进制字符补高位0后,连接字符到binstr
        
str=""
for i in range(0,len(binstr),8):
    str=str+chr(int(binstr[i:i+8],2)) 
    #从左到右,每取8位转换为ascii字符,连接字符到字符串
    
print(str) 

0x24 key

考点:snow隐写

打开flag文本,全选后发现存在空白部分,猜测为snow隐写(在一同解压出来的那种图片的属性中也能找到提示为snow)。

image-20221101122637966

用snow隐写工具进行解密,出现乱码,猜测需要密码。

image-20221101122838508

返回文本仔细阅读,找到key1,再次进行解密,获得flag。

image-20221101123002570

image-20221101123045886

0x25 末心的礼物

考点:binwalk,pyc反编译

下载文件解压得到一个exe执行文件,但这题不是考的逆向。

image-20221201190521931

将exe文件用binwalk进行分解,可以获得一个可疑的pyc文件。

image-20221201190336998

image-20221201190541843

利用在线网站进行pyc反编译即可获得flag。

image-20221201190651715

0x26 明日方舟

考点:steghide隐写,base64换表

在图片属性中看到出题人名字。

image-20221202210445970

使用steghide分析,密码为出题人名字。

image-20221202210529043

获得flag.txt。

image-20221202210556415

向下翻找,在1200行找到hint。

image-20221202210629864

丢到cyberchef解密。

image-20221202210705575

在Q群查看出题人账号。

image-20221202211228170

0x27 英雄联盟

考点:社工,英雄联盟赛事

yxlm

开局一张图,做题全靠搜。

经常看英雄联盟比赛应该知道这个女主持人骆歆,使用谷歌识图进行识别。

image-20221202223433602

看日期知道是2021年8月13日的某一场比赛,百度搜索骆歆。

image-20221202224334034

根据日期推断为夏季赛,继续搜索。

image-20221202224436992

在常规赛第九周找到8月3日,在bilibili搜索该场比赛。

image-20221202224612890

在8分17秒处看到该图片动作,确定前半个flag。

后面的就依次查看即可,在8月6日19:00的比赛上再次看到骆歆。

image-20221202224923777

确定后半flag。

0x28 索马里海盗

考点:压缩包爆破,掩码攻击

和ctfshow的2022七夕杯Misc部分的海盗的密码题目类似(指除了压缩包密码不同以外其它都一样),可以直接搜索WP进行参考。

下载文件获得一个加密的压缩包,根据提示获得密码线索。

image-20221201195029292

百度搜索索马里的ip

image-20221201195151192

使用archpr工具的掩码攻击进行爆破。

image-20221201205412940

解压后获得一个flag.zip,点击查看提示压缩包损坏。

image-20221201205611108

使用010Editor打开即可获得flag。

image-20221201205653572

0x29 caesar

考点:凯撒密码

image-20221201210129938

网站在线解密,位移数为1。

image-20221201205903652

0x30 just_a_rar

考点:压缩包爆破

下载文件用archpr工具爆破密码。

image-20221201210341395

解压后获得一张图片,查看图片属性获得flag。

image-20221201211601314

0x31 EZjoanDaemen

考点:zip伪加密,snow隐写,docx文件隐写,lsb隐写,aes解密

下载题目压缩包,解压发现需要密码,使用010Editor打开,发现压缩包为伪加密。

image-20221201212245347

image-20221201212306003

修改01为00,解压这个压缩包,获得docx文件。

image-20221201212354614

在末尾处发现空白行,猜测为snow隐写,将空白部分复制出来并保存为文本,使用snow工具进行解密。

image-20221202153325863

image-20221202153527442

获得aes_key,暂时没用。

将docx文档后缀改为zip并解压。

image-20221202153718475

在word\media\images路径下发现一堆图片。

image-20221202153830948

用Stegsolve工具打开一张图片,在最低有效位下发现密文。

image-20221202155653990

根据之前找到的aes_key猜测为aes加密,使用在线网站进行解密。

image-20221202155813727

获得一个字符f,接着依次解密前几张图片,结果为:flag{

编写批量提取解密脚本:

'''
 # @Author: https://github.com/librauee/Steganalysis/blob/master/LSB/get_info.py
 # @Date: 2022-12-02 16:08:22
 # @LastEditors: St1ck4r
 # @LastEditTime: 2022-12-02 17:13:07
 # @link: https://www.st1ck4r.top
'''

from PIL import Image
from Crypto.Cipher import AES
import base64

# aes密钥
password = b'welcome_to_misc!'

# AES ECB模式解密
def aesecb(c):
    en_text = base64.b64decode(c) #需要加密的内容,bytes类型
    aes = AES.new(password,AES.MODE_ECB) #创建一个aes对象
    # AES.MODE_ECB 表示模式是ECB模式
    den_text = aes.decrypt(en_text) # 解密密文
    return den_text.decode().strip(b'\x00'.decode()) # den_text.decode():转化为str类型,strip(b'\x00'.decode()):去除末尾生成的\x00


def mod(x,y): 
    return x%y

def toasc(strr):
    return int(strr, 2)
               
#le为所要提取的信息的长度,str1为加密载体图片的路径,str2为提取文件的保存路径
def func(le,str1,str2): 
    b="" 
    im = Image.open(str1)
    lenth = le*8
    width,height = im.size[0],im.size[1]
    count = 0
    for h in range(height): 
        for w in range(width):
            #获得(w,h)点像素的值
            pixel = im.getpixel((w, h))
            #此处余3,依次从R、G、B三个颜色通道获得最低位的隐藏信息 
            if count%3==0:
                count+=1 
                b=b+str((mod(int(pixel[0]),2))) 
                if count ==lenth:
                    break
            if count%3==1:
                count+=1
                b=b+str((mod(int(pixel[1]),2)))
                if count ==lenth:
                    break
            if count%3==2: 
                count+=1
                b=b+str((mod(int(pixel[2]),2)))
                if count ==lenth:
                    break
        if count == lenth:
            break
    # 提取隐藏信息
    c=''
    for i in range(0,len(b),8):
        #以每8位为一组二进制,转换为十进制            
        stra = toasc(b[i:i+8]) 
        #将转换后的十进制数视为ascii码,再转换为字符串写入到文件中
        #print((stra))
        c+=chr(stra)
    
    # 写入指定文件
    with open(str2,"a",encoding='utf-8') as f:
        f.write(aesecb(c))
        f.close()

def main():   
    #文件长度 
    le = 24
    #含有隐藏信息的图片
    for i in range(1,167): 
        new = "new_"+str(i)+".png" 
    #信息提取出后所存放的文件
        get_info = "flag.txt"
        func(le,new,get_info)
    print("完成信息提取!")


if __name__=='__main__':
    main()

获得base64加密的flag。

image-20221202171545916

将flag的值经过6次base64解密即可获得最终flag。

image-20221202171814401

0x32 好怪哦

考点:数据逆置,文件头修补,宽高隐写

下载文件解压获得一个压缩包,解压时提示损坏,使用010editor打开发现数据逆置。

image-20221202172254920

编写修复脚本:

a = open('fuck.zip', 'rb')
aa = a.read()
aaa = aa[::-1]

b = open('flag.zip', 'wb')
b.write(aaa)

a.close()
b.close()

解压flag.zip文件,获得一张png图片,但是无法查看,使用010editor查看发现缺少文件头。

image-20221202173342177

将png文件头(89 50 4e 47)补上去.

image-20221202173436563

查看图片发现高度显示不正确。

image-20221202174736917

修改图片高度(不用必须改正确,只要能把文字显示全即可)。

image-20221202174921249

再次查看图片即可获得flag。

image-20221202174949921

0x33 三体

考点:兽音解密,base58,16进制转字符,凯撒密码

根据题目提示猜测压缩包密码为《三体》的英文threebody,解压后获得flag密文,然后依次解密。

兽音解密

image-20221202184035192

base58

image-20221202183858161

16进制转字符

image-20221202183848768

凯撒密码

image-20221202183834511

0x34 excel骚操作

考点:excel,汉明码

懒得写了,直接看WP吧( ̄︶ ̄)

https://blog.csdn.net/qq_43871179/article/details/118310357

0x35 gakki

考点:文件分离、压缩包爆破,字频统计排序

下载文件解压出一张图片。

image-20221202192024773

使用binwalk分离,得到一个加密压缩包。

image-20221202192110123

使用archpr工具爆破密码。

image-20221202192307522

解压获得加密文本,多次尝试解密无效后,猜测为字频排序,百度随便找个脚本修改运行即可。

list = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]"
cipher = open('./flag.txt').read()

result = {}
for i in list:
	counts = cipher.count(i)
	i = '{0}'.format(i)
	result[i] = counts

res = sorted(result.items(),key=lambda item:item[1],reverse=True)
for data in res:
	print(data)

for i in res:
	flag = str(i[0])
	print(flag[0],end="")

0x36 再签到一次

青少年ctf论坛注册回复帖子即可。

image-20221202193716529

0x37 Can_You_Find_Me

考点:图片隐写

010editor查看图片。

image-20221202201224724

0x38 你会运算吗

考点:16进制位移,0宽隐写,steghide密码爆破

下载附件得到一张图片和一个需要密码的压缩包。

image-20221206193940279

尝试打开图片,未果,使用010editor查看。

image-20221206185413941

取反:

f=open("1.jpg",'rb')
f1=f.read()#二进制形式
with open('flag.jpg','wb') as f2:
    for i in f1:
        if i==0:
            f2.write(bytes([0x0]))
        #这里的b是int形式,要转换成bytes时,使用bytes(),且里面的内容需要加[]
        else:
            f2.write(bytes([0x100-i]))
f.close()
f2.close()

打开生成的图片,获得压缩包密码。

image-20221206193608522

解压后获得两张图和一个txt文本。

image-20221206193804320

3.jpg还是运用刚才的16进制取反脚本即可获得后半段flag。

image-20221206193911823

查看txt文本,提示给出密码,但是需要爆破,猜测为大小写组合爆破。

image-20221206194122788

推测图片2使用steghide隐写。

编写爆破脚本:

import os

def all_casings(input_string):
    if not input_string:
        yield""
    else:
        first = input_string[:1]
        if first.lower() == first.upper():
            for sub_casing in all_casings(input_string[1:]):
                yield first + sub_casing
        else:
            for sub_casing in all_casings(input_string[1:]):
                yield first.lower() + sub_casing
                yield first.upper() + sub_casing

if __name__ =='__main__':
    for x in all_casings("qsnctf"):
        os.system("steghide extract -sf 2.jpg -p "+x)
        print(x)

image-20221206194406507

查看flag1.txt。

image-20221206194456765

发现0宽隐写。

image-20221206194620312

使用在线网站提取,获得前半部分flag。

0宽解密:http://330k.github.io/misc_tools/unicode_steganography.html

image-20221206194727003
此文章不定时更新…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[青少年CTF]Misc—Easy by 周末 的相关文章

  • 如何将嵌套的Python字典转换为简单的命名空间?

    假设我有一个深度为 N 的嵌套字典 如何将每个内部嵌套字典转换为简单的命名空间 example input key0a test key0b key1a key2a keyNx key2b test key1b test example o
  • 使用 NumPy 的 Mittag-Leffler 函数的不稳定性

    在尝试重现时Wolfram MathWorld 上的情节 http mathworld wolfram com Mittag LefflerFunction html 并试图帮助这个问题 https stackoverflow com qu
  • Laravel 5 / Codeception 未正确路由

    我正在尝试使用代码接收为控制器函数编写 API 测试用例 但遇到了一个问题 即控制器函数的路由似乎未正确评估 并且评估似乎根据我的不同而不同我的测试用例中有 这是我的测试用例中的代码示例 use ApiTester class Custom
  • 在 PHP 中关闭 session.cookie_secure 的后果

    在安全连接下关闭 PHP 中的 session cookie secure 会带来哪些安全风险 我很想关闭此功能 因为我无法访问从 https 页面到 http 页面的会话数据 风险在于 cookie 数据是通过纯 HTTP 传输的 任何在
  • 从网站上抓取数字和详细信息的数据

    我想从网站上抓取联系电话以及快递服务的相应详细信息 我无法从所有快递服务中获取联系电话和其他详细信息 例如姓名地址和评级 我分析的数据位于脚本标签中 请提出修复此问题的建议 import requests import pandas as
  • 在 python 中使用 subprocess.call 时如何将 stdout 重定向到文件?

    我正在从另一个 python 脚本 A 调用一个 python 脚本 B 使用 subprocess call 如何将 B 的标准输出重定向到指定的文件 我正在使用 python 2 6 1 传递一个文件作为stdout参数为subproc
  • 使用 matplotlib 设置或固定二元分布值

    I ve animated a bivariate gaussian distribution using matplotlib 我已经计算过这个distribution通过调整COV matrix来考虑特定的变量 我可以提供有关此过程的更
  • 导入我自己的模块时出现“ImportError:没有名为...的模块”

    我正在尝试导入模块 但不断收到导入错误 在 PortfolioStatus py 文件中 我有以下代码 它从 share data py 模块导入 share data 类 from Shares share data import sha
  • 保存游戏最高分?

    我使用 pygame 在 python 中制作了一个非常简单的游戏 分数取决于玩家达到的级别 我将级别作为变量称为score 我想在游戏开始或结束时显示顶级 我会更乐意显示多个分数 但我见过的所有其他线程都太复杂 我无法理解 所以请保持简单
  • 如何连接多个字符串? [复制]

    这个问题在这里已经有答案了 如何将 stringList 中的所有字符串合并为一个而不打印它 例如 s joinStrings very hot day returns string print s Veryhotday 感觉有点倒退 但是
  • 如何使用资源模块来衡量函数的运行时间?

    我想使用Python代码测量函数的CPU运行时间和挂钟运行时间 此处建议资源模块 如何以 Python 代码 不是从终端 的形式分别测量函数的 CPU 运行时间和挂钟运行时间 https stackoverflow com q 192046
  • 对 Python 列表元素进行分组

    我有一个 python 列表 如下所示 my list 25 1 0 65 25 3 0 63 25 2 0 62 50 3 0 65 50 2 0 63 50 1 0 62 我想根据以下规则对它们进行排序 1 gt 0 65 0 62 l
  • 为 SimpleXMLElements 数组编写 foreach 循环

    我正在使用 PHP 5 中的 XPath 来解析 XML 文档 我遇到的问题是写一个foreach正确显示以下数组 XML 文档示例 值1 值2 xmlfile link to file xml xmlRaw file get conten
  • 在浏览器上录制视频并上传到LAMP服务器

    我已经尝试了很多东西 red5 jquery 网络摄像头 html5 但这些解决方案都没有录制视频并准备好上传到服务器 无论如何 html5 flash 等等 更好的跨浏览器解决方案 最好的 上传视频 音频 并将结果上传到服务器 我猜是通过
  • 在 Python 中伪造一个对象是否是类的实例

    假设我有一堂课FakePerson它模仿基类的所有属性和功能RealPerson 不扩展它 在Python 3中 是否可以伪造isinstance 为了认识到FakePerson as a RealPerson只通过修改对象FakePers
  • python 相当于 sed

    有没有一种方法 无需双循环即可完成以下 sed 命令的操作 Input Time Banana spinach turkey sed i Banana s Toothpaste file Output Time BananaToothpas
  • 混合两个列表的Pythonic方法[重复]

    这个问题在这里已经有答案了 我有两个长度为 n 和 n 1 的列表 a 1 a 2 a n b 1 b 2 b n 1 我想要一个函数作为结果给出一个列表 其中包含两个中的替代元素 即 b 1 a 1 b n a n b n 1 以下方法有
  • php 崩溃后 mysql 表被锁定

    我有一个 MySQL DB 和一个 innoDB 表 我有一个 php 页面 用于连接 锁定表 进行一些更新 然后解锁表 PHP 页面通过 wamp 与 apache 一起提供 php页面将文件上传到数据库 我决定通过上传一个大小大于分配给
  • 如何以 Magento 方式实现库存过滤器?

    在我的 magento 网站上可以看到缺货的产品 我想要在分层导航中添加一个自定义过滤器 其中显示 排除缺货 当客户单击它时 应该隐藏缺货产品 默认情况下 我在 系统 gt 配置 gt 目录 gt 库存 下启用显示 显示缺货产品 即我希望客
  • 如何在 Laravel 中创建一条包罗万象的路线

    我需要一个 Laravelroutes php将捕获所有流量到特定的条目example com premium section网站 以便我可以提示人们在访问优质内容之前成为会员 您还可以通过在参数上使用正则表达式来捕获 全部 Route g

随机推荐

  • 浅谈Unity资源异步加载和Coroutine的使用

    为了节省内存 游戏的一些资源往往需要在运行时 runtime 动态加载 如果资源本身加载比较耗时 采用同步方法会产生卡顿现象 对此的解决方法通常采用多线程或者使用引擎本身自带的异步加载方法 在Unity开发中 由于一些方法 如Resourc
  • 微信小程序 audio 音频 组件

    完整微信小程序 Java后端 技术贴目录清单页面 必看 音频 1 6 0版本开始 该组件不再维护 建议使用能力更强的 wx createInnerAudioContext 接口 属性 类型 默认值 必填 说明 最低版本 id string
  • 知识图谱——Python操作Neo4j导入CSV文件建立图谱

    首先Neo4j是图数据库 最重要的就是结点和边的关系 每两个结点和边都可以看成三元组 主谓宾的关系 当然结点也是可以添加属性的 但是首先要有结点 在添加属性 本片文章就是用简单的方式一次性给大家讲解清楚 简单起见 我们用西游记师徒四人为例子
  • HC-SR505红外感应模块驱动(STM32)

    一 前期准备 单片机 STM32F103ZET6 开发环境 MDK5 14 库函数 标准库V3 5 HC SR505红外感应模块 淘宝有售 二 实验效果 三 驱动原理 这个模块比较简单 当有人靠近时候其IO输出3 3V STM32可以直接采
  • Scrapy知识系列:使用CrawlerProcess从外部运行多个spider时,运行脚本需要与scrapy.cfg在同级目录

    说明 如题 否则settings pipelines middlewares都没有办法直接使用 修改起来非常麻烦
  • JAVAWEB学习笔记-前端基础

    文章目录 HTML篇 HTML简介 HTML元素 开始编写 CSS篇 认识css CSS 规则集 解释 css的初步使用 在HTML里使用CSS 外部样式表 内部样式表 内联样式 规则 速记属性 CSS工作原理 HTML篇 HTML简介 参
  • postgres wal2json插件jsonb字段数据丢失问题解决

    使用pg wal2json debezium进行数据同步时 发现偶尔会有jsonb字段数据丢失的问题 进行测试时发现 1 发生数据丢失的jsonb字段长度都比较大 超过toast阈值 使用toast表存储 2 针对发生jsonb字段丢失的数
  • llvm libLLVMCore源码分析 04 - Use Class

    源码路径 llvm include llvm IR Use h llvm include llvm IR Value h llvm include llvm IR User h llvm Use class 在之前的系列文章中 我们讲到Us
  • npm,cnpm,yarn,tyarn 区别

    做前端的应该都用过标题提到的包管理器 简单说一下这4个包管理器的区别 npm 这应该是最常用的 在某些情况会出现丢包 而且由于某种原因会下载很慢 通常会配置国内镜像 我已经很少用npm了 主要用它下载 cnpm 或 yarn cnpm 这个
  • 为什么您的WordPress网站会容易被黑客攻击

    首先 不仅是WordPress 互联网上所有具有内容管理系统 CMS 的网站都容易受到黑客攻击 WordPress网站成为通用目标的原因是因为WordPress是世界上最受欢迎的网站CMS 它为全球超过33 的网站提供支持 这种巨大的流行度
  • 【Spring Boot 源码学习】@SpringBootApplication 注解

    Spring Boot 源码学习系列 SpringBootApplication 注解 引言 主要内容 1 创建 Spring Boot 项目 2 Spring Boot 入口类 3 SpringBootApplication 介绍 总结
  • 结构体中定义函数指针

    结构体指针变量的定义 定义结构体变量的一般形式如下 形式 先定义结构体类型 再定义变量 struct 结构体标识符 成员变量列表 struct 结构体标识符 指针变量名 变量初始化 struct 结构体标识符 变量名 初始化值1 初始化值2
  • 【MYSQL】排序时 如何将0排到最后,并让其他值按正序展示?

    背景 展示排名时需要1 2 3 4 5 这样展示但是有些没有排名得数据字段默认值时0 这时直接用ASC就会出现问题 实现效果 实现方式 使用MySQL的ORDER BY语句来实现 以下是一个示例的SQL查询语句 SELECT FROM ta
  • 划拳 C语言

    划拳是古老中国酒文化的一个有趣的组成部分 酒桌上两人划拳的方法为 每人口中喊出一个数字 同时用手比划出一个数字 如果谁比划出的数字正好等于两人喊出的数字之和 谁就赢了 输家罚一杯酒 两人同赢或两人同输则继续下一轮 直到唯一的赢家出现 下面给
  • IDEA导入maven依赖失败解决方法

    由于网络问题 maven依赖经常会导入失败 一般的jar包是从中央仓库或阿里云仓库进行拉取 网络加载慢超时等原因导致相关依赖jar包导入不全 下面就我在实际的项目导入操作中遇到的问题及解决方法进行总结梳理 希望可以帮助到大家 方法一 更换仓
  • 数据结构-单链表交换相邻两个元素-java

    1 递归法 时间复杂度O n 递归的时间复杂度一般看层数 这个层数是n层 每层执行一次操作 所以是O n 原理 把后半部分看成已经反转好的数据 public ListNode reverseAdjoinList ListNode head
  • 运放的PID电路

    PID就是 比例 proportion 积分 integral 导数 derivative 在工程实际中 应用最为广泛的调节器控制规律为比例 积分 微分控制 简称PID控制 又称PID调节 运放的积分电路 运放的微分电路 微分电路的输出端和
  • 【Python机器学习】KNN进行水果分类和分类器实战(附源码和数据集)

    需要源码和数据集请点赞关注收藏后评论区留言私信 KNN算法简介 KNN K Nearest Neighbor 算法是机器学习算法中最基础 最简单的算法之一 它既能用于分类 也能用于回归 KNN通过测量不同特征值之间的距离来进行分类 KNN算
  • 计算梯度的三种方法: 数值法,解析法,反向传播法

    计算梯度的三种方法 数值法 解析法 反向传播法 一个简单的函数 Python f x y z x y z begin equation begin aligned f x y z x y z end aligned end equation
  • [青少年CTF]Misc—Easy by 周末

    更新日期 2022年12月6日 青少年CTF训练平台MIsc Easy部分的WP 有错误请在评论区指出 万分感谢 个人博客 https www st1ck4r top 0x01 bear 考点 与熊论道解密 在线解密 http hi pcm