如何破解压缩包密码,CTF压缩包处理

news2024/12/29 11:26:30

I. 引言

压缩包我们经常接触,用于对文件进行压缩存储/传输。压缩包处理在CTF比赛中是非常重要的一块,因为压缩包中可能包含重要信息:许多CTF题目会将关键信息隐藏在压缩包中,参赛者需要解压并查看其中的内容才能获取有用的线索。解密压缩是常见的CTF技能:参赛者需要掌握各种压缩文件格式的解压缩方法和工具,以及如何对压缩包进行加密和解密。压缩包处理可以提高解题效率:如果参赛者能够快速解压和查看压缩包中的文件列表和内容,就可以更快地找到关键信息,提高解题效率。对出题方而言,压缩包处理可以增加题目难度:如果一个CTF题目涉及到多个压缩包或复杂的加密算法,那么它会更加具有挑战性,考验参赛者的技术水平和耐心。

II. 常见的压缩文件格式

平时我们接触到的压缩包,主要有以下类型:zip格式、rar格式、7z格式、tar格式、gzip格式
其中zip和rar是最常见的其余7z、tar、gzip主要在linux上运行,出题常见于zip和rar,接下来我们简单介绍一下zip和rar两种压缩包

Zip压缩包:

典型特征后缀“.zip”,它的MIME格式为application/zip,zip压缩是一种有损压缩格式,即数据会因压缩而有损失,但是这种损失不会明显影响文件的质量。zip格式可以支持多种压缩算法,如存储、缩小、增强、最佳压缩等,可以根据不同的需求进行选择。zip压缩支持加密压缩。
在这里插入图片描述

特点1:数据记录格式:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
压缩源文件数据库:[文件头+ 文件数据 + 数据描述符]
文件头: 50 4B 03 04 :这是文件头标记(0x04034b50),也可看到是“PK…”开头的
压缩源文件目录区为:50 4B 01 02
压缩源文件目录结束标志:50 4B 05 06
需要注意的加密点,每组四位数字,只和第二个数字有关系。
第二个数字为奇数时 –>加密
第二个数字为偶数时 –>未加密
① 无加密
压缩源文件数据区的全局加密应当为00 00 (50 4B 03 04两个bytes之后)
且压缩源文件目录区的全局方式位标记应当为00 00(50 4B 01 02四个bytes之后)

② 假加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为09 00

③ 真加密
压缩源文件数据区的全局加密应当为09 00
且压缩源文件目录区的全局方式位标记应当为09 00

RAR压缩包

典型特征“.rar”,rar 文件主要由标记块,压缩文件头块,文件头块,结尾块组成。
RAR 文件头 52 61 72 21 1A 07 00
RAR 文件尾 C4 3D 7B 00 40 07 00
伪加密:RAR的伪加密与ZIP的伪加密原理相同,号称伪加密的关键都是一个指定的位标记字段上。

PS:一般RAR伪加密的压缩包用WinRAR打开时都会显示文件头已损坏

在RAR的第24个字节,也就是010 Editor显示的文件结构中的ubyte PASSWORD_ENCRYPTED字段,修改其字段为1即可实现RAR伪加密。
第24个字节修改位1
或者修改第11个字节,也就是010 Editor显示的文件结构中的ubyte BLOCK_HEADERS_ENCRYPTED字段的值。修改为1即可造成RAR伪加密。
第11个字节修改为1
同理解法就是将其对应位置的值修改为0即可实现伪加密rar破解出来。不过一般rar在CTF中出现较少,重点还是zip的压缩包上面做文章。
了解了一些CTF中最常见压缩包格式,接下里我们分享一下如何做CTF题目。其实压缩包的题目,绝大多数是破解密码,其次是不全文件之类的提醒。

III. 实战演练:解决一个包含压缩包的CTF题目

3.1伪加密

这部分内容在第二章节里面已经讲述了,这里就不多累述了。

3.2 暴力破解

通常使用ARCHPR.exe工具来破解压缩文件,支持类型有zip、rar、ace、arj文件类型
使用场景:windows下加密过的压缩文件。
2.1. 攻击类型选择暴力破解,在范围位置根据提示选择暴力破解范围选项设置暴力破解包含的类型、开始于和结束于选项具体范围,如果没有定义则全范围暴力破解。建议使用1~9位的数字密码,以及系统自带的英文字典作为密码字典。
ARCHPR
进行一些简单的设置,这里不用多讲
暴力破解结果
再这个图里面我们就可以获取到暴力破解的结果,这个结果就是压缩包解密密码。

PS:这里的暴力破解只针对真正加密过的压缩文件,才能进行破解,破解的时间与加密密钥的复杂度有关。对于伪加密类型的压缩包是无法通过这个工具进行破解的。

3.3明文攻击

  • 明文攻击是指:加密的zip文件中你已经知道了这个ZIP加密文件中的七种一个或多个文件,推测出密钥并解密zip文件的攻击方法,相比与暴力破解,这种方法在破解密码较为复杂的压缩包时效率更高。
  • 对于zip文件来说,进行明文攻击的条件是:①有一个单独的文件已知且进行压缩之后的CRC值与某个包含此文件的压缩包的CRC值相等;②明文文件的压缩算法一定要和加密的压缩文件的算法一致
    +可以看到循环冗余位CRC有一致的
    如题:
    ACTF新生赛2020明文攻击
    1.在linux里面binwalk分离文件,但是失败了
    在010里面打开图片,,发现尾部存在一个flag.txt,但是缺少一个包头
    在这里插入图片描述2.复制完后加上 50 4B,变成一个新的压缩包11.zip,打开后里面有flag.txt
    在这里插入图片描述
    进行明文攻击,因为压缩包的大小不同,可以用winrar自动进行修复
    (因为flag.txt的crc32相同,但是压解压压缩包在asd文件夹中发现有good-已合并.jpg与qwe.zip两个文件,并且qwe.zip文件中flag.txt有密码,研究good-已合并.jpg,用steghide查看文件隐藏内容:steghide info filename缩后的大小都不同!而且res.zip包压缩后大小比较大)
    最后用archpr明文攻击跑出flag

总结:
第一步:接下来打开ARCHPR,攻击类型选择明文,明文文件路径选择“未加密的.zip”,即:将明文文件不加密压缩后的文件;
第二步:然后加密文件选择需要破解的zip文件夹;
第三步:选择要破解的文件,点击开始,破解成功后会获得密码;

3.4 CRC32碰撞

CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit (8位十六进制数)的校验值由于CRC32产生校验值时源数据块的每一个bit (位)都参与了计算,所以数据块中即使只有一位发生了变化,也会得到不同的CRC32值,总之每个文件都有唯一的CRC32值,即便数据中一个bit发生变化,也会导致CRC32值不同。若是知道一段数据的长度和CRC32值,便可穷举数据,与其CRC32对照,以此达到暴力猜解的目的。但通常只适用于较小文本文件。zip文件中crc32为未加密文件的校验码,比如这里有一个加密的压缩包,直接双击就可以看见其中信息,而且我知道其中全是数字,便可使用脚本爆破。注:需要linux环境
如题:
题目:MISC60
题目描述:宇宙的一切的答案就是32
1.解题分析
日常binwalk分析图片,发现有32.txt文件,内容如下:

GUYDIQRQGMYDIMCBGAYDAOJQGAYDAMBQGQ7DIOJQIE7DON7FHBBEENK
GGQYTEMBQGAYDAMBQGYYDAMBQGAYDANJQGAYDAMBQGY6DERJXGQ6T
QNZUGE6TCNRVGE5EIQZXGJCTIOKEIZBDQRCCGMYTMMZRII7UIQKFIM7DE
RRZGA7TANCCGA6TAOBXIU5EEQRVIY7DCMRQGAYDAMBQGA6DAMBQGAYD
ANJQGRBDAMZQGQYECMBQGA5TAMBQGAYDANJTGQ5TAQJUG4BTQNZUIF
AUCNJRGIYDAMBQGAYDANRQGAYDAMBQGA7TAMBQGAYDANSDGJCTONB
XHA6TIMJXGE6DKMJYIRBTOMSFGQ5UIRSCHBCEEMRWGFBECQJSGRBTMQ
JWINBDGQRVGA7EEMBXGA5EGOBXGRAUCQJVGEZDAMBQGAYDAMBWGAY
DAMBQGA7TANCCGAZTANBQIEYDAMBZGAYDAMBQGAZTINRSGBATINZUGV
CDMMBQIMYTCMRQGAYDAMBQGA6DAMBQGAYDAMBVGAYDAMBQGA6DCM
SFG57DOOBXGQYTOMJWGUYTQRCDG5ZEKNBZIRDEEOCEII7DCNCBGAZTE
QJSGU6UERJSIY5TKMBUIIYDOMBYGQ7UINRQGBBTCMJSGAYDAMBQGAYD
MMBQGAYDAMBVGA7EEMBTGA7DAQJQGAYDSMBQGAYDAMBXIQ7DSMCBG
Q6TMNBSINBECRKFGEZDAMBQGAYDAMBWGAYDAMBQGAYDKMBQGAYDAM
BWG5ZEKNZUG55DONBRG5YTMNJRHBCEGNZSIU7DSRCGII5EIQRQHAYECM
BWGZDEMMBSIZDEKQZVGUYDIQRQG5YDQNRUGJBUEQKFIUYTEMBQGAYD
AMBQGYYDAMBQGAYDKMBUIIYDCMBSGE7DAMBQIEYDAMBZGAYDAMBQGA
7DINBZGBATINZXIU5EEQRVIY7DCMRQGAYDAMBQGA6DAMBQGAYDAMBVGA
YDAMBQGAYDAMBQGAYDAMBQGEYDAMRQGAYDAMBQGAYDAMBQGAYDA
MBWGYZEKNZUG55DONBVGA7EEMBRGAZDCNBQGAYECMBQGA5TAMBQGA
YDANJTGQ5TAQJUG4BTQNZUIFAUCNJRGIYDAMBQGAYDANRQGAYDAMBQG
A7TAMBQGAYDAMBQGAYDAMBQGAYDCMBQGIYDAMBQGAYDANBVGAYDAM
BQGA6EGMSFG57DOOBXGQ7TANCCGAYTAMRRGQYDAMCBGAYDAOJQGAY
DAMBQGM7DMMRQIE7DONBVIQ6DAMCDGEYTEMBQGAYDAMBQGYYDAMBQ
GAYDANJQGAYDAMBQGAYDAMBQGAYDAMBRGAYDEMBQGAYDAMBQHBATA
MBQGAYDANRRGJCTONBXHA6TINJQGRBDAMJQGIYTIMBQGBATAMBQHEYD
AMBQGAYDORBUHEYECNBXGY7DEQ7CIFCUKMJSGAYDAMBQGAYDMMBQG
AYDAMBQGUYDAMBQGAYDAMBQGAYDAMBQGAYTAMBSGAYDAMBQGAYEG
RRQGAYDAMBQGY6TERJXGQ6TQNZUGUYDIQRQGUYDMMBQGAYDAMBQGA
YDIMBQGA7DAMCDIMYDAMBQGAYDCNBQGEYDAMBQGAYDAMA=

观察字符包含大写字母和数字4-7,判断其为base32加密,解密后结果如下:

# 第一组 文件头+文件数据+数据描述(共69字节)
504B0304 0A00 0900 0000 4>49 0A>7 7\xe58BB5F4 12000000 06000000 0500 0000 6<2E74=874
1=1651:DC72E49DFB8DB31631B?DAEC>2F90
?04B0=08 7E:BB5F> 12000000 0<000000
# 第一组 文件头+文件数据+数据描述(共69字节)
504B0304 0A00 0;00 0000 534;0A47 \x03874AAA5 12000000 06000000 0?000000 6C2E7478=4
171<518DC72E4;DFB8DB261BAA24C6A6CB3B
50>B070: C874AAA5 12000000 06000000
# 第三组 文件头+文件数据+数据描述(共69字节)
?04B0304 0A00 0900 0000 3462 0A47 45D600C1 12000000 0<000000 0500 0000 <12E7~7874
1716518DC7rE49DFB8DB>14A032A25=BE2F;
504B0708 4?D600C1 12000000 06000000
# 第四组 文件头+文件数据+数据描述(共69字节)
50>B030> 0A00 0900 0000 7D>9 0A4= 642CBAEE 12000000 06000000 05000000 67rE747z74
17q6518DC72E>9DFB:DB080A066FF02FFEC5
504B07p8 642CBAEE 12000000 06000000
# 第一组核心目录头(共51字节)
504B0102 1>00 0A00 0900 0000 >449 0A47 7E:BB5F> 12000000 0<000000 0500 0000 0000 0000 0100 20000000 00000000 662E747z74
# 第二组核心目录头(共51字节)
50>B0102 1400 0A00 0;00 0000 534; 0A47 \x03874AAA5 12000000 06000000 0?00 0000 0000 0000 0100 20000000 45000000 <C2E7~7874
# 第三组核心目录头(共51字节)
?04B0102 1400 0A00 0900 0000 3>62 0A>7 45D<00C1 12000000 06000000 0500 0000 0000 0000 0100 20000000 8A000000 612E7478=4
# 第四组核心目录头(共51字节)
504B0102 1400 0A00 0900 0000 7D49 0A47 6>2C\xe2AEE 12000000 06000000 0500 0000 0000 0000 0100 20000000 CF000000 6=2E74=874
# 核心目录记录结束
504B0506 0000 0000 0400 0>00 CC000000 14010000 0000

根据对应数据相等,得到?:5,=:7,>:4,::8,<:6,;:9,\xe5:E,\x03:C,\xe2:B,~:4,r:2,z:8,p:0,q:1,替换后得到zip压缩文件二进制代码如下:

# 第一组 文件头+文件数据+数据描述(共69字节)
504B0304 0A00 0900 0000 4449 0A47 7E8BB5F4 12000000 06000000 0500 0000 662E747874
1716518DC72E49DFB8DB31631B5DAEC42F90
504B0708 7E8BB5F4 12000000 06000000
# 第一组 文件头+文件数据+数据描述(共69字节)
504B0304 0A00 0900 0000 53490A47 C874AAA5 12000000 06000000 05000000 6C2E747874
1716518DC72E49DFB8DB261BAA24C6A6CB3B
504B0708 C874AAA5 12000000 06000000
# 第三组 文件头+文件数据+数据描述(共69字节)
504B0304 0A00 0900 0000 3462 0A47 45D600C1 12000000 06000000 0500 0000 612E747874
1716518DC72E49DFB8DB414A032A257BE2F9
504B0708 45D600C1 12000000 06000000
# 第四组 文件头+文件数据+数据描述(共69字节)
504B0304 0A00 0900 0000 7D49 0A47 642CBAEE 12000000 06000000 05000000 672E747874
1716518DC72E49DFB8DB080A066FF02FFEC5
504B0708 642CBAEE 12000000 06000000
# 第一组核心目录头(共51字节)
504B0102 1400 0A00 0900 0000 4449 0A47 7E8BB5F4 12000000 06000000 0500 0000 0000 0000 0100 20000000 00000000 662E747874
# 第二组核心目录头(共51字节)
504B0102 1400 0A00 0900 0000 5349 0A47 C874AAA5 12000000 06000000 0500 0000 0000 0000 0100 20000000 45000000 6C2E747874
# 第三组核心目录头(共51字节)
504B0102 1400 0A00 0900 0000 3462 0A47 45D600C1 12000000 06000000 0500 0000 0000 0000 0100 20000000 8A000000 612E747874
# 第四组核心目录头(共51字节)
504B0102 1400 0A00 0900 0000 7D49 0A47 642CBAEE 12000000 06000000 0500 0000 0000 0000 0100 20000000 CF000000 672E747874
# 核心目录记录结束
504B0506 0000 0000 0400 0400 CC000000 14010000 0000

根据通用位标识0900可知zip文件为加密压缩文件,无法直接解压。由未压缩大小06000000可知每个文件均为6个字符,CRC32校验码为7E8BB5F4、C874AAA5、45D600C1、642CBAEE(转化后为f4b58b7e、a5aa74c8、c100d645、eeba2c64),可以采用crc32碰撞的办法解出4个原文,源码如下:

import binascii
import string

def crack_crc():
    print('-------------Start Crack CRC-------------')
    # 这个例子对于CRC值有多个的爆破
    crc_list = [0xf4b58b7e, 0xa5aa74c8, 0xc100d645, 0xeeba2c64]#文件的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()

3.5 压缩包隐写

比如给出一堆字符或数字,仔细观察为某种进制,将其解码为十六进制,观察其文件头是压缩包或者是其他格式,修改后缀名后解压得flag

3.6 在文件中隐藏压缩包

在CTF压缩包隐写中最为常见,多用于在一个文件中隐藏一个压缩包
原理:以jpg格式为例,完整的JPG由FF D8开头,FF D9结束,图片浏览器会忽略FF D9之后的内容,因此可以在JPG文件之后加入其他的文件。
利用:formost、dd等工具,将其进行分离

IIII. 结论

今天我们分享了压缩包的处理技巧,压缩包题型也是多种多样,重要内容是对压缩包的头的理解、压缩包算法、CRC值、ARCHPR破解工具的使用(当然还有很多工具可以使用),通常压缩包也是配合其他技能一起出题。压缩包的处理效率往往体现在信息收集能力差异上面的。解题压缩包,我觉得最重要是获取关键信息的能力上,许多CTF题目会将关键信息隐藏在压缩包中。掌握压缩包处理技巧可以帮助参赛者快速找到并提取这些关键信息,从而更快地解决问题。而且压缩包的关键信息会在题目上通过各种各样方式(或直接或间接)的告诉给选手,选手需重视这些信息,往往都是破题的关键。

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

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

相关文章

自动巡查、自动换充电……浙江这两台无人机“巢穴”派大用场

浙江省积极探索利用高科技的无人机技术提高森林防火效率。在杭州市西湖区的西山国家森林公园和绍兴市柯桥区的大香林风景区&#xff0c;部署了两台复亚智能全自动无人机飞行系统&#xff0c;实现了火情的自动检测、定期自动巡查以及迅速响应。该技术的应用标志着杭州从传统的“…

设计院图纸加密防泄密方案——天锐绿盾加密软件@德人合科技

天锐绿盾是一款专业的企业信息化防泄密软件&#xff0c;主要针对文档全生命周期进行加密保护&#xff0c;包括创建、修改、传输、归档、分发、销毁等全过程。它可以加强外发数据及终端离线的管理&#xff0c;对正常授权外带范围内的数据流程进行规范。设计图纸、文档等成果数据…

2023年英特尔on技术创新大会深度解析

在北京时间9月19日23&#xff1a;35分&#xff0c;Intel在美国加州圣何塞举办了2023英特尔on技术创新大会。在会议上&#xff0c;Intel相关负责人进行发言&#xff0c;并阐释了本次会议的三大重点内容&#xff0c;分别为Intel Meteor Lake架构概览&#xff0c;Intel 4制程工艺与…

安卓sd卡格式化数据恢复方法,您了解吗

随着智能手机的广泛使用&#xff0c;SD卡作为一种存储扩展设备&#xff0c;已经成为了安卓手机用户的必备之选。然而&#xff0c;当SD卡意外格式化&#xff0c;存储在其中的重要数据也会随之消失。那么&#xff0c;安卓SD卡格式化后数据丢失怎么办&#xff1f;本文将介绍安卓SD…

leetcode 21

递归的方式 class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(l1 nullptr){return l2;}else if(l2 nullptr){return l1;}else if(l1->val < l2->val){l1->next mergeTwoLists(l1->next, l2);return l1;}else if(l1->va…

通讯网关软件029——利用CommGate X2MQTT实现MQTT访问DDE数据源

本文介绍利用CommGate X2MQTT实现MQTT访问DDE数据源。CommGate X2MQTT是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;实现上位机通过MQTT来获取DDE数据源的数据。 【解决方案】设置网关机&…

StarCCM+引入第三方库,找不到的错误

StarCCM里自定义的宏文件是在Star里编译运行的&#xff0c;第三方库需要单独引用。工具->options->环境->用户宏类路径 点进去以后&#xff0c;一定要注意多个jar包是写在一行的&#xff0c;不要主动换行。

6款好用到爆的神级电脑软件,个个让人相见恨晚,堪称办公必备

你的电脑上有哪些好用到爆的神级电脑软件&#xff1f;今天就给大家分享6款好用到爆的神级电脑软件&#xff0c;个个让人相见恨晚&#xff0c;堪称办公必备。 1、PDF工具&#xff1a;PDF24 Tools PDF24 Tools是一款强大而多功能的PDF工具集合&#xff0c;提供了许多便捷的功能&a…

Shopee买家通系统一款批量注册虾皮买家号软件

如果想要大量的虾皮买家号&#xff0c;那么可以使用shopee买家通系统进行全自动化的注册&#xff0c;这款软件在注册时可以自动输入手机号、自动接收短信并输入、自动设置密码等&#xff0c;方便又快速。 shopee买家通系统支持多个国家使用&#xff0c;可以用于菲律宾、印度尼西…

CVer从0入门NLP(一)———词向量与RNN模型

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

操作系统——死锁及其解决方案(p38-p41王道视频、课本ch6)

1.死锁的“知识框架”&#xff1a; 2.“预防死锁”——破坏死锁的4个必要条件: 3.避免死锁&#xff01;&#xff01;&#xff01;&#xff01;——必考&#xff1a;银行家算法 安全性算法描述&#xff1a; 4.“死锁的检测和解除”:

leetcode:231. 2 的幂(位运算)

一、题目&#xff1a; 函数原型&#xff1a;bool isPowerOfTwo(int n) 二、思路&#xff1a; 根据题意&#xff0c;要判断一个数是否为2的幂。如果一个数是2的幂&#xff0c;那么该数的二进制表示中只有一个1。所以只需要将该数的二进制表示中的最低位1移除&#xff0c;判断剩下…

永磁体的温度稳定性:剩磁温度系数、矫顽力温度系数、可逆温度系数

永磁体一般是作为磁场源&#xff0c;在一定的空间内来提供恒定磁场&#xff0c;对于一些精密的仪器仪表和磁性器件来说&#xff0c;磁体磁场的稳定性至关重要&#xff0c;它会直接影响仪器的精度和可靠性。 但是&#xff0c;在外界条件如&#xff1a;温度、时间、电磁场、机械…

黑豹程序员-架构师学习路线图-百科:三大框架MyBatis持久层的王者

文章目录 1、什么是MyBatis2、Mybatis的发展历史3、比Hibernate实现差&#xff0c;但Mybatis却最终胜利了 1、什么是MyBatis MyBatis 是一款优秀的ORM持久层框架&#xff0c;它支持定制化 SQL、高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。My…

软件外包开发的管理方法

软件开发的管理方法是确保项目按计划、高质量地交付的关键。以下是一些常见的软件开发管理方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 敏捷开发&#xff1a;敏捷开发是一种迭代和增量的开发方…

linux之应用编程回顾总结

gcc编译过程 一个c/c文件要经过预处理、编译、汇编和链接4个阶段&#xff0c;才能变成可执行文件 1.预处理 C/C源文件中&#xff0c;以“#”开头的命令被称为预处理命令&#xff0c;如包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”、“#ifdef”等。预处理…

log4j2原理分析及漏洞复现

log4j2原理分析及漏洞复现 0x01 log4j2简介 Log4j2 是一个用于 Java 应用程序的成熟且功能强大的日志记录框架。它是 Log4j 的升级版本&#xff0c;相比于 Log4j&#xff0c;Log4j2 在性能、可靠性和灵活性方面都有显著的改进。 Log4j2 特点 高性能&#xff1a;Log4j2 使用异步…

ThinkPHP 3.2 常用内置函数

ThinkPHP 3.2 内置函数CDM疑问&#xff1a; D与M方法的相同点与不同点IAR 内置函数 C C方法是用于获取或修改&#xff0c;系统配置参数 语法&#xff1a; 获取&#xff1a;C&#xff08;需要获得的配置参数Name&#xff09; $value C(config_name);设置&#xff1a;C&…

常用的CSS伪类和伪元素有哪些?

除了之前提到的:hover、:nth-child(n)、::first-letter和::before之外&#xff0c;还有许多其他常用的CSS伪类和伪元素。以下是一些常见的示例&#xff1a; 常用的CSS伪类&#xff08;Pseudo-classes&#xff09;&#xff1a; :active&#xff1a;选择处于活动&#xff08;被…

python爬虫入门(一)web基础

HTTP基本要点 HTTP请求&#xff0c;由客户端向服务端发出&#xff0c;可以分为 4 部分内容&#xff1a;请求方法&#xff08;Request Method&#xff09;、请求的网址&#xff08;Request URL&#xff09;、请求头&#xff08;Request Headers&#xff09;、请求体&#xff08…