盤(pán):從文件識(shí)別到LSB隱寫(xiě)的完整解題鏈)
1. 初見(jiàn)題目從簽到題里嗅到的MISC氣息1.1 為什么MISC常以簽到題出現(xiàn)每次CTF比賽開(kāi)始簽到題總是最讓人又愛(ài)又恨的一類。愛(ài)的是它送分恨的是如果連簽到題都卡住心態(tài)會(huì)直接崩掉。MISC方向尤其喜歡出現(xiàn)在簽到題里因?yàn)镸ISC考察的是信息收集、文件分析、隱寫(xiě)識(shí)別這些基本功不需要太多高深算法反而能快速篩出“會(huì)不會(huì)玩”的人。SUCTF 2019的這道MISC簽到題光看名字就知道是給選手熱身的。但熱身不等于沒(méi)有套路事實(shí)上很多簽到題反而是最考驗(yàn)“基礎(chǔ)操作是否熟練”的試金石。我見(jiàn)過(guò)不少打了一段時(shí)間CTF的人上來(lái)就上重型工具掃結(jié)果連file命令都忘記用在簽到題上折騰半小時(shí)最后發(fā)現(xiàn)就是沒(méi)看文件頭。說(shuō)白了MISC簽到題的核心邏輯就三句話先看這是什么再拆開(kāi)看看有沒(méi)有東西最后想辦法還原成能讀的flag。這道題在網(wǎng)上被收錄進(jìn)NSSCTF平臺(tái)的MISC分類里和BUUCTF的“通關(guān)之路MISC Part 14”之類的內(nèi)容一起成為新手刷題列表里的???。很多人以為簽到題隨便復(fù)現(xiàn)一下就能過(guò)實(shí)際上它是個(gè)很好的入門(mén)切片能幫你把文件類型識(shí)別、binwalk分離、二維碼修復(fù)、LSB隱寫(xiě)這幾個(gè)MISC高頻考點(diǎn)一次性串起來(lái)。這也是我決定把它拆開(kāi)寫(xiě)一篇完整復(fù)盤(pán)的原因——它的難度不高但覆蓋的知識(shí)點(diǎn)密度相當(dāng)高。1.2 拿到題目后的第一反應(yīng)與信息收集清單先說(shuō)拿到題目后的第一反應(yīng)。簽到題通常會(huì)給一個(gè)附件格式無(wú)非就是圖片、壓縮包、文本或者一個(gè)看起來(lái)人畜無(wú)害的二進(jìn)制文件。SUCTF 2019這道題網(wǎng)上流傳的版本一般是給了一張圖片但我建議新手不要依賴任何“題目原樣”而是練就一套條件反射式的信息收集流程。我在實(shí)際做題時(shí)會(huì)把信息收集分成四步第一步先看文件名和后綴名注意有沒(méi)有雙后綴比如flag.png.txt這種很多出題人喜歡在文件名上做文章。第二步用file命令看真實(shí)文件類型不要相信后綴。第三步看文件大小如果一個(gè)圖片只有幾十KB但分辨率奇高多半里面塞了額外數(shù)據(jù)如果壓縮包只有幾百字節(jié)可能是偽加密或空包。第四步用strings掃描可打印字符串快速判斷有沒(méi)有明顯的flag、文件名、提示信息。這四步做完你基本能判斷這道題的“性格”。簽到題不會(huì)藏太深但也不會(huì)直接寫(xiě)在腦門(mén)上。比如有些題把flag放在圖片的EXIF信息里你用strings一跑就能看到flag{}字樣那就不用繼續(xù)往下拆了。有些題則會(huì)在文件名里留下線索比如secret.jpg或者qr_code.png直接引導(dǎo)你往二維碼方向想。我見(jiàn)過(guò)很多人一上來(lái)就右鍵圖片用瀏覽器打開(kāi)看得一臉懵然后開(kāi)始懷疑自己是不是沒(méi)裝什么工具。其實(shí)這很正常因?yàn)镸ISC的解題思路是靠工具鏈和觀察力一點(diǎn)點(diǎn)堆出來(lái)的。簽到題的“簡(jiǎn)單”只體現(xiàn)在最終答案藏得不深但過(guò)程依然需要你掌握一套標(biāo)準(zhǔn)的操作流程。2. 開(kāi)箱流程文件識(shí)別與基礎(chǔ)分離實(shí)操2.1 先用file和010 Editor給文件“驗(yàn)明正身”拿到附件后我建議永遠(yuǎn)不要信任后綴名。出題人最喜歡干的事就是把一個(gè)zip壓縮包改成jpg后綴或者把一個(gè)圖片文件的前幾個(gè)字節(jié)改壞讓你以為它不是圖片。所以第一件事就是進(jìn)終端跑一條命令file attachment.jpg如果系統(tǒng)告訴你這是JPEG image data那基本正常如果告訴你這是Zip archive data那恭喜后面十有八九是要解壓如果告訴你這是data那就要小心了可能是文件頭被破壞也可能是自定義格式。光看file還不夠我習(xí)慣再用010 Editor或Winhex打開(kāi)文件直接看十六進(jìn)制頭和尾。JPEG文件頭是FF D8 FF文件尾是FF D9PNG文件頭是89 50 4E 47文件尾是AE 42 60 82。只要頭部和尾部對(duì)不上就有問(wèn)題。這道SUCTF簽到題我是怎么判斷的說(shuō)實(shí)話網(wǎng)上復(fù)現(xiàn)的版本有很多有的附件是一張二維碼圖片有的附件是一個(gè)壓縮包。但不管what用上述方法檢查一遍永遠(yuǎn)是第一步。我試過(guò)在其中某個(gè)復(fù)現(xiàn)包里遇到一個(gè)情況后綴名是png但file識(shí)別為JPEG說(shuō)明出題人只是改了個(gè)后綴實(shí)際內(nèi)容完全不變。如果你不查直接拿PNG解析工具去讀大概率會(huì)報(bào)錯(cuò)。再說(shuō)一個(gè)細(xì)節(jié)有些文件末尾會(huì)跟著一串多余的十六進(jìn)制數(shù)據(jù)用肉眼看不出來(lái)但用Hex編輯器拉到最底部就能發(fā)現(xiàn)。比如正常的JPEG圖片在FF D9之后不應(yīng)該再有內(nèi)容如果后面還跟著一堆字節(jié)那八成是附加了隱藏文件或注釋信息。判斷方法很簡(jiǎn)單——binwalk會(huì)直接告訴你。2.2 binwalk與foremost把藏在文件里的東西挖出來(lái)確認(rèn)文件類型之后下一步就該做“拆解”了。MISC題里最常見(jiàn)的出題方式就是把一個(gè)秘密文件“藏”在另一個(gè)載體文件后面利用的正是文件拼接或附加數(shù)據(jù)的特性。這時(shí)候兩個(gè)老牌工具幾乎必用binwalk和foremost。binwalk是一個(gè)固件分析工具但用在MISC里也是個(gè)拆文件的神器。它的基本原理是掃描文件中的各種文件簽名magic bytes比如PKzip、7Z、PNG、JPEG、RAR等等。只要發(fā)現(xiàn)這些簽名它就會(huì)報(bào)告偏移量。我在這道題上的操作是先運(yùn)行binwalk attachment.png如果輸出里能看到類似0x100000 Zip archive data的行那就說(shuō)明圖片后面藏了一個(gè)壓縮包。下一步直接binwalk -e attachment.png它會(huì)自動(dòng)把識(shí)別出來(lái)的文件提取出來(lái)。這里有一個(gè)坑binwalk -e有時(shí)候會(huì)提取失敗特別是文件偏移量比較奇葩或者有多個(gè)嵌套時(shí)。這時(shí)候別硬剛換foremost試試。foremost是一個(gè)基于文件頭尾特征進(jìn)行數(shù)據(jù)雕刻的工具它的優(yōu)勢(shì)在于不依賴文件系統(tǒng)結(jié)構(gòu)而是直接在原始數(shù)據(jù)流里按特征“扣”文件。用法也很簡(jiǎn)單foremost attachment.png -o output_dir它會(huì)按類別把分離出來(lái)的文件放在output_dir下的子目錄里。我這邊實(shí)測(cè)過(guò)如果是JPEG里藏PNG或者PNG里藏zipforemost基本都能成功“雕刻”出來(lái)。再說(shuō)一個(gè)更進(jìn)階的玩法如果binwalk和foremost都拆不出東西但你在十六進(jìn)制里又確實(shí)看到了可疑的壓縮包簽名那有可能是文件尾部被篡改或者中間插入了干擾字節(jié)。我通常會(huì)手動(dòng)把從PK開(kāi)始到壓縮包尾部的那段數(shù)據(jù)復(fù)制出來(lái)另存成一個(gè)新文件再嘗試解壓。雖然笨但有時(shí)比工具更可靠。提示做完分離后,一定要挨個(gè)檢查提取出的文件別只看壓縮包。有時(shí)候真正的flag藏在一個(gè)看似無(wú)關(guān)的文本文件或者小圖片里錯(cuò)過(guò)了就要回頭重新跑一遍。3. 二維碼與圖片隱寫(xiě)簽到題最常見(jiàn)的兩個(gè)坑3.1 補(bǔ)全二維碼從“殘缺”到完整識(shí)別如果你拿到的附件是一張二維碼圖片那簽到題的難度基本就固定在“定位腳修正”和“容錯(cuò)率”這個(gè)級(jí)別了。我見(jiàn)過(guò)很多復(fù)現(xiàn)版的SUCTF 2019簽到題網(wǎng)上流傳的解題過(guò)程里有一部分就是在二維碼上做文章。所謂補(bǔ)全二維碼通常有兩種情況。一種是二維碼圖片被裁剪了一部分比如把右下角的定位腳Finder Pattern切掉或者把中間區(qū)域挖掉一塊。這種情況直接用手機(jī)掃碼肯定失敗因?yàn)槎S碼在解碼時(shí)需要至少能識(shí)別出三個(gè)定位腳來(lái)確認(rèn)方向和坐標(biāo)。另一種是二維碼上疊加了干擾元素比如紅色半透明圖案、噪點(diǎn)或者部分像素點(diǎn)被篡改。這時(shí)候需要先清理干擾再補(bǔ)全信息。補(bǔ)全的套路也很固定。如果你懂得二維碼的容錯(cuò)機(jī)制就知道即使損失最多30%的信息取決于糾錯(cuò)等級(jí)標(biāo)準(zhǔn)解碼器依然能恢復(fù)出全部?jī)?nèi)容。所以很多時(shí)候人類覺(jué)得“亂七八糟”的二維碼解碼器其實(shí)能讀出來(lái)。我建議拿到二維碼圖片后先不要急著用畫(huà)圖工具修先用手機(jī)或者ZXing/CQReader等庫(kù)掃一次說(shuō)不定真的能直接出結(jié)果。如果掃不出來(lái)再用工具做預(yù)處理。最簡(jiǎn)單的辦法是調(diào)整對(duì)比度和銳化。二維碼是黑白二值圖像只要把灰度圖中高于某個(gè)閾值的像素全置為黑色低于閾值的全置為白色往往就能去掉疊加的半透明干擾。這個(gè)過(guò)程用OpenCV寫(xiě)也就幾行代碼import cv2 img cv2.imread(qr.png, cv2.IMREAD_GRAYSCALE) _, th cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) cv2.imwrite(qr_th.png, th)我實(shí)測(cè)過(guò)這個(gè)閾值處理在大多數(shù)“二維碼半透明遮擋”的題目里都非常有效。另外還可以試試將圖片進(jìn)行形態(tài)學(xué)膨脹或腐蝕操作用來(lái)消除離散噪點(diǎn)但注意別把二維碼的模塊邊界搞模糊了。補(bǔ)充一個(gè)細(xì)節(jié)二維碼的三個(gè)定位腳如果被故意涂白或切掉但周圍還有其他完整的模塊信息可以用另一個(gè)完整的定位腳復(fù)制粘貼過(guò)去。工具上可以用PhotoShop或者Python里模塊級(jí)別的復(fù)制操作。只要三個(gè)定位腳完整解碼概率會(huì)大幅提升。3.2 別急著掃先看看是不是LSB隱寫(xiě)二維碼是MISC最愛(ài)但比二維碼更愛(ài)出鏡的其實(shí)是LSB隱寫(xiě)。所謂的LSB隱寫(xiě)全稱Least Significant Bit就是把數(shù)據(jù)藏在圖像每個(gè)像素的最低有效位上。一張8位深度的圖片每個(gè)RGB通道有8個(gè)bit如果只改動(dòng)最低位的值人眼幾乎看不出任何區(qū)別。攻擊者可以把一個(gè)秘密文件的二進(jìn)制數(shù)據(jù)按位拆分依次寫(xiě)入這些最低位。很多新手一看到圖片第一反應(yīng)就是掃二維碼結(jié)果掃出來(lái)一串亂碼。實(shí)際上出題人可能根本沒(méi)打算讓你掃而是把flag通過(guò)LSB隱寫(xiě)藏在了圖片像素里。SUCTF 2019這個(gè)MISC簽到題的不同復(fù)現(xiàn)版本里確實(shí)出現(xiàn)過(guò)“圖片二維碼LSB隱寫(xiě)”的組合玩法。檢測(cè)LSB隱寫(xiě)最直觀的工具是Stegsolve。打開(kāi)圖片后不停切換RGB通道的最低有效位視圖如果某個(gè)通道或某幾個(gè)通道的LSB平面出現(xiàn)了異常規(guī)律比如不是隨機(jī)噪點(diǎn)而是有序的紋路或字母形狀那基本就是藏了東西。操作路徑是Analyse - File Format先看格式然后Analyse - Data Extract選擇RGB、Alpha各通道的0或1位提取二進(jìn)制數(shù)據(jù)再嘗試按文本或圖片方式解析。我第一次用Stegsolve時(shí)犯過(guò)一個(gè)低級(jí)錯(cuò)誤——忘了勾選“Bit Order LSB first”結(jié)果提取出來(lái)的全是亂碼。后來(lái)養(yǎng)成習(xí)慣先試LSB first least significant bit再試MSB first多換幾個(gè)組合。還有一個(gè)高效的命令行工具叫zsteg專門(mén)檢測(cè)PNG和BMP的LSB隱寫(xiě)。用法極簡(jiǎn)zsteg -a attachment.png它會(huì)把所有可能的通道和位計(jì)劃組合都跑一遍自動(dòng)輸出可打印字符串或者隱藏文件。如果它輸出的內(nèi)容里出現(xiàn)了flag{...}那連Stegsolve都省了。唯一需要注意的是zsteg對(duì)JPEG無(wú)效因?yàn)镴PEG是有損壓縮不適合LSB隱寫(xiě)。注意看到圖片別急著掃二維碼也別急著上隱寫(xiě)工具。先按“文件識(shí)別—分離—二維碼—LSB”這個(gè)層級(jí)一步步來(lái)。MISC簽到題的難點(diǎn)不是算法而是會(huì)不會(huì)按順序排查。4. 實(shí)戰(zhàn)復(fù)盤(pán)從堵車到通車的完整解題路徑4.1 我在這道題上踩過(guò)的三個(gè)坑這里想聊點(diǎn)實(shí)際的。我在刷NSSCTF上的這道題以及各種平臺(tái)上無(wú)數(shù)個(gè)同款簽到題時(shí)踩過(guò)的坑基本可以總結(jié)成三類新手應(yīng)該能感同身受。第一個(gè)坑是“死磕圖片本身忽略了文件尾部”。我記得有一次拿到一個(gè)看起來(lái)完全正常的PNG圖片用Stegsolve掃了半天LSB也沒(méi)發(fā)現(xiàn)東西。后來(lái)只是習(xí)慣性跑了一下strings發(fā)現(xiàn)文件末尾有一串Base64編碼。解碼后發(fā)現(xiàn)是flag的十六進(jìn)制形式。那次的教訓(xùn)是先掃描文件整體數(shù)據(jù)再做像素級(jí)隱寫(xiě)分析。把順序搞反純屬浪費(fèi)時(shí)間。第二個(gè)坑是“二維碼損壞時(shí)過(guò)度手工修圖”。有一回二維碼左上角定位腳被一個(gè)小圖標(biāo)遮住我直接在畫(huà)圖工具里用顏色填充把定位腳畫(huà)了出來(lái)結(jié)果還是不識(shí)別。后來(lái)才知道二維碼除了要有三個(gè)定位腳還需要周圍的留白區(qū)域安靜區(qū)如果那里被填了黑色模塊照樣解碼失敗。正確做法是先涂白再?gòu)钠渌暾ㄎ荒_復(fù)制過(guò)來(lái)或者干脆用Python處理像素。第三個(gè)坑是“忘記檢查圖片的Alpha通道”。有一個(gè)版本的題目PNG文件的RGB通道看起來(lái)什么都沒(méi)有但Alpha通道透明度里藏了一個(gè)完整的二維碼。如果你用普通看圖軟件打開(kāi)只會(huì)看到一張普通的黑白圖但用Stegsolve切開(kāi)通道立刻原形畢露。這個(gè)坑坑了不少人說(shuō)到底還是工具使用不全面。4.2 從flag格式反推CTF出題人思路如果你在解題過(guò)程中已經(jīng)拿到了部分線索但還差最后一步這時(shí)候可以嘗試從flag格式反推出題人的意圖。大部分比賽的flag格式是flag{...}有些是SUCTF{...}。簽到題的出題人通常會(huì)保證flag字符串是完整、可見(jiàn)、可識(shí)別的所以他們不會(huì)用太復(fù)雜的加密頂多來(lái)一次Base64或十六進(jìn)制轉(zhuǎn)碼。我看到很多新手拿到一段666c61677b...這種十六進(jìn)制不知道是什么。其實(shí)只要認(rèn)準(zhǔn)666c61677b這個(gè)頭部它對(duì)應(yīng)的ASCII就是flag{。同理ZmxhZ3s是Base64編碼下的flag{。如果你在提取出的數(shù)據(jù)里看到這些特征前綴后面的解碼方向基本就定了。另一種常見(jiàn)形態(tài)是反色二維碼。也就是黑白顛倒的二維碼掃碼失敗。這時(shí)候只要在畫(huà)圖工具里反相快捷鍵CtrlI就能得到正常的二維碼。反色這個(gè)操作也經(jīng)常被出題人用在“二維碼PS疊加”的場(chǎng)景比如原圖是白色二維碼疊加在黑色背景上再用某種混合模式導(dǎo)致掃描端識(shí)別不了。遇到這種情況我的處理原則是先做圖像增強(qiáng)處理比如二值化、取反、旋轉(zhuǎn)、縮放然后交給解碼庫(kù)去試。如果這些基礎(chǔ)操作都試過(guò)了還是不行那就要考慮是不是二維碼本身其實(shí)是另一個(gè)圖片的縮略圖或者二維碼內(nèi)部還藏了一個(gè)小二維碼。提示拿到任何疑似被處理過(guò)的二維碼先在以下組合里試原圖直接掃描、反色后掃描、旋轉(zhuǎn)90/180/270度后掃描、縮放2倍后掃描。這四個(gè)組合能解決八成以上的二維碼識(shí)別問(wèn)題。5. 工具選型與避坑心得寫(xiě)給新手的實(shí)戰(zhàn)建議5.1 常用MISC工具清單與選擇邏輯很多新手在入門(mén)MISC時(shí)最大的困惑不是題目難而是不知道用什么工具。我給你列一個(gè)我在日常解題中真正會(huì)用的工具清單并直接說(shuō)明每種工具的使用場(chǎng)景file查看文件真實(shí)類型的最快方式。strings提取文件中的可打印字符串適合找顯式flag。binwalk批量掃描和分離內(nèi)嵌文件的首選。foremost當(dāng)binwalk分離失敗時(shí)的備選雕刻方案。010 Editor/Winhex十六進(jìn)制查看和手動(dòng)修補(bǔ)文件頭。Stegsolve圖像隱寫(xiě)分析尤其是LSB通道檢查。zsteg命令行快速檢測(cè)PNG/BMP的LSB隱寫(xiě)。QR Research/ZXing二維碼識(shí)別與解析。Audacity如果題目是音頻可以用它看頻譜圖。Python批量處理圖像、編碼轉(zhuǎn)換、隱寫(xiě)腳本的終極靈活工具。工具不在多關(guān)鍵是要知道每個(gè)工具的邊界在哪里。比如binwalk不是萬(wàn)能的它有些時(shí)候會(huì)漏掉無(wú)簽名頭的附加數(shù)據(jù)這時(shí)候foremost反而能通過(guò)文件頭雕刻出來(lái)。但foremost也有局限它對(duì)碎片化文件比如刪除過(guò)的文件殘留恢復(fù)能力較差而這些場(chǎng)景又需要scalpel或者手工數(shù)據(jù)恢復(fù)。我建議新手別急著把所有工具都裝一遍而是先把file、strings、binwalk、Stegsolve這四個(gè)用熟。MISC簽到題里90%的解法都在這四個(gè)工具的自由組合里。工具鏈選型的邏輯應(yīng)該是先用信息收集工具做廣度掃描再用隱寫(xiě)分析工具做縱深檢測(cè)最后用解碼工具還原flag。5.2 三個(gè)讓我少走彎路的小習(xí)慣第一個(gè)好習(xí)慣是做完一個(gè)操作馬上把結(jié)果記錄在筆記里。我見(jiàn)過(guò)很多人在終端里跑了一堆命令最后忘了哪個(gè)輸入出了flag。更常見(jiàn)的是發(fā)現(xiàn)了一個(gè)可疑的十六進(jìn)制數(shù)據(jù)但沒(méi)有第一時(shí)間保存結(jié)果后面找不回來(lái)。我把整個(gè)解題過(guò)程都寫(xiě)進(jìn)一個(gè)Markdown文件文件名是題目名內(nèi)容包括每條命令、關(guān)鍵輸出、出現(xiàn)過(guò)的所有字符串。這樣不僅方便復(fù)盤(pán)還能在你卡住時(shí)回頭檢查有沒(méi)有漏掉線索。第二個(gè)好習(xí)慣是不要在同一個(gè)工具上鉆牛角尖超過(guò)15分鐘。如果binwalk沒(méi)掃出來(lái)就換foremost如果zsteg沒(méi)跑出來(lái)就換Stegsolve手動(dòng)看通道如果二維碼掃不出來(lái)就用Python做圖像預(yù)處理再試。工具只是實(shí)現(xiàn)思路的手段MISC真正考的是思路而不是某個(gè)軟件的操作技巧。卡住時(shí)跳出原工具換一個(gè)視角往往能豁然開(kāi)朗。第三個(gè)好習(xí)慣是用Python做自動(dòng)化嘗試。很多時(shí)候手動(dòng)點(diǎn)Stegsolve的各個(gè)通道很浪費(fèi)時(shí)間你可以寫(xiě)一個(gè)幾十行的腳本循環(huán)遍歷所有bit組合自動(dòng)保存提取結(jié)果。雖然這樣可能產(chǎn)生一堆文件但配合grep -r flag能快速鎖定目標(biāo)。例如讀取PNG每個(gè)像素的R、G、B通道分別取最低位拼合后嘗試轉(zhuǎn)為字符串from PIL import Image img Image.open(target.png).convert(RGB) pixels list(img.getdata()) bits .join(str(pixel[ch] 1) for pixel in pixels for ch in range(3)) # 每8位轉(zhuǎn)一個(gè)字節(jié) data int(bits, 2).to_bytes(len(bits)//8, byteorderbig) print(data[:100])當(dāng)然這是最基礎(chǔ)的LSB提取方式真實(shí)題目可能涉及不同通道和不同位的組合。你可以用兩層循環(huán)遍歷通道和位編號(hào)自動(dòng)生成多個(gè)候選結(jié)果。這也是為什么Python在MISC里越來(lái)越重要——它讓你從手工點(diǎn)擊中解放出來(lái)快速覆蓋大多數(shù)可能的空間。6. 尾聲簽到題背后的真正價(jià)值這道題我前前后后復(fù)現(xiàn)過(guò)好幾遍每次復(fù)現(xiàn)都會(huì)有些新感受。第一遍是順著網(wǎng)上的題解一步步點(diǎn)下來(lái)第二遍是嘗試不看題解自己做第三遍是思考如果我是出題人會(huì)怎么改。每次復(fù)現(xiàn)都能發(fā)現(xiàn)一些原來(lái)沒(méi)注意到的細(xì)節(jié)。比如同一張圖片換個(gè)角度看可能中間區(qū)域的二維碼就是被藏在Alpha通道里同一個(gè)壓縮包多試一次foremost可能就會(huì)多出一個(gè)小文件。我個(gè)人比較建議新人在刷題時(shí)別太追求“刷過(guò)多少道題”而是每道題都盡量拆解得徹底。簽到題看似簡(jiǎn)單其實(shí)包含了一個(gè)完整的分析閉環(huán)識(shí)別文件類型、分離附加數(shù)據(jù)、圖像隱寫(xiě)檢測(cè)、二維碼修復(fù)、編碼解碼。這個(gè)閉環(huán)里的每個(gè)環(huán)節(jié)日后在中等難度和困難難度的CTF題目中都會(huì)反復(fù)出現(xiàn)。把一道簽到題嚼透比囫圇吞棗做十道題更有用。最后再分享一個(gè)小技巧當(dāng)你拿到一道MISC題目毫無(wú)頭緒時(shí)先問(wèn)自己三個(gè)問(wèn)題——“文件本身正常嗎文件里面還藏著別的文件嗎圖片像素或者音頻波形里有沒(méi)有異常信息”這三個(gè)問(wèn)題分別對(duì)應(yīng)文件分析、文件分離、隱寫(xiě)分析三條路。絕大多數(shù)MISC題目的解法都在這三條路之內(nèi)簽到題尤其如此。把這三個(gè)問(wèn)題練成條件反射以后不管遇到什么MISC題目至少不會(huì)完全懵圈。