2007年5月16日 星期三

A New Steganographic Method for Paletee-Based

本週課程主題是討論 J. Fridrich 論文 A New Steganographic Method for Palette Images 的核心觀念!

我也根據此新的技術是這去寫寫看程式!!!

首先我先將圖片的調色盤找出來==>



接著我自己規定我要Random的Seed,也就是之後要解出我所隱藏的資訊的Key!!
而我所隱藏的是八個bit 1111 1100 !!!!



如果你輸入的密碼也就是我規定的Seed是錯誤的!!!
會顯示你輸入的密碼是錯誤的!!!並且按解出資訊也無法解出任何東西!!!



如果輸入的密碼是我所規定的 "1905",就可以看到我所隱藏的資訊 1111 1100這八個bit!!!

2007年5月2日 星期三

圖片分離_位元平面圖

本週作業:
將圖片分離成位元平面圖!!!並觀察最後一個位元的平面圖!!!!
如果是亂的圖.代表可能沒有藏東西.但是如果有顯示影像代表可能有藏東西!!!

我分析兩張圖:

第一張=>



紅色框框裡面圈出!!!最後一個Bit的位元圖不是雜亂的!!!!

第二張=>



結果:
發現第一張圖最後一個Bit的位元圖並不是雜亂的!!有顯示其他影像!!!代表它可能被藏入其他東西!!!而第二張圖最後一個Bit的位元圖示雜亂的!!代表它可能沒有被藏入東西!!!

2007年5月1日 星期二

分析圖片的亂度

本週上課的作業:
1. 探討如何寫程式判斷一張黑白影像是屬於 random pattern。
  基本上, 位元平面(bit-plane) 如果看起來是 random 的, 兩兩相鄰的值為相同的機率之期望值為 0.5。
2. 探討 S-Tools 的破解方式。

我分析了三張圖:

第一張圖=>



值為:0.210140287876129
第二張圖=>


值為:0.217866957187653
第三張圖=>


值為:0.294788271188726
結果:
分析這三張圖的結果顯示都小於0.5!!而這三張圖都是沒有隱藏過東西的!!!

我又去分析兩張有隱藏資訊的圖!!!

第一張(調色盤沒排序過隱藏的圖片)=>



值為:0.278857707977295

第二張(調色盤有排序過隱藏的圖)=>



值為:0.247277051210403

結果:
這兩張有隱藏資訊的圖也小於0.5!!

結論:
這種分析亂度去判別是否有隱藏資訊在圖裡的方法!!!並不能準確的分析圖片是否有隱藏資訊!!!!

將GIF圖顏色分群存成調色盤_藏入資訊

本週作業:
請同學試著撰寫一個模擬將機密訊息嵌入到調色盤類型影像的索引值中, 藉以分析原始掩護影像(cover-images)與偽裝影像(steg0-images)之間的變化。
步驟:
1. 將影像用 Photoshop 存成 GIF 格式, 使影像的色彩總數降成 256 色。
2. 再將影像用 Photoshop 存成 BMP 格式, 讓你的 BCB 程式可以讀取影像內容。
3. 撰寫一個程式讀入該 BMP 影像,
4. 掃描整張影像, 製作出 256色調色盤。
5. 宣告一個二維陣列, 將每個像素點的顏色, 查出該顏色在調色盤的索引值(index), 存到二維陣列中。
6. 用一個隨機變數模擬機密訊息的嵌入, 隨機更改每一個索引值的 LSB。
7. 用新的索引值產生一張影像, 即為偽裝影像(stego-image)。

將圖片的調色盤畫出=>



將圖片藏入資訊=>



結果:
由第二張圖可以看出來.和原圖相差非常多失真很嚴重.原因是因為藏入資訊時改變了圖片的Index值.在調色盤的顏色也會不同.因為顏色值相差很大.所以失真會很嚴重!!!!

將調色盤排序_隱藏圖片_分析RMSE

本週作業:
  1. 複製一份調色盤, 依顏色的亮度做排序。使得新調色盤中, 相鄰顏色之間的色彩差異減至最低。
 2. 找出欲嵌入資訊的像素顏色值在新調色盤中的索引值。
 3. 取出一個位元的資訊, 將其嵌入至新索引值的最低位元。
 4. 取出嵌入資訊後的索引值之顏色 RGB 值。
 5. 找出這個 RGB 值在原始調色盤中的索引值。
 6. 將這個像素的索引值改成 步驟 5. 找到的索引值。

分析原圖的調色盤=>

將調色盤排序=>

排序過調色盤所隱藏的圖=>

未排序調色盤所隱藏的圖=>

比較兩種藏法的RMSE=>

結果:
我發現排序過調色盤所隱藏的圖.比起沒排序調色盤所隱藏的圖失真改善很多.
但是跟原圖比起來失真還是很嚴重.因為降色的原因即使找到跟鄰近相關顏色的值.
但還是看的出來有藏東西.

兩張圖的RMSE值都很接近而有排序過調色盤的圖值比沒排序過調色盤圖的值
小一點點.但是兩個沒差多少!!!!!

2007年3月21日 星期三

仿製畫筆


今天老師一開始先叫我們大家先用用看phtoimpact裡的一個工具==>仿製畫筆

作業就是叫我們用BCB寫出跟仿製畫筆一樣的功能
(要利用到scanline和array)




















但是這是沒用SCANLINE所寫的,因為對SCANLINE的用法還在摸索中,
所以先用自己所會的方法來寫寫看.

程式碼:
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
int R=0,G=0,B=0;
R=GetRValue(Image2->Canvas->Pixels[X][Y]);
G=GetGValue(Image2->Canvas->Pixels[X][Y]);
B=GetBValue(Image2->Canvas->Pixels[X][Y]);
Image1->Canvas->Pixels[X][Y]=(TColor)RGB(R,G,B);

R=GetRValue(Image2->Canvas->Pixels[X][Y-1]);
G=GetGValue(Image2->Canvas->Pixels[X][Y-1]);
B=GetBValue(Image2->Canvas->Pixels[X][Y-1]);
Image1->Canvas->Pixels[X][Y-1]=(TColor)RGB(R,G,B);

R=GetRValue(Image2->Canvas->Pixels[X][Y+1]);
G=GetGValue(Image2->Canvas->Pixels[X][Y+1]);
B=GetBValue(Image2->Canvas->Pixels[X][Y+1]);
Image1->Canvas->Pixels[X][Y+1]=(TColor)RGB(R,G,B);

R=GetRValue(Image2->Canvas->Pixels[X-1][Y]);
G=GetGValue(Image2->Canvas->Pixels[X-1][Y]);
B=GetBValue(Image2->Canvas->Pixels[X-1][Y]);
Image1->Canvas->Pixels[X-1][Y]=(TColor)RGB(R,G,B);

R=GetRValue(Image2->Canvas->Pixels[X+1][Y]);
G=GetGValue(Image2->Canvas->Pixels[X+1][Y]);
B=GetBValue(Image2->Canvas->Pixels[X+1][Y]);
Image1->Canvas->Pixels[X+1][Y]=(TColor)RGB(R,G,B);

R=GetRValue(Image2->Canvas->Pixels[X+1][Y+1]);
G=GetGValue(Image2->Canvas->Pixels[X+1][Y+1]);
B=GetBValue(Image2->Canvas->Pixels[X+1][Y+1]);
Image1->Canvas->Pixels[X+1][Y+1]=(TColor)RGB(R,G,B);

R=GetRValue(Image2->Canvas->Pixels[X-1][Y-1]);
G=GetGValue(Image2->Canvas->Pixels[X-1][Y-1]);
B=GetBValue(Image2->Canvas->Pixels[X-1][Y-1]);
Image1->Canvas->Pixels[X-1][Y-1]=(TColor)RGB(R,G,B);

R=GetRValue(Image2->Canvas->Pixels[X-1][Y+1]);
G=GetGValue(Image2->Canvas->Pixels[X-1][Y+1]);
B=GetBValue(Image2->Canvas->Pixels[X-1][Y+1]);
Image1->Canvas->Pixels[X-1][Y+1]=(TColor)RGB(R,G,B);

R=GetRValue(Image2->Canvas->Pixels[X+1][Y-1]);
G=GetGValue(Image2->Canvas->Pixels[X+1][Y-1]);
B=GetBValue(Image2->Canvas->Pixels[X+1][Y-1]);
Image1->Canvas->Pixels[X+1][Y-1]=(TColor)RGB(R,G,B);

}