Google自訂搜尋

目前日期文章:200502 (11)

瀏覽方式: 標題列表 簡短摘要
開始製作Ruby的教學網
嗯~真的很累
翻譯官方文件、轉譯中國官方文件
雖然有蠻多人幫忙...
但是每次都屍橫遍野....
只有我活下來繼續翻譯....=.=|||

看到大陸官方的資料實在很完整
有點冷
還看到招募撰寫者
更冷...
台灣沒辦法這樣嗎?
冷...

hechian 發表在 痞客邦 留言(2) 人氣()

var hex_chr = "0123456789abcdef";
function rhex(num)
{
str = "";
for(j = 0; j <= 3; j++)
str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) +
hex_chr.charAt((num >> (j * 8)) & 0x0F);
return str;
}

/*
* Convert a string to a sequence of 16-word blocks, stored as an array.
* Append padding bits and the length, as described in the MD5 standard.
*/
function str2blks_MD5(str)
{
nblk = ((str.length + 8) >> 6) + 1;
blks = new Array(nblk * 16);
for(i = 0; i < nblk * 16; i++) blks[i] = 0;
for(i = 0; i < str.length; i++)
blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8);
blks[i >> 2] |= 0x80 << ((i % 4) * 8);
blks[nblk * 16 - 2] = str.length * 8;
return blks;
}

/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}

/*
* Bitwise rotate a 32-bit number to the left
*/
function rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}

/*
* These functions implement the basic operation for each round of the
* algorithm.
*/
function cmn(q, a, b, x, s, t)
{
return add(rol(add(add(a, q), add(x, t)), s), b);
}
function ff(a, b, c, d, x, s, t)
{
return cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function gg(a, b, c, d, x, s, t)
{
return cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function hh(a, b, c, d, x, s, t)
{
return cmn(b ^ c ^ d, a, b, x, s, t);
}
function ii(a, b, c, d, x, s, t)
{
return cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
* Take a string and return the hex representation of its MD5.
*/
function md5(str)
{
x = str2blks_MD5(str);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;

for(i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;

a = ff(a, b, c, d, x[i+ 0], 7 , -680876936);
d = ff(d, a, b, c, x[i+ 1], 12, -389564586);
c = ff(c, d, a, b, x[i+ 2], 17, 606105819);
b = ff(b, c, d, a, x[i+ 3], 22, -1044525330);
a = ff(a, b, c, d, x[i+ 4], 7 , -176418897);
d = ff(d, a, b, c, x[i+ 5], 12, 1200080426);
c = ff(c, d, a, b, x[i+ 6], 17, -1473231341);
b = ff(b, c, d, a, x[i+ 7], 22, -45705983);
a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
d = ff(d, a, b, c, x[i+ 9], 12, -1958414417);
c = ff(c, d, a, b, x[i+10], 17, -42063);
b = ff(b, c, d, a, x[i+11], 22, -1990404162);
a = ff(a, b, c, d, x[i+12], 7 , 1804603682);
d = ff(d, a, b, c, x[i+13], 12, -40341101);
c = ff(c, d, a, b, x[i+14], 17, -1502002290);
b = ff(b, c, d, a, x[i+15], 22, 1236535329);

a = gg(a, b, c, d, x[i+ 1], 5 , -165796510);
d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
c = gg(c, d, a, b, x[i+11], 14, 643717713);
b = gg(b, c, d, a, x[i+ 0], 20, -373897302);
a = gg(a, b, c, d, x[i+ 5], 5 , -701558691);
d = gg(d, a, b, c, x[i+10], 9 , 38016083);
c = gg(c, d, a, b, x[i+15], 14, -660478335);
b = gg(b, c, d, a, x[i+ 4], 20, -405537848);
a = gg(a, b, c, d, x[i+ 9], 5 , 568446438);
d = gg(d, a, b, c, x[i+14], 9 , -1019803690);
c = gg(c, d, a, b, x[i+ 3], 14, -187363961);
b = gg(b, c, d, a, x[i+ 8], 20, 1163531501);
a = gg(a, b, c, d, x[i+13], 5 , -1444681467);
d = gg(d, a, b, c, x[i+ 2], 9 , -51403784);
c = gg(c, d, a, b, x[i+ 7], 14, 1735328473);
b = gg(b, c, d, a, x[i+12], 20, -1926607734);

a = hh(a, b, c, d, x[i+ 5], 4 , -378558);
d = hh(d, a, b, c, x[i+ 8], 11, -2022574463);
c = hh(c, d, a, b, x[i+11], 16, 1839030562);
b = hh(b, c, d, a, x[i+14], 23, -35309556);
a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
d = hh(d, a, b, c, x[i+ 4], 11, 1272893353);
c = hh(c, d, a, b, x[i+ 7], 16, -155497632);
b = hh(b, c, d, a, x[i+10], 23, -1094730640);
a = hh(a, b, c, d, x[i+13], 4 , 681279174);
d = hh(d, a, b, c, x[i+ 0], 11, -358537222);
c = hh(c, d, a, b, x[i+ 3], 16, -722521979);
b = hh(b, c, d, a, x[i+ 6], 23, 76029189);
a = hh(a, b, c, d, x[i+ 9], 4 , -640364487);
d = hh(d, a, b, c, x[i+12], 11, -421815835);
c = hh(c, d, a, b, x[i+15], 16, 530742520);
b = hh(b, c, d, a, x[i+ 2], 23, -995338651);

a = ii(a, b, c, d, x[i+ 0], 6 , -198630844);
d = ii(d, a, b, c, x[i+ 7], 10, 1126891415);
c = ii(c, d, a, b, x[i+14], 15, -1416354905);
b = ii(b, c, d, a, x[i+ 5], 21, -57434055);
a = ii(a, b, c, d, x[i+12], 6 , 1700485571);
d = ii(d, a, b, c, x[i+ 3], 10, -1894986606);
c = ii(c, d, a, b, x[i+10], 15, -1051523);
b = ii(b, c, d, a, x[i+ 1], 21, -2054922799);
a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
d = ii(d, a, b, c, x[i+15], 10, -30611744);
c = ii(c, d, a, b, x[i+ 6], 15, -1560198380);
b = ii(b, c, d, a, x[i+13], 21, 1309151649);
a = ii(a, b, c, d, x[i+ 4], 6 , -145523070);
d = ii(d, a, b, c, x[i+11], 10, -1120210379);
c = ii(c, d, a, b, x[i+ 2], 15, 718787259);
b = ii(b, c, d, a, x[i+ 9], 21, -343485551);

a = add(a, olda);
b = add(b, oldb);
c = add(c, oldc);
d = add(d, oldd);
}
return rhex(a) + rhex(b) + rhex(c) + rhex(d);
}

夠變態吧?
喜歡的去破破看

hechian 發表在 痞客邦 留言(3) 人氣()

http://myweb.hinet.net/home8/drcolin/fur.wmv 頗好看的影片~看你們還忍不忍心阿^^

hechian 發表在 痞客邦 留言(0) 人氣()

感覺好像回到從前
那股對網頁設計的熱情
開始做了
技術有點生疏了
不過摸摸就回來,嗯~
感覺真的不錯....

hechian 發表在 痞客邦 留言(0) 人氣()

禮拜六分手了....
我當天跟她說的時候哭了....
她,當晚也流淚
不忍
痛苦
昨天,想到一個很該死的點子

.....
今年的情人節
我買了生平第一份金莎
我將要再追求妳一次
對不起,我還是很愛妳
原諒我的自私
寬恕我的佔有
抱歉,我不想放妳走....
陪著我

hechian 發表在 痞客邦 留言(3) 人氣()

  • Feb 12 Sat 2005 23:44
  • 走了

風箏又飛了
不過這次是我放手的
看她在天空掙扎的那樣痛苦
我也不忍
不如放她飛去
自由自在的飛
飛到她的夢想國度
遇到更疼愛她的人
是我不夠疼愛她吧.....
呵呵
希望妳...可以快樂
情人節&生日快樂
橘子,我愛妳...

hechian 發表在 痞客邦 留言(0) 人氣()

NTFS不利的一面
翻譯+整理: By Bigworm 不當之處請指正
這篇文章是根據H. Carvey的The Dark Side of NTFS (Microsoft's Scarlet Letter)

翻譯的,可以自由轉載,但請保持譯者和來源以及文章的完整性.

簡介:微軟的平臺不斷在增加.公司用的伺服器和桌面作業系統運行的一般是winNT和win2000,而家庭用戶和學生用的系統一般是winXP.這些平臺是很受歡迎的並且被大範圍的使用.可是使用這些作業系統的用戶和管理員卻對NTFS檔系統的某個特性知道的很少,那就是"交換資料流程"(alternate data streams).

NTFS因為它的穩定性 強大的功能 以及它所提供的安全性而成為一種更優越的檔系統,NTFS交換資料流程(ADSs)是為了和Macintosh的HFS檔系統相容而設計的,它使用資源派生(resource forks)來維持與檔相關的資訊,比如說圖示及其他的東西.而微軟提供了一種方法通過Windows explorer來創建特殊的ADSs,檢測這種特殊的ADSs的必要工具和功能相當缺乏.說來也奇怪,系統一直以來都有允許用戶創建ADSs以及在這種流檔中執行隱藏代碼的功能和工具.Microsoft KnowledgeBase 中Q101353號文章承認了基於API的win32不能很好的支持ADSs.

這篇文章的目的是詳細的介紹ADSs是怎麼被創建和利用的,以及隱藏在ADSs中的代碼是怎麼被執行的.基於不同的系統(NT 2K XP)處理ADSs也是很不同的.

創建ADSs

創建ADSs的語法相對比較簡單和直接.比如說創建和文件myfile.txt相關聯的ADSs,只需簡單的用冒號把檔案名和ADSs名分開即可.

D:ads>echo This is an ADS > myfile.txt:hidden

此外,ADSs還可用另外一個檔的內容來創建.

D:ads>echo This is a test file > test.txt

D:ads>type test.txt > myfile.txt:hidden

然後你可以用記事本去檢驗一下看看,命令如下:

d:ads>notepad myfile.txt:hidden

可是,用dir命令去看不出任何變化,Windows Explorer也沒有任何可用的轉換和設置來檢測這種新建的ADSs的存在.

此外,ADSs可以被創建以及與目錄列表相關聯,而不是與一個檔關聯.這種特性在文章的後面將會顯示出他的重要性,但現在我們介紹怎麼創建ADSs以及足夠了.

D:ads>echo This ADS is tied to the directory listing > :hidden

這種類型的ADSs也可以通過type和notepad命令來創建.

ADSs檔的內容並不只限於text(文本)資料,任何二進位資訊的流都可以組成一個檔,而且ADS也就是一個檔而已.可執行的東西也能夠相當容易的隱藏在ADSs中,看下面的例子:

D:ads>type c:winntotepad.exe > myfile.txt:np.exe

D:ads>type c:winntsystem32sol.exe > myfile.txt:sol2.exe

同樣,像圖片檔,音效檔案或任何其他的資料流程都可以隱藏在ADSs中.

最後,Windows Explorer提供了一種方法來創建特殊的ADSs(RUSS00)

看下圖:我們在值那一欄可以填入很多東西

_blank>/UpLoadFiles/NewsPhoto/31511210.gif
圖一
如果某個用戶沒有寫檔的許可權,那麼他就不能在該檔上添加ADS.

此外,windows 檔保護功能可以防止系統檔被替換,但是他不能阻止有適當許可權的用戶在這些系統檔上添加ADSs,有個工具System File Checker(sfc.exe)可以檢查受保護系統檔是否被覆蓋,可是它不能檢測ADSs.

檢測,查看,利用ADSs

如前所述,微軟並沒有提供工具來檢測ADSs的存在.現在檢測ADSs最好的工具是由Frank Heyne寫了Lads.exe.這個工具現在的版本是3.10,它是一個命令行工具

看下圖:
_blank>/UpLoadFiles/NewsPhoto/74413189.jpg
圖二
從上圖我們可以看出lad.exe多有用了,不僅可以顯示ADSs的存在,還可以顯示ADSs的路徑和大小.我們仔細注意和myfile.txt相關聯的四個檔,其中三個是以很像撲克裏黑桃形狀的ASCII開頭的,另外一個就是在花括弧中有一大串數位和字母的那個檔,這四個檔就是我們用圖一所示方法創建的.

既然找到了這些檔,我們應該怎麼看檔的內容那?其實notepad就是一個很好的工具,但是這中間還有個陷阱.

比如,以下命令就出現我們不希望的結果

d:ads>notepad myfile.txt:hidden

執行這個命令時notepad就會問是否創建一個新檔,這個就很奇怪了,因為myfle.txt:hidden我們早就創建了.為了執行的結果是我們所希望的,應該輸入下面的命令:

d:ads>echo This is another ADS > myfile.txt:hidden.txt

d:ads>notepad myfile.txt:hidden.txt

這樣就出現了我們所希望的結果,檔案名後增加的副檔名允許用notepad打開ADSs,這種方法也同樣適用於其他的ADSs,比如:

d:ads>notepad myfile.txt:np.exe

ADSs是NTFS檔系統的特徵,所以帶有ADS的檔如果被移動到其他的檔系統,比如FAT,FAT32或者ext2上,ADS就會被刪掉,因為這些檔系統都不支援ADS,如果是在NTFS分區之間移動,ADSs就會被保留下來.

刪除ADSs相對簡單,用下面的命令即可

d:ads>type myfile.txt > myfile.bat

d:ads>del myfile.txt

d:ads>ren myfile.bat myfile.txt

現在用lads.exe看一下,可以看到所有的ADSs都不見了.

執行ADSs

前面的例子中,我們已經把可執行的代碼藏在ADSs中,這個看起來好像沒什麼用處,除非代碼可以自動執行.其實,start命令就可以用來執行這些代碼,現在我們再來創建ADSs

d:ads>type d:winntotepad.exe > myfile.txt:np.exe

但是在2000上執行時會出現錯誤,這時因為我們提供的路徑資訊不夠

所以,我們應該指明路徑,不管時絕對路徑還是相對路徑.比如,下面的任何一個命令都可以:

d:ads>start d:adsmyfile.txt:np.exe

d:ads>start .myfile.txt:np.exe

是不是出現了記事本??

當命令執行時進程會出現比較有意思的現象.例如,運行pslist.exe會出現下圖情況
_blank>/UpLoadFiles/NewsPhoto/53098127.jpg
圖三
出現的進程名是myfile.txt:

看看任務管理器中的情況:
_blank>/UpLoadFiles/NewsPhoto/74639617.jpg
圖四

再看看下圖:
_blank>/UpLoadFiles/NewsPhoto/85933109.jpg
圖五


我們來看看在xp的管理器中進程的情況:

_blank>/UpLoadFiles/NewsPhoto/10248550.jpg
圖六

還有一種可選擇的用來執行隱藏檔流的方法,我們來示範一下,先在桌面上創建一個快捷方式,專案位置填入d:adsmyfile.txt.假設你創建的流文件是sol2.exe(也就是用這個命令type d:winntsystem32sol.exe > myfile.txt:sol2.exe),現在我們到創建的快捷方式的屬性裏修改,讓快捷方式指向d:adsmyfile.txt:sol2.exe,觀察一下快捷方式的圖示,是不是起了變化?

現在我們雙擊這個圖示,就可以執行這個檔了.看執行後的結果:
_blank>/UpLoadFiles/NewsPhoto/05442063.jpg

圖七

還有一種比較簡便的方法是直接在註冊表中的run鍵下添加資料流程檔的完整路徑:

HKEY_LOCAL_MACHINESoftwareMicrosoft
WindowsCurrentVersionRun,下次系統啟動時就會自動運行該隱藏檔

在開始的運行框中也可以執行ADSs比如: file:///d:/ads/myfile.txt:sol2.exe

對於使用perl的管理員可用下面的代碼執行ADSs

my $file = 'd:adsmyfile.txt:sol2.exe';

`$file`;

把文件存為ads.pl,用下麵的命令即可執行

d:perl>ads.pl

其實用windows的WSH也可以執行ADSs:

d:ads>echo MsgBox "VBS file to test ADSs" > ads.vbs

d:ads>wScript ads.vbs

d:ads>type ads.vbs > myfile.txt:ads.vbs

d:ads>wScript myfile.txt:ads.vbs

或者:

D:ads>start .myfile.txt:ads.vbs


總結:

ADSs是NTFS的一個特徵,它是為了和HFS相容而設計的.可是由於比較難於被發覺,所以對於管理員來說是一種危險,現在29A這個組織的Bennie和Ratter已經發佈了一種叫做W2K.Stream病毒,這個病毒就是利用ADSs的.

我們並不能以不使用NTFS來作為解決這個問題的辦法,因為NTFS在安全性和可靠性方面是有很大作用的.其實,管理員應該對檔和目錄正確的使用DACLs(discretionary access control lists),並且經常使用工具比如說lads.exe來掃描他們自己的系統.

文章中有些地方經過我自己的整理,刪除了有些無關緊要的內容

如果想看原文可以參http://patriot.net/~carvdawg/docs/dark_side.html.

上面提到的工具鏈結如下:lads _blank>http://www.heysoft.de/nt/lads.zip

pslists: _blank>http://www.sysinternals.com/files/pslist.zip


hechian 發表在 痞客邦 留言(2) 人氣()

跟BF討論完之後發現....
0.0.2不錯= ="
只要將一些部分修改就可以推出0.0.3版...

像是記憶ruby.exe初始位置 (BF直接寫入Registry,我也照做了XD...)
一個[關於]...(0.0.2沒有,很不應該....)
多重編譯(有點想要移除此功能...目前功力還不至於應付這功能)
批次檔管理(被我移除了...有Windows檔案總管還要這做啥?)
版面配置...(多了個選擇ruby.exe的東西,移除掉後只會剩下Source檔案資訊)

可能改掉載入檔案的部分吧?用Common Dialog的Show Open來載入檔案
應該會比較好用...只是這樣版面就太簡潔哩XD...
一個TextBox、一個Label、四個Command(瀏覽、編譯、關於、離開)
越改越難看=.=...
我都Open Source了,有興趣的可以添加功能吧^^


呼...我很笨
我想我應該不適合程式設計吧?
理科文科都不強...=.=

hechian 發表在 痞客邦 留言(2) 人氣()

我算累贅吧?
能力不足還享受別人沒有的權利
我真是過分
想退出 想離開
但是不想放棄

我該不該走?
想要變成普通人
懂就行 會就好
能幫橘子修電腦
我就滿足了....

追求更高的知識
培養更強的能力
打敗更強的對手
達到最高的領域

電腦狂的目標....
沒了

hechian 發表在 痞客邦 留言(5) 人氣()

  • Feb 10 Thu 2005 01:34
  • 承諾

曾經說過的永遠
是否只是謊言?
那牽在手中的溫暖
只是過往雲煙?

hechian 發表在 痞客邦 留言(0) 人氣()

幾天前
我最愛的風箏...
線斷了 飛走了...
好傷心...
飛遠了 看著她的背影離去
心痛
心在下雨 眼在下雨
晴天不在我的世界裡面

幾天後
我最愛的風箏...
飄落了 等待著...
我心疼...
跑近了 雙手輕輕捧她起來
難過
心在下雨 眼在下雨
但是晴天進來我世界了

我愛妳 我依然愛妳
天天想著妳
言語不能表達 肢體不能展現
我的愛 永遠不渝
妳能感受到嗎?
我最愛的風箏
我會更加疼愛妳....

hechian 發表在 痞客邦 留言(0) 人氣()