日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wechall.net/stegano 解题心得

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wechall.net/stegano 解题心得 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/* 轉載請注明出處:http://www.cnblogs.com/Martinium/p/wechall_stegano.html */


  最近迷上了 www.wechall.net 網站,里面都是些與計算機相關的題目挑戰。題目又分很多類型,例如:加密與解密、隱寫術、網絡攻防、趣味編程、數學邏輯等。題目有的簡單,有的很難,需要一些知識和技巧。與其他題目挑戰的網站不同的是,在其他類似性質的網站注冊的用戶可以綁定到 WeChall?網站,然后?WeChall 提供排名信息,而且也分得很細,什么按總分全球排名、什么在自己國家的排名、什么解答某種語言網站題目的排名等。可以從解題的人數判斷題目的難易程度,有興趣的朋友可以去注冊,解題中也能學到很多知識。國內的學校和公司也有舉辦網絡攻防大賽。與玩 ACM 解題不同的是:ACM 提供給定的輸入和輸出,中間的黑盒部分需要你來完成,需要提供一種更好更快的算法;這類攻防挑戰題目可能需要更多的計算機知識,從一堆垃圾數據中發現有用的信息、越過不同的障礙終于發現答案等。

  注:Steganography?是隱寫術,它與 Cryptography (密碼術)是不同的。

題目1?stegano1?給了一張彩色的 BMP 圖片,讓你從中發現答案。

  不管是圖片、音頻文件,還是二進制文件,首先都可以嘗試以文本文件打開,查看是否存在可疑的字符串。文件太大了就不要這么做了,鼠標會轉圈好久的。
圖片很小,才 102 bytes。將圖片文件拖到文本編輯器里,就可以看到答案了。Notepad++ 是 Windows 上最好的文本編輯器,沒有之一。體積小巧,功能齊全。
Linux 上用 gedit 打開,或者使用 vim 命令,輸入 :%!xxd 切換到二進制模式,答案顯而易見。
xxd 是另外一個命令,以十六進制現實內容。再輸入 :%!xxd -r 命令執行,切換到原來的摸樣(r 是 reverse )。
注意 vim 的 -b 選項,是否以二進制模式打開。圖片是二進制文件,所以要加此選項,否則處理會有問題。
還有一個命令 strings,來的更快,直接輸出文件中可打印的字符,通常用來顯示二進制中的字符串常量。
strings 命令的選項 -n VALUE 或 --bytes=VALUE 選項控制輸出連續字符的最短長度,這個的默認值 VALUE 是 4。
還有 -t RADIX 或 --radix=RADIX 選項以后也會用上的,用來顯示每個字符串的偏移量。C++ 的 static 字符串變量需要這個偏移量索引字符串。

  你我都是做題的,但是怎么出題呢?破解別人的軟件,寫一個序列號注冊機相對容易。但是如何寫一個加殼、混淆的難以破解的程序就有點難度了,畢竟建房子拆房子簡單。
我們需要了解一下 BMP 文件格式,BMP 圖片很占空間,沒有壓縮,或者用 RLE (Run-Length Encoding)壓縮一下,體積大所以很少在網絡上傳播。 BITMAPFILEHEADER,BITMAPINFOHEADER,

const char* buffer = "put your message here";FILE *file = fopen(path, "wb");if (!file){fprintf(stderr, "can't open %s\n", path);return false;}BITMAPFILEHEADER file_header;BITMAPINFOHEADER info_header;file_header.bfType = (WORD)('B'|'M'<<8); // Windows BMP file tagfile_header.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+len;file_header.bfReserved1 = 0;file_header.bfReserved2 = 0;file_header.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);info_header.biSize = sizeof(BITMAPINFOHEADER);info_header.biWidth = width;info_header.biHeight = height;info_header.biPlanes = 1;info_header.biBitCount = 24;info_header.biCompression = 0; // BI_RGB, An uncompressed format.info_header.biSizeImage = len; // size in bytes. This may be set to zero for BI_RGB bitmapsinfo_header.biXPelsPerMeter = 0;info_header.biYPelsPerMeter = 0;info_header.biClrUsed = 0;info_header.biClrImportant = 0;fwrite(&file_header, sizeof(file_header), 1, file);fwrite(&info_header, sizeof(info_header), 1, file);fwrite(buffer, len, 1, file);fclose(file);

  這樣寫,太容易被發現了。我們可以通過對字符串先加密再隱寫,或者用循環移位、異或操作增加難度。
  知道 BMP 格式支持顏色索引模式(GIF、PNG 格式也支持),圖片里會有一個調色板用來存儲使用的顏色值,相當于一個數組存儲 RGB 值,然后圖片只用數組索引值找到對應的顏色并顯示出來,于是你也可以這樣隱藏你的信息到圖片中。我們用兩種顏色作圖,在白紙寫黑字,存儲為索引模式圖,于是調色板會有兩個值 #000000 和 #FFFFFF,顏色只需一位 0/1 就可以表示黑白顏色了(查表法從24位壓縮到1位,這個壓縮是可觀的,其實還可以用 RLE 行程編碼對圖片繼續無損壓縮)。將數組中的 #000000 值篡改成 #FFFFFF,也就是黑色改成白色,其他數據不用動,保存后用再打開圖片看發現,字消失了!寫一些想說的話,然后把圖片發給暗戀對象,對方會說你怎么發了一張空白圖片,于是留給對方想象的空間。說了這么多,自己動手嘗試一下吧~

?

題目2 Stegano Attachment?
答案在圖片中嗎?不,答案在附件(attachment)里。等你做出了這道題,就明白前面一句話的意思。有時候,題目會給出提示容易忽視的信息,而這個可能就是解題的關鍵。
稍微留心一下圖片?http://www.wechall.net/challenge/training/stegano/attachment/attachment.php?,是不是很壞?后綴被人改成 PHP 網頁后綴。用文本編輯軟件打開,發現一堆亂碼。不同文件會有不同的文件頭,即不同的 Magic Number,如上面的 BMP 格式圖片的 “BM” 標志,PNG 圖片有八字節頭 “\x89PNG\r\n\x1A\n”,用 Visual Studio 調式 C++ 代碼出現很多的“燙燙燙燙”,其實是編譯期初始化棧空間為 “\xCC\xCC\xCC\xCC”(0xCC 對應 x86 的 INT 3 中斷指令,你應該知道為什么這么做),編譯 Java 文件生成的 .class 文件的文件頭有 “CAFEBABE”。從 attachment.php 里我們看到了字符 "JFIF",應該就是 JPG 圖片了。更好的方法是用 linux 上的 file 命令查看文件類型,文件名后綴隨你怎么該。改成 .jpg 后綴后,打開圖片后,是電影 Ghostbusters (1984)?的海報,我們追到了這里,電影我沒看過,看介紹好像很不錯的樣子。一邊下載一邊解題吧~

martin@M2037:~/Desktop$ file attachment.php
attachment.php: JPEG image data, JFIF standard 1.01

我們稍微了解一下 JPEG 格式規范。JPEG 文件以 “\xFF\xD8” 打頭,以 “\xFF\xD9” 結尾。JPEG/JFIF 文件會出現 “JFIF” 字符,JPEG/Exif 文件會出現 "Exif" 字符。

jpg 圖片采用有損壓縮,不支持 alpha 通道。編碼時,顏色從 RGB 色彩空間轉到 YUV 色彩空間,根據顏色分量的重要性和人眼的感知剔除不重要的信息,縮減采樣 4:4:4 4:2:2 4:2:0,接著 分割圖片成 8x8 子區域進行離散余弦變換,量化編碼,支流系數用差分編碼,交流系數用 RLE 編碼。

我們發現圖片是以 "\xFF\xD8" 開頭的,但是結尾卻不是 "\xFF\xD9",好像明白了什么。
我們用題目1學到的 strings 命令搜到了可疑字符串?solution.txt 和?solution.txtPK,恰恰是放文件最后的。
PK 字眼熟悉不?最常用的 ZIP 格式壓縮文件頭的 magic number 是 “PK\x03\x04”,而且文件中確實存在這四個字節。而且這四個字節的前面也恰好是 "\xFF\xD9"。想想之前的題目 attachment。看來,是誰把一個 ZIP 壓縮文件追加到一個 JEPG 圖像文件的后面了。我們需要提取出 ZIP 文件,答案離我們不遠了。。

ZIP 文件的偏移量用題目1學到的 vim :%!xxd 搜索定位查看并計算,或者用 grep 命令搜索下。
我們需要復制從?0004f06 到最后?0004f8d (長度 0x88=136)到新的文件里去。

復制粘貼文件或者段落用 Ctrl+C、Ctrl+V,可是復制二進制文件流呢,也可以這么做嗎?好像不行。
Notepad++ 不愧是最好用最實用的文本編輯器,選擇菜單 Edit -> Paste Special,二級菜單中出現了 Copy|Cut|Paste Binary Cotent,接下來你知道怎么做啦~
或者使用 linux 的 dd 命令,還記得大學初學 linux 操作系統時,讓記那么多命令和參數干嘛,現在就派上用場了。
如果你不嫌麻煩,甚至可以自己編寫小段 C/C++ 代碼,打開文件、復制文件、關閉文件。

martin@M2037:~/Desktop$ printf "%d\n" 0x0004f06
20230
martin@M2037:~/Desktop$ dd if=attachment.jpg of=solution.zip skip=20230 bs=1 count=136
136+0 records in
136+0 records out
136 bytes (136 B) copied, 0.0021692 s, 62.7 kB/s

martin@M2037:~/Desktop$ unzip solution.zip
Archive: solution.zip
inflating: solution.txt

打開 solution.txt 文件,就是最終的答案了。

從中,我們學習了另外一種隱藏文件的方法,將一個文件附屬到另外一個文件末尾,打開的時候只解析第一個文件,附屬文件被忽略了。
將信息 message.txt 隱藏到圖片 carrier.jpg 中(注意命令行中的先后順序):
linux 終端下, cat carrier.jpg message >> mixed.jpg
Windows 控制臺下,copy carrier.jpg /b + message.txt /a mixed.jpg
cat 是 concatenate 的簡寫,如果有多個序列文件(比如 file1.txt file2.txt file3.txt)合并,可以優雅地寫成 cat file{1,2,3}.txt >> new.txt
/A /B 分別代表文本文件和二進制文件,詳情請查看 copy /? 命令。

題3?LSB - The least significant bit

  WeChall 網站使用了 cookie 和 session 來產生動態的答案,所以不同的人在每一次登錄時,答案是不同的。我在這里貼出我的答案,你復制過去一般就是錯誤的答案,這樣可以提防不動腦子只粘貼答案的人。
這道題目有鏈接提示,鏈接的顏色是 #EEE,接近背景色白色 #FFF,還是很明顯看得出來的,看來作者沒有有意隱藏這一提示。家里網沒能打開這個鏈接,原因還沒查出,公司網可以打開。steganabara 原來是一個 .jar 包,下載 steganabara.jar 文件并運行程序 java -jar steganabara-1.1.1.jar?,將隱藏信息的圖片拖進來。似乎是很正常的一張圖片,LED 數碼管顯示了作者的大名 Gizmore。查了一下,gizmor 英文是小發明的意思。當然,這只是作者創作題目的署名,與解題沒有任何關系。解題偶爾能有額外的收獲。

  這張圖片是 RGB 格式,沒有 alpha 通道,隨便勾選 RGB 某一通道的某一位,共有 3*8=24 種單項選擇(復合選擇暫未考慮進來,從簡單到復雜嘛~)。點擊菜單 Filter -> Bit Mask,從低位到高位一個一個勾選盲試的話,很容易試出答案來。思路是這樣的,你的答案不一定是這樣的。注意勾上 Amplify 選項,否則很難辨認。
  借助事實分析和判斷,點擊菜單 Analyse -> Histogram 給出 RGB 各分量的柱狀圖,范圍是 0~255,有 3 個連續分布圖和 1 個離散分布(斑馬帶)圖,可以懷疑出是哪個通道有問題。相鄰柱子的間距是周期,可以推斷出是哪個比特位被篡改,導致出現重復的模式。

  LSB (least significant bit) 最低有效位,權重最小的位,也是修改最不容易引起注意的位;與之對應的是 MSB (most significant bit) 最高有效位,修改后很容易被察覺。上面之所以需要增強信號(Amplify) 就是因為隱藏的信息在 LSB 上不易被發覺。這個是圖片與圖片的操作,我想到了一種字符串與圖片混合的辦法。
  將字符串信息(也就是需要隱藏的信息 ASCII 碼值)拆開成比特位,分別藏在圖像中的連續像素中的最低位。思路是讀取承載信息的圖片,然后把需要隱藏的信息以比特流的形式連續覆蓋圖片 RGB 值的最低位,為了進一步增加難度,可以只覆蓋其中某一個分量,可以不用放最低位,如果比特位用完了,信息可以從頭循環再覆蓋,直到覆蓋所有。例如此題采用的是 Blue 通道的第 4 位。

#include <stddef.h> #include <stdlib.h> #include <stdint.h> #include <string.h> #include <stdio.h>#include "libpng16/png.h"int main() {png_image image;memset(&image, 0, sizeof image);image.version = PNG_IMAGE_VERSION;image.format = PNG_FORMAT_RGB; // no alpha channelconst char* message = "No 300 taels of silver buried here.";const int BITS = strlen(message) * CHAR_BIT;const char* original = "g2YMC634NSqoEhXe.png";const char* stegano = "stegano.png";if(png_image_begin_read_from_file(&image, original)){size_t size = PNG_IMAGE_SIZE(image);png_bytep buffer = (png_bytep)malloc(size);if(buffer != NULL){// blend text bits to image's least significant bitint bit = 0;for(size_t i = 0; i < size; ++i){char test = (original[bit/8] & (1<<(bit%8))) ?1:0;buffer[i] = (buffer[i]&0xFE) | test;++bit;if(bit >= BITS)bit = 0; // repeat message }if(png_image_finish_read(&image, NULL/*background*/, buffer,0/*row_stride*/, NULL/*colormap for PNG_FORMAT_FLAG_COLORMAP*/)){if(png_image_write_to_file(&image, stegano, 0/*convert_to_8bit*/,buffer, 0/*row_stride*/, NULL/*no colormap*/))fprintf(stdout, "write to file %s successfully.\n", stegano);elsefprintf(stderr, "write %s: %s\n", stegano, image.message);free(buffer);}else{fprintf(stderr, "read %s: %s\n", original, image.message);/* This is the only place where a 'free' is required; libpng does* the cleanup on error and success, but in this case we couldn't* complete the read because of running out of memory.*/png_image_free(&image);}}elsefprintf(stderr, "out of memory: %lu bytes\n",(unsigned long)PNG_IMAGE_SIZE(image));}elsefprintf(stderr, "%s: %s\n", original, image.message);return 0; } lsb.cpp

?

to be continued...

?

轉載于:https://www.cnblogs.com/Martinium/p/wechall_stegano.html

總結

以上是生活随笔為你收集整理的wechall.net/stegano 解题心得的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 蜜桃臀av| 精品久久久久久久久久久 | 成人午夜av在线 | 操碰97 | 欧美成人乱码一二三四区免费 | 欧美另类高清 | 久久久精品中文字幕麻豆发布 | 黄色激情av| 天天插天天操 | 天天看黄色 | 欧美10p| 在线观看亚洲色图 | 在哪里可以看毛片 | 久久美女精品 | 一区二区三区免费 | 中文无码日韩欧 | 国内av网站| 在线观看免费视频国产 | 欧美日韩亚洲二区 | 午夜激情视频网 | 欧美日韩激情在线一区二区三区 | 色婷婷视频在线 | 少妇裸体淫交视频免费看高清 | 成人a在线 | 美日韩黄色片 | 中文字幕免费av | 欧美一区三区 | 欧美日韩一区二区电影 | 久久一区视频 | 高h喷汁呻吟3p | 亚洲加勒比在线 | 中文一区二区 | 日韩一区二区三区在线播放 | 五月婷婷激情网 | 日本精品中文字幕 | 午夜爱爱毛片xxxx视频免费看 | 国产精品国产精品国产专区不卡 | 自拍偷拍欧美日韩 | av日韩一区二区三区 | 99国产精品欲 | 亚洲精品无码永久在线观看 | 91福利专区| 精彩视频一区二区 | 天天操操操 | 中文字幕女同女同女同 | 91成人黄色 | 91九色在线观看 | av视觉盛宴 | 福利在线免费 | 午夜影院色| 在线国产网站 | 国产无精乱码一区二区三区 | 狠狠爱综合网 | 淫妹妹影院 | 亚洲另类色图 | 九草av| 欧洲黄色网 | 国产毛片基地 | 手机看片国产精品 | 午夜精品网 | 成人av日韩| 九九爱国产 | 欧美在线播放一区 | 麻豆乱码国产一区二区三区 | 国产黄色片免费观看 | av黄色免费在线观看 | 黄色特级大片 | 正在播放经典国语对白 | 日日热| 欧美日韩亚洲国产精品 | 成人免费毛片糖心 | 亚洲成人网页 | 国产黄av | 久久久久久久久久久久久久久久久 | 欧美在线aa | 一进一出视频 | 91视频免费网址 | 自拍偷拍18p | 黄色亚洲视频 | 国产美女自拍视频 | 亚洲色图久久 | 国产视频首页 | 欧美日韩精品一区二区 | 欧美日韩中文字幕一区二区三区 | 中文字幕av网站 | www.视频一区 | 嫩草视频免费观看 | 国产无遮挡a片又黄又爽 | 福利社91| 亚洲第二色 | 日韩色图一区 | 日韩欧美www | 伊人成人动漫 | 深夜福利1000 | 久久露脸 | 久操热线 | 欧美视频一区在线 | 久久一区二 | 大又大粗又爽又黄少妇毛片 |