当前位置: 首页 > news >正文

CTF流量分析实战:从以太网帧到TLS握手的多层穿透方法

1. 这不是“刷题指南”而是一份流量分析现场的完整工作日志你有没有过这种经历打开一道CTF流量分析题Wireshark一开密密麻麻的TCP流、一堆HTTP请求、几段Base64编码、几个可疑的TLS握手包……眼睛扫过去感觉每个包都像在说话但又听不懂它在说什么。你点开一个HTTP流看到/api/upload?token...下意识觉得“这肯定有门道”可token解不开、上传接口没回显、POST体里全是乱码你切到TLS视图发现Client Hello里SNI是admin.internal心里一紧——这域名根本没在题目附件里出现过你导出所有HTTP对象用binwalk扫了一遍结果提示“no embedded files”……最后时间到了你关掉Wireshark只记得自己反复点了三次“Follow TCP Stream”却没真正“跟”进去。这不是你水平不够而是缺少一套可复现、可验证、可迁移的流量分析思维链路。我做CTF流量题七年带过三届校队从最初靠“直觉运气”蒙对flag到现在能用30分钟内完成从协议识别→异常定位→上下文重建→payload提取→逻辑还原的全流程闭环中间踩过的坑、记下的笔记、写废的Python脚本摞起来比《TCP/IP详解》卷一还厚。这篇内容就是我把最近整理的10道典型流量分析题——覆盖HTTP隐写、DNS隧道、ICMP载荷、TLS证书伪造、USB HID键盘模拟、QUIC协议混淆、HTTP/2优先级劫持、SMTP附件嵌套、SMB命名管道滥用、以及一道融合了5种协议的“地狱级”综合题——全部拆开、摊平、重装还原成真实解题现场的完整记录。它不教你怎么背Wireshark过滤语法也不罗列“常见加密算法对照表”。它告诉你当看到Content-Encoding: gzip, deflate时为什么不能直接右键“Decode selected packet”而必须先确认HTTP响应头里的Transfer-Encoding是否为chunked当你在TLS Client Hello里发现supported_groups字段缺失x25519这背后可能暗示服务端强制使用RSA密钥交换进而暴露密钥协商过程中的明文风险当你导出一个看似正常的PNG文件用file命令显示“PNG image data, 1920 x 1080, 8-bit/color RGB, non-interlaced”但xxd -l 64却显示开头是89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52之后紧跟着00 00 07 80 00 00 04 38——这个07801920和04381080之间其实藏着一个被故意错位写入的IDAT块偏移量。这些细节不会出现在任何官方Writeup里但它们才是决定你能否在赛场上多抢3分钟、多拿100分的关键。适合谁看如果你已经能熟练使用tshark -r capture.pcap -Y http.request.method POST但面对一道新题仍要花20分钟才能确定“该从哪个协议层切入”如果你能写出re.findall(rflag\{.*?\}, str(pkt))却总在base64解码后得到乱码而不知从何排查如果你知道tcp.stream eq 5能过滤流但不清楚为什么Stream 5里第17个TCP segment的ack值突然跳变导致后续数据重组失败——那么这篇就是为你写的。它不假设你懂BPF语法但默认你愿意为一个RST包的序列号差值多按一次计算器。2. 协议层穿透为什么必须从L2开始而不是直接跳进HTTP2.1 真实案例一道题让你在Ethernet帧头里找到flag题目编号#3原始描述只有两行“附件为pcapng格式流量包目标提取管理员登录凭证。环境Windows Server 2019 IIS 10”。大多数人会立刻过滤http contains login或http.request.uri contains admin然后陷入无尽的404和302跳转。我打开包的第一件事是看统计 → 协议分级Statistics → Protocol Hierarchy。结果发现Ethernet占比98.7%IPv4占97.2%TCP占95.1%但HTTP仅占2.3%——这意味着97%的流量根本不是HTTP。再点开Ethernet那一行双击展开发现EtherType字段里除了常见的0x0800 (IPv4)和0x86dd (IPv6)还有大量0x88b8IEEE 802.1Qbb PFC、0x88ccLLDP、甚至0x88f7Precision Time Protocol。其中0x88f7出现了142次全部集中在前3秒内。提示Wireshark默认不解析PTPPrecision Time Protocol但它的协议结构极其规整固定44字节头部其中sequenceId2字节、control1字节、logMessageInterval1字节之后是dataSet字段。而dataSet的前4字节正是0x666c6167——ASCII的flag。我导出所有eth.type 0x88f7的帧用tshark -r ptp.pcap -T fields -e ptp.v2.sequence_id -e ptp.v2.control -e ptp.v2.data_set -E separator/ ptp.txt提取关键字段再用Python逐行解析data_set字段的十六进制字符串with open(ptp.txt) as f: for line in f: parts line.strip().split(/) if len(parts) 3: continue try: ds_hex parts[2].replace(:, ) if ds_hex.startswith(666c6167): flag_bytes bytes.fromhex(ds_hex[:32]) # 取前16字节 print(flag_bytes.decode(utf-8, errorsignore)) except: pass结果输出flag{ptp_is_not_just_for_time_sync}。为什么从Ethernet层开始因为CTF出题人越来越擅长“协议伪装”。HTTP流量可以被压缩、混淆、分片TLS可以被降级、重协商、SNI伪造但Ethernet帧头是网络栈最底层的信封修改它需要驱动级权限在真实攻防中极难实现——所以出题人反而爱在这里藏东西。它不依赖上层协议解析器是否开启不依赖Wireshark版本只要tshark能读.pcapng就能提取。2.2 关键原理以太网帧的“不可伪造性”与CTF利用边界以太网帧结构IEEE 802.3包含7个字段Preamble7字节、SFD1字节、Destination MAC6字节、Source MAC6字节、EtherType/Length2字节、Payload46–1500字节、FCS4字节。其中EtherType字段位于MAC地址之后决定了Payload如何被上层协议栈处理。标准值如0x0800IPv4、0x0806ARP是公认的但0x88b8、0x88cc、0x88f7等“厂商特定类型”Vendor Specific EtherType则完全由发送方自由定义接收方若无对应解析器就只能当作未知二进制数据丢弃。CTF利用点正在于此隐蔽性高Wireshark默认只解析常见EtherType大量0x88xx流量在协议分级中被归为Unknown视觉上“消失”抗检测强IDS/IPS规则库极少覆盖非标EtherType流量特征与正常PFC/LLDP/PTP无异解析可控Payload格式完全自定义可嵌入任意编码Base64、Hex、XOR、任意结构JSON片段、PE头、PNG魔数且无需考虑HTTP状态码、TLS握手完整性等上层约束。但必须注意边界长度限制Payload最小46字节不足则填充最大1500字节Jumbo Frame除外。若需传输大flag必须分片——此时sequenceId字段如PTP中就成为天然的排序依据校验绕过FCSFrame Check Sequence是CRC-32校验Wireshark在读取pcap时默认不验证FCS可通过Edit → Preferences → Protocols → Ethernet → Validate checksums开启因此出题人可随意篡改Payload而不影响解析工具链适配tshark支持-Y eth.type 0x88f7过滤但tcpdump不支持十六进制EtherType过滤需用-f ether[12:2] 0x88f7实操中务必确认工具链兼容性。2.3 实战避坑当Wireshark显示“Malformed Packet”时别急着跳过在#3题的后续分析中我发现有7个PTP帧被标记为Malformed Packet。点开详情Wireshark提示“PTP v2 message length field does not match actual length”。我本能想忽略——毕竟flag已拿到。但职业习惯让我右键“Export Packet Bytes”保存为malformed.pkt然后用xxd malformed.pkt | head -n 5查看00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................全零不可能。再检查原始pcap这些帧的Frame层显示Length: 60 bytes (wire)但Captured Length: 60 bytes说明捕获完整。问题出在Wireshark解析逻辑——它期望PTP消息头中messageLength字段offset 2, 2 bytes等于实际Payload长度但出题人故意将该字段设为0x0000触发解析错误。解决方案手动提取Payload。以第一个Malformed帧为例Ethernet头14字节IP头20字节无选项UDP头8字节PTP头前12字节固定messageLength字段在offset 12–13。跳过这14字节直接取frame[14:]tshark -r capture.pcap -Y eth.type 0x88f7 frame.number 127 -T fields -e frame.bytes | \ sed s/://g | cut -c 29- | xxd -r -p | stringscut -c 29-跳过前14字节Ethernet头000000000000000000000000共28字符xxd -r -p反向十六进制解码strings提取可读字符串——输出flag{even_malformed_packets_can_speak}。这个坑教会我“Malformed”不是错误而是出题人的签名。它意味着协议解析器放弃了但原始字节依然完整。此时放弃GUI拥抱CLI用最原始的字节操作往往能打开新世界。3. HTTP层深潜从状态码、Header到Body的三级审查法3.1 案例复盘#5题的304 Not Modified如何泄露敏感路径题目#5web_login.pcap描述“用户登录失败返回HTTP 304但响应体为空。请找出登录失败的真实原因。”第一反应304响应体为空那还有什么可分析多数人会过滤http.response.code 304看到Content-Length: 0就放弃。我则做了三件事查缓存控制链过滤http.request.full_uri contains login找到登录请求POST/auth/login其Request Headers含If-None-Match: abc123找原始响应过滤http.response.code 200 http.response.header.etag abc123定位到前一个GET/auth/login的200响应其Response Body是HTML登录页比对差异用Wireshark的File → Export Objects → HTTP导出两个响应体diff -u login_200.html login_304.html——但后者为空diff无意义。转而看http.response.header200响应有ETag: abc123、Cache-Control: public, max-age3600304响应有ETag: abc123、Cache-Control: public, max-age3600但多了一行X-Debug-Path: /var/www/html/internal/config.php。原来如此服务端在生成304响应时错误地将调试Header注入了缓存响应。X-Debug-Path不在标准HTTP规范中但Wireshark默认解析所有X-*Header。我立即过滤http.response.header.x_debug_path找到全部3个304包提取X-Debug-Path值拼接为/var/www/html/internal/config.php再用grep -r password /var/www/html/internal/假设已获取服务器权限——得到数据库密码。但这只是开始。我继续分析/internal/config.php是否在流量中出现过过滤http.request.uri contains config.php无结果但过滤http contains config.php发现一个POST请求的Referer: https://admin.example.com/internal/config.php。Referer头通常被客户端自动添加说明用户曾访问过该路径——而该路径未在任何链接中暴露只能是前端JS动态拼接。于是导出所有HTTP对象grep -r config.php *.js找到fetch(/api/v1/ window.location.pathname.split(/)[2] .php)证实路径构造逻辑。注意HTTP 304本身不携带Body但其Header可被服务端任意扩展。CTF中X-*Header是高频flag载体因其常被WAF/IDS忽略且Wireshark默认高亮显示。3.2 三级审查法状态码→Header→Body的递进式扫描逻辑HTTP流量分析绝不能只盯Body。我建立了一套强制执行的三级审查流程每级耗时不超过90秒审查层级核心动作关键过滤器示例常见陷阱一级状态码扫描所有非200/301/302/404状态码特别关注304、401、403、429、503http.response.code ! 200 http.response.code ! 301 http.response.code ! 302 http.response.code ! 404忽略304的Header将401的WWW-Authenticate误认为无用二级Header导出所有http.response.header.*字段用sort | uniq -c | sort -nr统计高频Header重点检查X-*,Server,Via,X-Powered-Byhttp.response.header.x_*三级Body对所有非空Body先file判断类型再strings提取可读文本最后binwalk -e检查嵌套文件http.response.body.len 0 http.response.content_length 0Content-Encoding: gzip需先解压Transfer-Encoding: chunked需重组以#5题为例三级审查法执行如下一级发现304占比高达12%远超正常Web应用通常0.1%触发警觉二级tshark -r web_login.pcap -Y http.response.code 304 -T fields -e http.response.header.x_debug_path -e http.response.header.x_real_ip | sort \| uniq -c输出3 X-Debug-Path: /var/www/html/internal/config.php三级虽Body为空但X-Debug-Path已足够定位无需进入Body分析。这套方法的价值在于它把主观“感觉”转化为客观“计数”。当X-Debug-Path出现3次而X-Real-IP出现1次你就知道该优先追哪个。3.3 隐写实战Base64编码的HTTP Body如何避免误报#7题api_upload.pcap描述“用户上传图片至API返回200 OK。请提取图片中的隐藏信息。”过滤http.request.method POST http.request.uri contains upload找到一个POST请求Content-Type: multipart/form-data; boundary----WebKitFormBoundary7MA4YWxkTrZu0gW。导出HTTP对象得到一个image.jpg。file image.jpg显示“JPEG image data”exiftool image.jpg无异常steghide extract -sf image.jpg提示“could not find any embedded data”。我重新审视POST Bodytshark -r api_upload.pcap -Y http.request.method POST -T pdml | grep -A 20 boundary发现Content-Disposition: form-data; namefile; filenameflag.jpg但filename值是flag.jpg而导出的文件名是image.jpg——Wireshark自动重命名了。于是用tshark -r api_upload.pcap -Y http.request.method POST -T fields -e http.file_data body.hex导出原始Body十六进制再用Python提取boundary之间的数据with open(body.hex) as f: raw f.read().replace(\n, ).replace( , ) # 找到boundary位置 boundary ----WebKitFormBoundary7MA4YWxkTrZu0gW start raw.find(boundary.encode(utf-8).hex()) # 跳过header取jpg数据 jpg_start raw.find(ffd8ffe0, start) # JPEG SOI jpg_end raw.find(ffd9, jpg_start) 4 # JPEG EOI jpg_bytes bytes.fromhex(raw[jpg_start:jpg_end]) with open(flag.jpg, wb) as out: out.write(jpg_bytes)file flag.jpg仍显示JPEG但xxd -l 32 flag.jpg显示00000000: ffd8 ffe0 0010 4a46 4946 0001 0100 0001 ......JFIF...... 00000010: 0001 0000 ffdb 0043 0008 0606 0706 0508 .......C........SOI (ffd8) 后紧跟ffe0APP0但ffe0后是0010长度16而标准APP0应为0010 4a46 4946 0001...。这里0010之后是4a46JF但4a46本应在0010之后第2字节。错位了再看0010前的ffe0其后0010表示APP0块长度但实际APP0内容只有4a46 4946 00016字节剩余10字节是填充不对——0010是十六进制即十进制16ffe0 0010表示APP0块长16字节但4a46 4946 0001仅6字节剩下10字节必有玄机。用dd ifflag.jpg ofapp0.bin bs1 skip4 count16提取APP0块JPEG头4字节APP0头2字节APP0数据16字节xxd app0.bin00000000: ffe0 0010 4142 4344 4546 4748 494a 4b4c ....ABCDEFGH IJ KL41424344...是ASCIIABCD...这是Base64编码的起始。base64 -d QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gICBgoOEhYaHiImKi4yNjoQlZqfn6GjpKemq7CztrvAwcbLzM3Oz9DR0tPU1dbZ2t3e3Dh4uPk5ebn6Onq6zt7u/w8fLz9PX29/j5vz09fb3Pn6/P3/w—— 解得flag{base64_in_jpeg_app0_is_still_base64}。关键教训HTTP Body的MIME类型声明Content-Type可能被欺骗必须用file命令验证实际字节。此处multipart/form-data声明上传的是图片但APP0块被恶意填充为Base64而file命令基于魔数判断仍认作JPEG——因为APP0是JPEG合法扩展。4. TLS/SSL层破壁从握手包到证书的逆向工程4.1 案例精解#8题的TLS Client Hello如何暴露私钥题目#8bank_traffic.pcap描述“模拟银行登录流量TLS加密。请恢复明文通信。”常规思路找私钥、解密TLS。但附件里没有keylog文件也没有证书私钥。我打开TLS视图Analyze → Decode As → TLS设置端口443为TLS再看协议分级——TLS占比99.2%但HTTP为0%说明所有应用层数据均被加密。第一步检查Client Hello。过滤tls.handshake.type 1找到第一个Client Hello包。展开TLS Handshake Protocol → Client Hello → Cipher Suites看到支持的套件列表Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f) Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035) Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b) ...注意第一个套件0x002fTLS_RSA_WITH_AES_128_CBC_SHA。这是RSA密钥交换套件意味着服务端将用RSA私钥解密预主密钥Pre-Master Secret。而RSA密钥交换的最大弱点是如果服务端私钥泄露所有历史流量均可解密。第二步找服务端证书。过滤tls.handshake.type 11Certificate导出证书。用openssl x509 -in cert.pem -text -noout查看Subject: CN bank.internal Issuer: CN Internal CA Validity Not Before: Jan 1 00:00:00 2023 GMT Not After : Dec 31 23:59:59 2025 GMT Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77: ... Exponent: 65537 (0x10001)2048位RSA指数65537标准配置。但Subject: CN bank.internal这个域名很可疑——它不是一个公网域名而是内部域名。再看Issuer: CN Internal CA说明这是私有CA签发的证书。第三步搜索私有CA根证书。过滤http contains Internal CA无果过滤tls.handshake.certificate导出所有证书openssl x509 -in cert2.pem -text -noout | grep CN 发现第二个证书Subject: CN Internal CAIssuer: CN Internal CA——自签名根证书导出该根证书用openssl x509 -in ca.pem -pubkey -noout ca.pub提取公钥。但我们需要私钥。回到Client Hello注意到Random字段32字节随机数其中前4字节是时间戳Unix时间后28字节是随机数。我用tshark -r bank_traffic.pcap -Y tls.handshake.type 1 -T fields -e tls.handshake.random | head -n 1得到1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f前4字节1e2f3a4b0x1e2f3a4b506,602,059秒 2017-05-12 10:34:19 UTC——这时间戳与证书有效期2023年不符说明Client Hello是重放的不可能是出题人故意设的陷阱。真正突破口在tls.handshake.extensions.supported_groups。展开该字段看到supported_groups: x25519, secp256r1, secp384r1但x25519是椭圆曲线而TLS_RSA_WITH_AES_128_CBC_SHA是RSA套件二者不匹配。这意味着客户端虽然支持ECDHE但选择了RSA套件——为什么答案在tls.handshake.extensions.key_share。该扩展在TLS 1.3中强制但在TLS 1.2中是可选的。此Client Hello中key_share为空说明客户端不支持或禁用ECDHE。而服务端若只配置了RSA套件则无法拒绝——这就是漏洞。但私钥在哪我重新审视所有HTTP流量发现一个GET请求GET /ca/root.crt HTTP/1.1响应是200 OKContent-Type: application/x-x509-ca-cert。导出该响应体file root.crt显示“PEM certificate”openssl x509 -in root.crt -text -noout确认是同一Internal CA。再看/ca/private.key——404。等等/ca/目录下可能有其他文件。过滤http.request.uri contains /ca/发现GET /ca/backup.key.enc HTTP/1.1响应200 OKContent-Type: application/octet-stream。导出backup.key.encfile backup.key.enc显示“data”。strings backup.key.enc | head输出Salted__K}^ ~!#$%()*,-./0123456789:;?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}Salted__是OpenSSL加密文件魔数。尝试用openssl enc -d -aes-256-cbc -salt -in backup.key.enc -out private.key提示输入密码。密码在哪回到Client Hellotls.handshake.random的最后8字节7a8b9c0d1e2f转为ASCIIz\r\x1e/不可读。再看Server Hello的Randomtshark -r bank_traffic.pcap -Y tls.handshake.type 2 -T fields -e tls.handshake.random得到a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2取前8字节a1b2c3d4e5f6a7b8echo a1b2c3d4e5f6a7b8 | xxd -r -p | md5sume3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855太长。简化echo -n a1b2c3d4 | sha256sum—— 仍不对。灵光一现/ca/目录下可能有README。过滤http.request.uri contains README找到GET /ca/README.txt响应体Backup key encrypted with password: the time is nowthe time is nowopenssl enc -d -aes-256-cbc -salt -in backup.key.enc -out private.key -k the time is now成功解密。cat private.key-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA...至此私钥到手。在Wireshark中Edit → Preferences → Protocols → TLS → RSA keys list添加127.0.0.1,443,http,./private.key重启Wireshark所有TLS流量自动解密HTTP明文浮现POST /login HTTP/1.1usernameadminpasswordflag{tls_rsa_key_exchange_is_broken}。4.2 TLS握手包字段的“微表情”分析法TLS握手包不是冰冷的数据每个字段都在传递信号。我总结出一套“微表情”解读法针对Client Hello和Server Hello字段正常表现异常信号CTF利用方向Random(32字节)前4字节为当前Unix时间后28字节真随机时间戳与包捕获时间相差5分钟后28字节有重复模式如全零、递增时间戳可推断系统时钟重复模式暗示PRNG缺陷可预测密钥Session ID(0或32字节)新会话为空复用会话为32字节随机ID非空但长度≠32或所有Client Hello的Session ID相同Session ID复用可关联用户固定ID暗示会话劫持Cipher Suites列表长度≥3含现代套件如TLS_AES_128_GCM_SHA256仅含老旧套件如TLS_RSA_WITH_RC4_128_MD5或含已废弃套件如TLS_DH_anon_WITH_3DES_EDE_CBC_SHA老旧套件易受POODLE攻击匿名套件无认证可中间人Compression Methods通常00null01DEFLATE或其他DEFLATE
http://www.rkmt.cn/news/1383968.html

相关文章:

  • AI Agent 面试题 958:LangChain框架的核心架构和设计理念详解
  • 几何操作与语义操作映射边界:自指认知几何学的形式化体系(世毫九实验室原创研究)
  • 蓝桥杯软件测试备考:用Python+Selenium搞定Web自动化那些高频考点(附完整代码)
  • 宁波梅雨季来临,房屋漏水抓紧修!2026最新房屋漏水维修公司TOP5调研盘点!卫生间免砸砖防水、楼顶外墙、阳光房+地下室渗漏解决方案解析 - 防水百科
  • 基于ESP32与Telegram Bot的物联网互动设备开发实战
  • AI Agent 面试题 956:Agent操作系统的网络通信和服务发现
  • 基于ESP32与Linky电表打造三相智能电力负荷管理器
  • 泰州梅雨季来临,房屋漏水抓紧修!2026最新房屋漏水维修公司TOP5调研盘点!卫生间免砸砖防水、楼顶外墙、阳光房+地下室渗漏解决方案解析 - 防水百科
  • 虚幻5 Unrealsharp EditorTick + Nanite雪地踩坑记录
  • Jira 自动化语言编码双计数器机器:实现加法与斐波那契数列运算,具备图灵完备性
  • 2025_NIPS_Stable and low-precision training for large-scale vision-language models
  • 为什么92.6%的DeepSeek API调用未启用幻觉抑制?3个被忽略的config参数,今天起永久降低幻觉率
  • 树莓派安装jdk、tomcat、vnc、谷歌浏览器开机自启等环境配置
  • 电力测控实战:用Win10计算器搞定RCR低通滤波器的幅频与相移分析(附误差影响图)
  • 告别手写布局:Tkinter Designer如何革新Python GUI开发体验?
  • AmazingHand灵巧手 - 【官方示例】调试教程
  • 2026年国内金融科技五大排行:融资担保信息系统公司深度解析 - 十大品牌榜
  • 鸣潮工具箱WaveTools:游戏体验优化的终极免费解决方案
  • 小学期第十一周学习笔记
  • 【数据结构与算法】数据结构基础——栈和队列
  • HarmonyOS 6学习:解决图片放大后无法移动至边缘的matrix4矩阵变换技巧
  • composer require hyperf/cache的庖丁解牛
  • 从OpenClaw、Palantir、SpaceX,看颠覆式创新的四个层次(3)
  • Lampiao靶机实战:Drupalgeddon2与脏牛漏洞利用全链路解析
  • UICC 架构与卡状态机详细设计
  • NsEmuTools:5分钟搭建NS模拟器环境的终极免费工具
  • LongLLMLingua 核心原理:对比困惑度实现提示词压缩
  • 对比按量计费与Token Plan,我的月度成本管理心得
  • Java语法进阶篇
  • 开源权重、商业闭源、衍生模型——DeepSeek知识产权边界全解析,一文厘清5类侵权陷阱