|
int RussianMul(int n, int m) { int remain = 0; while(n != 1) { // odd if (n % 2 != 0) { n = (n-1)/2; remain += m; m *= 2; } // even else { n /= 2; m *= 2; } } return m + remain; }
上周,“番茄花園”作者洪磊被警方帶走,傳出的罪名是涉嫌侵犯微軟著作權,也就是俗稱的“盜版”。(8月24日北京晨報)
從番茄花園的站長被拘捕、番茄花園網站改版開始,“番茄門”開始成為網絡間僅次于奧運會的熱門話題。與當初人們對“珊瑚蟲事件”的反應有些類似,有一部分網民開始為番茄花園叫屈,“支持番茄花園”式的呼吁此起彼伏。
對于部分網民的這種反應,我理解他們的苦衷,但從更長遠的方向看,筆者又反對這種支持番茄花園的舉動。我想對他們說:為了我們自己的利益,請不要支持番茄花園。
支持番茄花園就意味著支持盜版、支持盜版就將我們置于被動的地位,這是一個很淺顯很直白的道理。網民們并非不懂這些,只是因為弱者的激憤才有了前面那些不正常的支持。盜版產生并且泛濫的主要原因是消費者的經濟條件與正版軟件的銷售價格難以匹配,如果我們普通人的財力足以接受售價上千元的微軟系統并且不拿它當回事、如果微軟的系統免費或者價格低的與盜版別無二致,那盜版不大可能會有源頭也不大可能會有市場。但在壟斷和經濟條件面前我們普通消費者是弱者,所以支持廉價甚至免費的盜版這個錯誤的選擇成了部分網民在番茄花園站長被抓后第一反應。
實際上,網民們支持番茄支持盜版的想法有些天真,他們也許認為只要我們用盜版支持盜版的話微軟就無可奈何、微軟就有可能因此蒙受巨大的損失。但是,部分網民的支持盜版能改變微軟獨霸天下的壟斷地位嗎?只能是加強這種地位;部分網民的支持盜版能夠使微軟的“天價”降低嗎?這近乎于天方夜譚。支持盜版只能讓微軟有足夠的理由在知識產權方面對中國指手畫腳、支持盜版只能讓微軟的壟斷地位毫發(fā)無損、支持盜版只能讓微軟的天價居高不下、支持盜版只能讓國產軟件業(yè)繼續(xù)沒落,支持盜版,對我們有什么好處?一點好處也沒有。
我們普通百姓希望自己使用的軟件有低廉的價格(最好是免費)、簡便的操作、能夠得到保障的質量,但很難實現,所以才會退而求次選擇盜版。可如果正版具有遠勝于盜版的優(yōu)點的話你還會用盜版嗎?很明顯,我們當然會去用正版。那么,如果我們的政府能憑借法律的力量強迫微軟實現上述目標的話,我們的目的不就達到了嗎?所以,我們不應該寄希望于用盜版去打擊微軟,這違反了法律;我們應該推動政府用法律去制裁微軟,因為已經有了微軟在歐洲和美國被起訴的先例。
如果我們某些人還在為番茄花園的倒掉惋惜的話,那說明我們很短視;如果我們還在為支持番茄花園搖旗吶喊的話,那我們是在拖《反壟斷法》的后腿。這對我們毫無益處。我原來以為“番茄門”是微軟拖延時間的一個手段,后來我反過來一想,這何嘗不是我們《反壟斷法》解決微軟壟斷問題的一個良好契機呢?
廉價或者免費不是我們的終極目標,從長遠看我們應該有更遠大的理想。我想勸那些支持番茄的人們幾句:你不愿意花錢,你可以去用Linux,如果使用不習慣,你可以學習或者等待,但為了我們自己的利益,請不要去支持番茄花園。
村民石章云3年前患了食道癌,現病重不起
劉長月老人在發(fā)臭的黑水河上,吃力的挪動著渡船 王子清已記不清自己主持過多少次葬禮了。 自打他48歲那年起,癌癥患者便在村子里多了起來,死亡接踵而至。每遇死亡,王子清必會到場,或主持,或與亡魂告別。多數情況下,他是主持者。 本來,作為子字輩的他,是沒有資格主持這種儀式的。子字輩之上,還有祖父輩的玉字輩和父輩的德字輩。在村里,這種告別亡魂的莊嚴儀式,通常是由年歲較大且德高望重的老人主持。但如今村子里玉子輩的人已所存無幾,而德字輩的人,或因癌癥相繼去世,或已“逃離”了這個村子。因此他這個小子輩,就責無旁貸地擔當起了這個任務。歲歲月月,“送走一茬又一茬”。 “每死一個人,我的心就像刀割一樣?!爆F年65歲的王子清步履蹣跚地走在村中,神情黯淡。有時,他還會停住腳步,擺擺手,不去追憶往事,“都是大好的年齡,死的太可惜了。真不知道啥時才是個頭啊!”
死人就像家常便飯一樣 位于河南省沈丘縣城東約10公里處的東孫樓村,共有1200多人。原先孫姓為望族,后王姓成了大姓。現全村王姓約有800多人。 自上世紀90年代以來,村里的人出現了密集的反常現象:有些人腹瀉不止,有些人內臟出現了各種不適。此外,偏癱、智障、畸形和婦科疾病也頻頻出現?;颊呦嗬^死去,少則一年內五六人,多則達20多人。死者經診斷多為食道癌、肝癌、胃癌、直腸癌、子宮癌、乳腺癌等等。 死亡像個揮之不去的幽靈,籠罩著這個村子。新起的墳塋、白對聯、哀樂,一年四季綿延不絕。 王子清的族人便是這個不幸村莊的不幸家族。 1991年,小他5歲的弟弟食道出現問題,吞咽困難。次年,大他兩歲的哥哥也出現同樣病癥。倆人的病后來都轉化為食道癌。2004年6月,王子清的哥哥病逝。28天后,他的弟弟也撒手人寰。這邊喪事還沒料理完,3天后,他的一位叔叔也死于食道癌。短短一個月,王子清相繼失去3位親人。 而這僅僅是幽靈掀開的序幕一角。事實是,這些年,僅王姓德字輩的族人中,25對夫婦,便有19人死于癌癥。而子字輩中不到80人,便有16人死于癌癥。死者大都正值壯年,最大的70歲出頭,最小的只有30歲。 “死人就像家常便飯一樣?!蓖踝忧宄槠?,任由眼淚淌滿褶皺的臉上,“我不知道村里到底死了多少人,只知道一個接一個地死。” 王子清本人雖然沒有患上癌癥,但胃穿孔也讓他遭了不少罪。2004年,他花了5000元做了胃部手術,至今天氣轉涼,傷口就會隱隱作痛。為“轉移痛苦”,他染上了抽煙的毛病,一支接一支,一會兒功夫,一包煙就空了。 在大多數地區(qū),通常每個村里有一名醫(yī)師就不錯了,但在沈丘縣東孫樓村卻增加到了4名醫(yī)師。劉德亮是村里最老資格的醫(yī)師。他記得最忙碌時自己每天要跑三四家,“抗生素藥供不應求”。村里的人口一度竟出現了負增長。 一位正在病床上輸液的腹瀉患者掙扎著坐了起來,插話說,就是現在,村里患腹瀉的病人至少也不下100人。 不僅是東孫樓村,自上世紀90年代以來,沈丘縣的黃孟營村、孟寨村、孫營村等,癌癥患者的比例均大幅度上升。據該縣政協常委、民間環(huán)保組織“淮河衛(wèi)士”會長霍岱珊提供的資料顯示:1990年~2005年間,2470人的黃孟營村,有116人死于癌癥;2366人的孟寨村,有103人死于癌癥;1697人的孫營村,有37人死于癌癥;1300人的陳口村,有116人死于癌癥;2015人的大衤者莊,有145人死于癌癥;1687人的杜營村,有187人死于癌癥。而據沈丘縣醫(yī)院記載,1972年當地120萬人中,只發(fā)現癌癥患者12人,發(fā)病率僅為十萬分之一。 由于癌癥爆發(fā)的密度大、頻率高,故上述村莊被當地人稱作“癌癥村”。3年前,河南省周口市有關部門,曾聯手在沈丘縣的“癌癥村”做過一次癌癥患者的入戶統計,但該數據一直沒有公開,沈丘縣衛(wèi)生局的一位副局長表示,不能向記者提供。 誰得病誰家就敗 在王子清隔壁的一條小巷子里,原先住著16戶人家,現在只剩下3戶了。其中,有兩戶全家死于癌癥,其余的因害怕也搬走了。 恰逢雨后,巷子里一片泥濘。在這條約100米深的小巷子里,已有很長時間沒人出入了,顯得分外寂靜。有一戶人家的房子是兩層預制板樓,在這個人均年收入不到1000元的村子里,這棟小樓顯得十分氣派。但如今鐵門上的鎖頭已經生銹,門口雜草叢生。顯然,這里早已人去樓空了。 “死的死,走的走?!蓖踝忧艴林闲谀嗨小芭距距钡刈咧?,不時發(fā)出重重的嘆息,“以前這里可熱鬧了,現在一點生氣都沒啦?!? 這個東西長約1公里、南北寬約半公里的村子,上世紀90年代以前,曾和許多村一樣,過著自給自足的閑適生活。農忙時,男人女人熱火朝天地干活,換取一年的口糧。收成好的時候,興許還會落些余錢,添幾件衣服,買兩件電器,樂呵一番。不忙的時候,男人們出外找些活計,或在本地打打零工??臻e時,招呼幾個人喝上幾盅,或搓一陣麻將。 可眼下,疾病和死亡像惡魔一樣幾乎纏擾著村里的每一戶人家。街上偶爾遇到幾個人,臉上也大都帶著悲傷、無奈或茫然。有時能看到三五個人聚在一起,談論的話題往往都和癌癥有關。 一位癌癥患者蓋著一床厚被子躺在床上呻吟。經過化療和放療,她的頭發(fā)已經稀稀疏疏,頭皮清晰可見。裸露在外的胳膊和腿,瘦得皮包骨頭。她緊閉雙眼,嘴里不時嘟囔著什么。守在她身邊的丈夫,愁眉不展,目光呆滯,偶爾下意識地給妻子掖掖被子?!凹依镉卸嗌馘X,也讓病折騰窮了。”他說。 在這三間預制板結構的樓房里,大理石地板、雪白的墻壁、寬大明亮的窗戶、墻上四大名樓的掛圖,以及一臺21英口寸的彩色電視機,多少彰顯出主人的能干和富足。如果不是癌癥拖垮了這個家庭,在這個舉目都是低矮房屋的村子里,樓房主人的生活一定會讓鄰居羨慕??涩F在,這間屋子里死氣沉沉。 “誰得病誰家就敗?!蓖踝忧逭f,有錢的人家,病人能多活兩天,沒錢的,就只能等死了。他一再表示,村子里錢都不好借,有錢也不敢借出去?!拔覀儢|孫樓窮,不是因為人懶,沒能力,而是因為癌癥。只要家里有病人,都得花上三兩萬塊。” 王子清的一位叔叔患了胃癌,家里拿不出錢為他填這個無底洞,于是,在一個夜深人靜的晚上,他上吊自殺了?!耙驔]錢看病上吊自殺的,村里已有好幾個。”他說。 人死了,葬禮照樣得辦?;鸹?000元,棺材1500元,孝服500~800元,靈車靈棚各100元,嗩吶100元。各種費用算下來,至少需要5000元。因外出和死亡的青壯年多,棺材都沒人抬,以至于吊車下葬,成了當地一個“熱門”行當。 由于貧窮,村里如今盜竊成風。王子清家原來的圍墻不高,人很容易翻墻進去?,F在,他已把原有的圍墻拆掉,準備加高?!拔遗滦⊥??!彼f。 村頭墻壁上,到處是觸目驚心的治療腹瀉、癌癥的廣告。有些患者無奈只能找江湖游醫(yī)尋求安慰;有些患者則只能求助“神”的力量。 黃孟營村33歲的孔鶴琴,19歲嫁到此地,26歲得了直腸癌,4次手術,12次化療,花了7 萬多元,如今家徒四壁,外債高筑。兩年前,“感到無望”的孔鶴琴皈依了基督。每周五,骨關節(jié)變形的她,都要坐在輪椅上,讓丈夫推著,到兩公里外的王寨村做禮拜。王寨村基督教堂的信徒蘆美英則表示,七八十名教友中,基本都是身體有病的人。 孫營村的村民孫振雨,不忍看著自己的鄉(xiāng)親們忍受癌癥的折磨,于1999年,籌錢2500元,修復了村里的華佗廟,“初一十五,香火很旺”。但華佗廟重修后4年,孫的愛人得了偏癱,至今臥病在床??蓢@的是,連塑華佗像的匠人也因癌癥而去世了。 與周邊“癌癥村”一樣,東孫樓村能參軍的人很少。有幾年,竟沒有一個體檢合格的。 “人活得都沒有希望了?!蓖踝忧逭f,“村里的人總擔心,下一個死的會不會是自己?!?  又黑又臭的衛(wèi)河在村口流過
都是污染造的孽 王子清家正對著一個大水塘,塘邊有幾棵樹,幾只白色的鴨子在水塘內戲水。如果不與癌癥發(fā)生聯系,塘邊樹下,靜坐垂釣,本該是件愜意的事。 像這樣的水塘,幾乎每個村子都有幾處,只是有些已經變成了傾倒生活垃圾的地方。在這個西北高、東南低的縣域內,因河流沖刷,坑塘較多。加之,上世紀50年代后期,當地人鼓足干勁,大修水利。干渠、支渠、斗渠、毛渠,通向每一個角落。四通八達的灌溉系統,造就了這個曾經的魚米之鄉(xiāng)。 東孫樓村也有一個發(fā)達的灌溉系統。東南西北四條水渠,將村南兩公里外的沙潁河水,輸送到地里田間。這個處于沈丘縣“鍋底”的村子,即使在非灌溉季節(jié),溝渠里也會積下不少的水。因此,這里幾乎一年四季浸淫在水中。 在王子清的記憶中,沙潁河和渠塘里的水曾經清澈透明。上世紀50年代,這里的人上地,“從來不帶水”。渴了,隨便在渠塘中掬一捧水就喝?!疤鹬?,比現在的自來水都好喝”。 可是,隨著上世紀80年代末、90年代初,沿河一些污染工業(yè)項目紛紛上馬,沙潁河水逐年開始變壞變臭,致使源自沙潁河的灌溉溝渠的水也變得腐臭難聞。在王子清的帶領下,記者沿著村里的溝渠水塘走了一遍。水面上覆蓋著一層綠油油的浮萍,樹葉、秸稈散落其中,蚊蟲猖獗,臭不可聞。 據沈丘縣水文站站長李斌提供的一份資料:沙潁河槐店(沈丘縣城所在地)段,1990年、 1994年、2000年均屬劣V類水質,已失去各種水體功能。中國環(huán)境監(jiān)測總站公布的水質監(jiān)測周報顯示:2005年和2006年,此段水質分別有兩次是Ⅳ 類水,其余時間皆為V類或劣V類;2007年第20周和21周的水質也均為劣V類。水體中高錳酸鉀和氨氮含量均超Ⅲ類水標準的數倍。 1994年7月中旬,淮河發(fā)生特大污染事故,在黑色污染團過后,水質有所好轉的情況下,安徽省蚌埠市自來水公司取3000公升淮河水送到上?;?,結果對比美國環(huán)境保護機構公布的129種“首要控制污染物”,蚌埠三水廠和一水廠的源水分別查出90種和95種,其中,致癌物高達67種。 淮河60%的來水量源自沙潁河,而沙潁河貫穿沈丘全境。今年4月,中國環(huán)境監(jiān)測總站對沙潁河的監(jiān)測報告顯示,其水質全部為劣V類。 “作為淮河最大支流,沙潁河的水質污染可想而知?!被春有l(wèi)士會長霍岱珊痛心地說。 有研究顯示,這些高污染、富含各種致癌物的水,通過發(fā)達的溝渠逐漸滲透到地下水系統,破壞了當地的地下水水質。據當地人反映,自1990年代以來,壓水井里壓出的水混濁不清,能看到明顯的雜質;有些地方的水,粘性特別大,能像油一樣流成細線狀;水燒開后,水壺上會留有厚厚的一層水垢;即使開水也苦澀難咽,喝下去后喉嚨會發(fā)麻。有媒體稱,“地下50米以上的淺層地下水已不能飲用”。而在沈丘,農戶自家的壓水井一般都在20米以上。 據阜陽市疾病預防控制中心2004年7月13日做出的一份水質檢測報告顯示:沈丘縣黃孟營村一家的壓井水送檢樣本中,有10多項指標超標,其中錳、硝酸鹽氮嚴重超標??茖W實驗證明,過量攝入高硝酸鹽氮的水或食物會引發(fā)消化道癌癥或者肝癌,而高錳的暴露會對大腦產生危害,使一些大腦皮層壞死,對人的智力發(fā)育甚至大腦神經活動產生危害。 “都是污染造的孽?!蓖踝忧逭f,雖然他本人不能從科學上證明沙潁河水污染和癌癥之間的因果關系,但生活經驗和直覺告訴他,嚴重污染的沙潁河是癌癥高發(fā)的直接元兇。 2005年,國家疾控中心曾對淮河流域癌癥高發(fā)地進行全面普查,其中包括沈丘縣全境,最終結論是:一、淮河流域沿河、近水區(qū)域癌癥高發(fā);二、癌癥高發(fā)與劣Ⅴ類淮河水密切相關。 而沈丘縣衛(wèi)生局一位副局長表示,雖然河水污染與癌癥之間一定有關聯,但關聯究竟有多大,專家還在研究實驗之中。 希望政府搭建一個公眾可以參與的平臺 沙潁河由沙河、潁河于周口匯流而成,自西向東流經河南中東部,全長600余公里,是淮河最大的支流。沈丘,是沙潁河入安徽的最后一站。 “你們得利,俺們得??;你們升遷,俺們升天。”這是流傳在沈丘縣民間的一則順口溜。主要針對的是坐落在沙潁河流域大大小小的企業(yè),其中不少為高污染企業(yè),比如造紙、皮革、塑料、酒類等等。這些企業(yè)中比較知名的有:項城市蓮花味精股份有限公司(下稱“蓮花味精”)、扶溝縣的扶溝味精廠、漯河的銀鴿實業(yè)集團以及丁集皮革業(yè)等。過去這些企業(yè)的工業(yè)污水基本上都排放在了沙潁河中。據當地人反映,前些年,沙潁河水色如墨汁、臭氣熏天,曾發(fā)生過嗆死人事件。 駙馬溝是項城市污水入沙潁河的一條人工河道。其污水源主要是城市生活污水和蓮花味精集團的工業(yè)廢水。 “以前這里臭氣熏天,活像一個化肥窖,人人都得捂著鼻子走?!?6歲的老船工連德財說。據老人描述,在沒有污染之前,這里的水清澈見底,如果有什么東西掉到水里,岸上看得一清二楚。水里的魚又多又大,經常能夠捕到十幾斤重的大魚。而現在,這里的魚幾乎絕跡。即使偶爾能捕撈上一兩條,也沒人敢吃。在污染最嚴重的時候,“水里的魚給什么喂,什么就死”。 據說,前幾年,水面上到處漂著白沫。有一次,不知何故,駙馬溝的水面竟然著火了,把泄水閘燒壞了。 “以前河里洗澡的人很多,每年都要淹死好幾個人?!边B德財說,“不過,水污染后也有好處,不會淹死人了。因為沒人去游泳了。” 僅這條小小的駙馬溝,污水一流就是十幾年,遲遲得不到治理。而早在1994年國家就啟動了治淮工程,歷經10年,投資600億,但至今未能實現“水體還清”的目標?;春痈闪髦Я鞯闹挝廴蝿?,依然十分嚴峻。 “環(huán)保局是屬地管理。很多污水都是從別處流到沈丘的,我們一點辦法也沒有。”9月5日,沈丘縣環(huán)保局副局長徐啟亮對記者說。沈丘縣水文站站長也表達了水文站的無能為力。他說,水文站的權限只限于取樣監(jiān)測,并沒有管理職能,因此,對治理幫不上真正的忙。他透露,有時地方政府出于利益保護,還會在一定程度上干涉水文站取水樣。 不過,在治污形成共識的今天,特別是在上級環(huán)保部門的重拳出擊下,一些企業(yè)已經被迫加入治污的行列。比如位于項城市的蓮花味精,這個昔日沙潁河的排污大戶,曾屢被媒體曝光并被罰款,10多年被迫為環(huán)保交了7億多元學費。項城市環(huán)保局前局長還因此“下課”,該市分管環(huán) 保工作的副市長,也因此被責令深刻檢查。 “做好環(huán)保是首先對企業(yè)的效益負責?!鄙徎ㄎ毒h(huán)保事業(yè)部負責人王飛對記者說,“我們企業(yè)曾經為環(huán)保付出過很慘痛的代價,幾次差點被關閉,因此絕不能再走老路了?!? “淮河衛(wèi)士”會長霍岱珊,在沙潁河治污問題上曾屢次和蓮花味精交涉,可謂“老對頭”。今天他也認為,蓮花味精“的確下了功夫改造自己”。 “企業(yè)在主觀上對自己負責了,在客觀上就對社會負責了?!被翎飞赫f,希望企業(yè)能夠意識到,做好環(huán)保是分內的事,是真正對企業(yè)發(fā)展負責的事。 少了蓮花味精的污水排放,駙馬溝的水質,在當地人看來,已經稍有好轉,臭味也不像以前那么明顯了。遠遠望去,幾個老人坐在樹蔭下乘涼,賣冷飲的小販在吆喝生意,更遠處的沙潁河大橋下,幾個孩子正在水中攀登橋墩。 今天,最讓霍岱珊頭疼的不再是像蓮花味精這樣的大企業(yè),而是許多名頭不響的小企業(yè)。這些小企業(yè)經常和政府職能部門玩“貓捉老鼠”的游戲。如果僅僅依靠政府職能部門的人手,根本無法發(fā)現不達標的排放,更不用說治理了。“更何況,有些地方政府還會刻意保護本地的企業(yè)”。 “政策宣傳就像文工團?!被翎飞赫f,“光有文工團不行,解決問題還要靠步兵,要打陣地戰(zhàn)。” “公眾就是步兵,就是打陣地戰(zhàn)的基礎?!被翎飞赫f,“組織公眾參與,可以形成對排污口的實時監(jiān)控。”他一再呼吁,希望政府搭建一個公眾可以參與的平臺,讓污染源無處隱身。
命都沒了,經濟發(fā)展了又能怎樣 王子清家先后打過4口井,依次是4米、15米、28米、40米。 井一次比一次打得深,但水的口感并沒有明顯變好。他自己也不知道這些水到底安全不安全,會不會讓自家人遠離癌癥。每逢周末,在外工作的兒子和在城里上學的孫女,總會帶些純凈水回來,這樣的水,全家人才敢放心地飲用。 3年前,在霍岱珊的聯絡下,亞洲博愛救助基金會為東孫樓村的全部村民安裝了水過濾器。盡管“ 這些設備并不能根本改變水質”,但村民們還是松了口氣。此后河南省財政每年安排4000萬元專項資金,用于解決重污染地區(qū)群眾飲水安全問題。沈丘縣也在這一年修建了污水處理廠。同年,有關部門還為東孫樓村打了一口200米的深水井,并提供了主管道、潛水泵和無塔供水裝置。入戶管道需各家自行購買,為此,王子清花了800多元。 2006年1月26日,即春節(jié)前三天,村里人第一次吃上了深井水。王子清把所有盛水的家伙都接得滿滿的,痛痛快快享受了一番。然而16天后,水停了,王子清獲知的消息是試運行。4個月后,深井水正式供應。不過,“經常是三天兩頭沒水”。 今年8月初,深井水又停供。王子清只能重新飲用40米的壓水井的水。可是,幾天后,他的胃開始不適,“一天到晚折騰個沒完”。其間,他的老伴過生日,因為沒水,他只得用摩托車載著老伴,到沈丘縣城過生日。 “潛水泵的功率太小,負荷太大。周邊幾個村的水,都是接東孫樓的水,電機超負荷運轉,燒壞了?!鄙罹芾韱T說,“潛水泵是水利局提供的,我到水利局找過,可水利局說沒有配件。” 這位管理員表示,自己曾和廠家聯系過,但總也聯系不上?!半姍C壞了,潛水泵就不能用了,得換新的”。 然而換潛水泵又產生一個問題:“水利局不給換”,村里又沒有錢,他不知道到哪兒去弄錢?!拔乙蚕脒^集資,但又怕集資違法?!惫芾韱T說,他只得挨家挨戶做工作,一家收三五元,先把大功率的潛水泵買回來,以便盡早讓村里人喝上“比較放心”的深井水。 另一個讓他頭痛的問題是,1元/噸的水費,還不夠付電費和管理費用。“實在沒錢,那就只好斷水了?!惫芾韱T搖了搖頭。 “以前,我最大的心愿就是村子里能打上一口深井?!蓖踝忧甯┥硗?,“可是三天兩頭斷水,成本又那么高,以后我們該怎么辦呢?” 雖然深井水供得斷斷續(xù)續(xù),可畢竟隔三岔五有了水吃。然而,有了深井水,并不意味著癌癥病魔從此就遠離了這個村莊?;翎飞阂郧奥撓颠^的一些癌癥患者,相繼都離開人世,現在不斷仍有新的患者的名字傳入他的耳朵。 王子清也常常擔心,活著的人會有各種隱疾。他希望有關部門能為村里的人做一些專項檢查,建立村民醫(yī)療檔案,并派專人檢驗一下深井水的水質,是否真正得到了改善。 雖然新農村建設的口號,在東孫樓村喊的與外面的世界一樣響,但老王真誠希望“不要僅僅是一陣風,僅僅是應付檢查”,而是能確實給村里改善一下環(huán)境,比如道路硬化,渠塘凈化,等等。 “命都沒了,經濟發(fā)展了又能怎樣?”王子清質問。 對于東孫樓村出現的新問題及群眾呼聲,沈丘縣衛(wèi)生局一位副局長稱,有關部門曾做出過應對措施,但這些應對措施還沒有公開,不便透露。 不過,霍岱珊倒是帶來一條好消息:一位日籍華裔將為村里提供生物過濾技術,據說應用此技術,屆時就可喝上“達標”的水。 “蓮花味精總經理高君也說了,他們公司將積極對待沙潁河的污染問題,要為歷史的欠債填坑(埋單)。”霍岱珊說。 盡管東孫樓村治污的腳步在加快,可村子外的污染仍在繼續(xù)。途經紙店鎮(zhèn)一帶,依然可聞到刺鼻的氣味。司機介紹說,那一帶的皮革廠很多,污染特別嚴重,許多樹都死了。記者沿途看到,溝渠里的水黑乎乎的,像是粘稠的發(fā)酵物,溝渠邊的幾行樹,葉子已經完全脫落,毫無生機。 一只野鴨子在不遠處的水塘里游弋,司機放慢車速,瞟了一眼。 “這年頭,能看到野鴨子可不是一件容易的事?!彼f。
---INLINE HOOK實現NDIS HOOK 前面講述了如何通過獲取NDIS_PROTOCOL_BLOCK來實現NDIS HOOK,這里講述第二種方法,那就是inline hook方法。說起inline hook,也不是什么新鮮玩意,無非是在一個函數的首部嵌入一個jmp機器指令,在該函數執(zhí)行有效代碼前就跳到我們的代理函數,在我們的代理函數里做了必要的處理以后,再跳回原來的函數,接著執(zhí)行原函數的指令。 既然tcpip.sys是標準的NDIS協議驅動,那么收包函數顯然應該是在tcpip.sys內部實現的,我們直接找到這兩個收包函數,然后對其inline hook不就可以了嗎?經過逆向分析,我找到了這兩個函數,本人安裝了兩個XP系統,其中一個導出了這兩個函數,另一個系統卻沒導出,所以我們仍然需要用特征碼搜索這兩個函數,這兩個函數聲明如下: NDIS_STATUS ARPRcv (NDIS_HANDLE BindContext, NDIS_HANDLE MacContext, UCHAR* HeadBuffer, ULONG HeadSize, UCHAR* Buffer, ULONG BufferSize, ULONG PacketSize); INT ARPRcvPacket (NDIS_HANDLE BindContext, PNDIS_PACKET Packet); 搜索這兩個函數地址的代碼如下: //以下全局變量保存兩個函數的地址 void* ARPRcv=NULL; void* ARPRcvPacket=NULL; void SearchProtocolRoutine() { //以下分別為兩個收包函數的特征碼 UCHAR ARPRcvBytes[] ={0x8b,0xff,0x55,0x8b,0xec,0x56,0x8b,0x75,0x08,0x33}; UCHAR ARPRcvPacketBytes[]={0x8b,0xff,0x55,0x8b,0xec,0x51,0x53,0x56,0x57,0x8b}; //獲取tcpip.sys模塊的基地址,該函數在前一節(jié)已經提供給大家 char* base=FindModule("tcpip.sys"); while(ARPRcv==NULL||ARPRcvPacket==NULL) { if(ARPRcv==NULL&& RtlCompareMemory(ARPRcvBytes,base,10)==10) { ARPRcv=base; } else if(ARPRcvPacket==NULL&& RtlCompareMemory(ARPRcvPacketBytes,base,10)==10) { ARPRcvPacket=base; } base++; } } 各種編譯器所編譯的函數,前幾個指令都是幾乎一樣的,用來建立堆棧幀,這些指令叫函數的序言。 在win2000上是三字節(jié) push ebp mov ebp, esp 到了winxp以及后續(xù)系統上,則變成了五字節(jié) mov edi, edi push ebp mov ebp, esp 而一個近跳轉指令剛好是五字節(jié),在xp上剛好覆蓋了函數的序言,所以在XP上掛鉤也相對容易一點,這里著重說明如何對ARPRcv進行掛鉤,我們在ARPRcv內部插入一個jmp指令,將跳到ARPRcvProx函數,該函數是個裸函數,函數實現如下: _declspec(naked) ARPRcvProx()//跳板函數 { _asm { mov edi, edi push ebp mov ebp ,esp //七個參數開始壓棧 push [ebp+20h] push [ebp+1ch] push [ebp+18h] push [ebp+14h] push [ebp+10h] push [ebp+0ch] push [ebp+8] call NewARPRcv //調用NewARPRcv函數 cmp eax,0x10003 //判斷函數返回值是否NDIS_STATUS_NOT_ACCEPTED jz end //如果是NDIS_STATUS_NOT_ACCEPTED,直接結束本函數 //而不跳回到ARPRcv函數 mov eax,ARPRcv //如果返回的不是NDIS_STATUS_NOT_ACCEPTED,將會 //執(zhí)行到這條指令,該指令將 ARPRcv函數的地址裝入eax add eax,5 //將ARPRcv地址值加上5,存入eax,表示即將跳轉的//地址 jmp eax //開始跳回ARPRcv體內 end: pop ebp retn 1ch } } 在該函數內部,又調用了NewARPRcv函數,原型和ARPRcv保持一致,也必須由我們自己實現: NDIS_STATUS NewARPRcv( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize ) { /* 在這里加入你的判斷邏輯代碼,是否攔截該數據 如果要攔截,則返回 NDIS_STATUS_NOT_ACCEPTED 否則返回NDIS_STATUS_SUCCESS,把數據交給ARPRcv處理 */ return NDIS_STATUS_SUCCESS; } 同樣的原理,我們在ARPRcvPacket里面插入jmp指令,將跳轉到ARPRcvPacketProx裸函數,該函數實現如下: _declspec(naked) ARPRcvPacketProx() { _asm { mov edi, edi push ebp mov ebp ,esp //兩個參數開始壓棧 push [ebp+0ch] push [ebp+8] call NewARPRcvPacket//調用NewARPRcvPacket cmp eax,0 //如果返回0則表示拒絕該數據包 jz end //直接返回本函數 mov eax ,ARPRcvPacket add eax ,5 jmp eax //跳回ARPRcvPacket函數第六個字節(jié) end: pop ebp retn 8 } } 在該函數內部,將會調用NewARPRcvPacket,函數實現如下: INT NewARPRcvPacket(NDIS_HANDLE BindContext, PNDIS_PACKET ndisPacket) { /* 在這里加入你的判斷邏輯,是否攔截該數據,如果要攔截,則返回0, 否則返回非0 */ DbgPrint("RcvPacket"); return 1; } 請仔細閱讀以上代碼的注釋,接下來,我們還必須提供一個函數實現安裝和卸載掛鉤功能 void PatchARPRcv(BOOLEAN isPatch)//isPatch為TRUE表示安裝掛鉤,為FALSE表示卸載掛鉤。 { /*即將用以下五個字節(jié)覆蓋ARPRcv函數前五個字節(jié) 這5個字節(jié)就是jmp XXXX指令的機器碼,因為跳轉的相對地址還需要 進一步計算,所以暫時用零填充 */ UCHAR patchBytes[5]={0xe9,0x00,0x00,0x00,0x00}; //即將用以下五個字節(jié)覆蓋ARPRcvPacket函數前五個字節(jié) UCHAR patchBytes2[5]={0xe9,0x00,0x00,0x00,0x00}; //保存原始函數的前五個字節(jié),方便以后恢復掛鉤 UCHAR restoreBytes[5]={0x8b,0xff,0x55,0x8b,0xec}; /* 以下兩行代碼計算跳轉的偏移量 */ int offset=(char*)ARPRcvProx-(char*)ARPRcv-5; int offset2=(char*)ARPRcvPacketProx-(char*)ARPRcvPacket-5; //修正patchBytes和patchBytes2中的相對地址 memcpy(patchBytes+1,&offset,4); memcpy(patchBytes2+1,&offset2,4); if(isPatch) { DisableWriteProtect();//禁止寫保護 memcpy(ARPRcv,patchBytes,5); memcpy(ARPRcvPacket,patchBytes2,5); EnableWriteProtect(); //開啟寫保護 } else { DisableWriteProtect(); memcpy(ARPRcv,restoreBytes,5); memcpy(ARPRcvPacket,restoreBytes,5); EnableWriteProtect(); } } 因為ARPRcv和ARPRcvPacket函數處于只讀頁,所以必須先禁用寫保護才能向其中插入代碼,禁用寫保護和開啟寫保護代碼如下: void DisableWriteProtect() { _asm{ cli mov eax, cr0 and eax, 0FFFEFFFFh mov cr0, eax } } void EnableWriteProtect() { _asm{ mov eax, cr0 or eax, not 0FFFEFFFFh mov cr0, eax sti } } 注意這些代碼暫時只適用XP系統,在win2000和win2003上都需要少許改動。
NDIS HOOK是專業(yè)級防火墻使用的一種攔截技術,NDIS HOOK的重點是如何獲得特定協議對應NDIS_PROTOCOL_BLOCK指針,獲得了該指針,接下來就可以替換該協議所注冊的收發(fā)函數,而達到攔截網絡數據的目的。 獲 得NDIS_PROTOCOL_BLOCK指針的方法一般是用NdisRegisterProtocol注冊一個新的協議,所獲得的協議句柄實際上就是一 個NDIS_PROTOCOL_BLOCK指針,順著該指針遍歷NDIS_PROTOCOL_BLOCK鏈表,就可以找到你所要掛鉤的協議所對應的 NDIS_PROTOCOL_BLOCK.之所以可以這樣做,是因為每注冊一個協議,系統都會把該協議對應的NDIS_PROTOCOL_BLOCK放置 在協議鏈表的開頭,該協議鏈表每個元素都是NDIS_PROTOCOL_BLOCK類型,代表一個已經注冊的協議。 事 實上我們需要的只是TCPIP協議族的NDIS_PROTOCOL_BLOCK指針,畢竟TCP,IP,ARP,ICMP等等幾乎所有我們感興趣的協議, 都是在tcpip.sys協議驅動里面實現的。如果我們只需要TCPIP協議所對應的NDIS_PROTOCOL_BLOCK,那么上面的方法就有點繁瑣 了。我們可以試著尋找更簡便的方法來獲得TCPIP協議的NDIS_PROTOCOL_BLOCK. 于 是我對tcpip.sys驅動進行了反匯編,發(fā)現NDIS_PROTOCOL_BLOCK指針存放在一個名為_ARPHandle的全局變量里面,所以如 果能找到_ARPHandle的地址,我們就成功了,我們完全可以把該全局變量的偏移量作為一個常量來使用,但這里純粹為了拓寬思路,我介紹另一種找到該 全局變量的方法。 Tcpip.sys有個導出函數叫IPDelayedNdisReEnumerateBindings,該函數內部曾經出現過_ARPHandle 的地址,為什么會出現它的地址呢,因為該函數內部調用過NdisReEnumerateProtocolBindings函數,懂得反匯編的應該知道,在 用call指令調用函數之前,必然會用到push指令將函數的參數壓到棧里面去,不巧的是, NdisReEnumerateProtocolBindings函數只有一個參數,而該參數恰恰是一個NDIS_PROTOCOL_BLOCK指針類 型,在這里,實際上就是把_ARPHandle當作參數傳給了 NdisReEnumerateProtocolBindings,所以_ARPHandle的地址必然會出現在push指令的后面,說具體一點,緊跟push指令的四個字節(jié)就是_ARPHandle的地址。 所以具體的思路就是這樣,先找到IPDelayedNdisReEnumerateBindings函數的地址,然后從該函數的地址開始搜索push指令的特征碼,搜到了以后,把緊跟push指令的四個字節(jié)作為指向NDIS_PROTOCOL_BLOCK指針的指針返回。 也許有的人會問,如果IPDelayedNdisReEnumerateBindings函數體內部出現過多次push指令,豈不是會搜出不正確的地址,事實上,雖然都叫push指令,然而在機器碼級別是不同的,push指令的機器碼表示有十幾種之多,用來區(qū)別不同的尋址方式,調用NdisReEnumerateProtocolBindings 時用的push指令字節(jié)序列是0xff35,這個push指令表示后面緊跟的四個字節(jié)是一個內存地址,而不是一個立即數或者寄存器之類的。知道了這些,我 們就可以清楚,在一個有限的地址范圍,0xff35的唯一性是可以得到滿足的。根據我的觀察,在win2000,winxp,win2003上面,IPDelayedNdisReEnumerateBindings本身是一個很短的函數,0xff35指令確實只出現過一次,所以該方法是很可靠的。 思路已經出來了,下面我把詳細的代碼給大家貼出來,理解這些代碼需要對windows Pe格式有所了解,如果你不想理解也行,代碼可以直接拿來用。 以下是我寫的一個 獲取內核模塊某個導出函數地址的 通用例程。這里主要是為了獲取tcpip.sys模塊的導出函數IPDelayedNdisReEnumerateBindings void* GetRoutineAddress(char* ModuleName,char* RoutineName) { PIMAGE_DOS_HEADER dos_hdr; PIMAGE_NT_HEADERS nt_hdr; PIMAGE_EXPORT_DIRECTORY export_dir; ULONG *fn_name, *fn_addr, i; char* base; base=(char*)FindModule(ModuleName);//該函數用來獲得內核模塊的基地址 if(!base) return NULL; DbgPrint("tcpip address:%p",base); dos_hdr = (PIMAGE_DOS_HEADER)base; if (dos_hdr->e_magic != IMAGE_DOS_SIGNATURE) return NULL; nt_hdr = (PIMAGE_NT_HEADERS)(base + dos_hdr->e_lfanew); export_dir = (PIMAGE_EXPORT_DIRECTORY)(base + nt_hdr->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress); fn_name = (ULONG *)(base + export_dir->AddressOfNames); fn_addr = (ULONG *)(base + export_dir->AddressOfFunctions); for (i = 0; i < export_dir->NumberOfNames; i++, fn_name++, fn_addr++) { if (strcmp(RoutineName, base + *fn_name) == 0) { return base + *fn_addr; } } return NULL; } 以下是FindModule函數的實現: void * FindModule(char *name) { ULONG i, n, *q; PSYSTEM_MODULE_INFORMATION p; void *base; ZwQuerySystemInformation(SystemModuleInformation, &n, 0, &n); q = (ULONG *)ExAllocatePool(PagedPool, n); ZwQuerySystemInformation(SystemModuleInformation, q, n * sizeof (*q), 0); p = (PSYSTEM_MODULE_INFORMATION)(q + 1); base = NULL; for (i = 0; i < *q; i++) { if (_stricmp(p.ImageName + p.ModuleNameOffset, name) == 0) { base = p.Base; break; } } ExFreePool(q); return base; } 以下是獲取tcpip協議的NDIS_PROTOCOL_BLOCK指針的函數 void* GetProtocolBlock() { char* base; char bytes[]={0xff,0x35}; base=GetRoutineAddress("tcpip.sys","IPDelayedNdisReEnumerateBindings"); while(RtlCompareMemory(base,bytes,2)!=2) { base++; } return **((void***)(base+2)); }
作者:小馬丁·路德·金 今天,我高興地同大家一起,參加這次將成為我國歷史上為了爭取自由而舉行的最偉大的示威集會。 100年前,一位偉大的美國人——今天我們就站在他象征性的身影下——簽署了《解放宣言》。這項重要法令的頒布,對于千百萬灼烤于非正義殘焰中的黑奴,猶如帶來希望之光的碩大燈塔,恰似結束漫漫長夜禁錮的歡暢黎明。 然而,100年后,黑人依然沒有獲得自由。100年后,黑人依然悲慘地蹣跚于種族隔離和種族歧視的枷鎖之下。100年后,黑人依然生活在物質繁榮翰海的貧困孤島上。100年后,黑人依然在美國社會中間向隅而泣,依然感到自己在國土家園中流離漂泊。所以,我們今天來到這里,要把這駭人聽聞的情況公諸于眾。 從某種意義上說,我們來到國家的首都是為了兌現一張支票。我們共和國的締造者在擬寫憲法和獨立宣言的輝煌篇章時,就簽署了一張每一個美國人都能繼承的期票。這張期票向所有人承諾——不論白人還是黑人——都享有不可讓渡的生存權、自由權和追求幸福權。 然而,今天美國顯然對她的有色公民拖欠著這張期票。美國沒有承兌這筆神圣的債務,而是開始給黑人一張空頭支票——一張蓋著“資金不足”的印戳被退回的支票。但是,我們決不相信正義的銀行會破產。我們決不相信這個國家巨大的機會寶庫會資金不足。 因此,我們來兌現這張支票。這張支票將給我們以寶貴的自由和正義的保障。 我們來到這塊圣地還為了提醒美國:現在正是萬分緊急的時刻?,F在不是從容不迫悠然行事或服用漸進主義鎮(zhèn)靜劑的時候?,F在是實現民主諾言的時候?,F在是走出幽暗荒涼的種族隔離深谷,踏上種族平等的陽關大道的時候?,F在是使我們國家走出種族不平等的流沙,踏上充滿手足之情的磐石的時候。現在是使上帝所有孩子真正享有公正的時候。 忽視這一時刻的緊迫性,對于國家將會是致命的。自由平等的朗朗秋日不到來,黑人順情合理哀怨的酷暑就不會過去。1963年不是一個結束,而是一個開端。 如果國家依然我行我素,那些希望黑人只需出出氣就會心滿意足的人將大失所望。在黑人得到公民權之前,美國既不會安寧,也不會平靜。反抗的旋風將繼續(xù)震撼我們國家的基石,直至光輝燦爛的正義之日來臨。 但是,對于站在通向正義之宮艱險門檻上的人們,有一些話我必須要說。在我們爭取合法地位的過程中,切不要錯誤行事導致犯罪。我們切不要吞飲仇恨辛酸的苦酒,來解除對于自由的飲渴。 我們應該永遠得體地、紀律嚴明地進行斗爭。我們不能容許我們富有創(chuàng)造性的抗議淪為暴力行動。我們應該不斷升華到用靈魂力量對付肉體力量的崇高境界。 席卷黑人社會的新的奇跡般的戰(zhàn)斗精神,不應導致我們對所有白人的不信任——因為許多白人兄弟已經認識到:他們的命運同我們的命運緊密相連,他們的自由同我們的自由休戚相關。他們今天來到這里參加集會就是明證。 我們不能單獨行動。當我們行動時,我們必須保證勇往直前。我們不能后退。有人問熱心民權運動的人:“你們什么時候會感到滿意?”只要黑人依然是不堪形容的警察暴行恐怖的犧牲品,我們就決不會滿意。只要我們在旅途勞頓后,卻被公路旁汽車游客旅社和城市旅館拒之門外,我們就決不會滿意。只要黑人的基本活動范圍只限于從狹小的黑人居住區(qū)到較大的黑人居住區(qū),我們就決不會滿意。只要我們的孩子被“僅供白人”的牌子剝奪個性,損毀尊嚴,我們就決不會滿意。只要密西西比州的黑人不能參加選舉,紐約州的黑人認為他們與選舉毫不相干,我們就決不會滿意。不,不,我們不會滿意,直至公正似水奔流,正義如泉噴涌。 我并非沒有注意到你們有些人歷盡艱難困苦來到這里。你們有些人剛剛走出狹小的牢房。有些人來自因追求自由而遭受迫害風暴襲擊和警察暴虐狂飆摧殘的地區(qū)。你們飽經風霜,歷盡苦難。繼續(xù)努力吧,要相信:無辜受苦終得拯救。 回到密西西比去吧;回到亞拉巴馬去吧;回到南卡羅來納去吧;回到佐治亞去吧;回到路易斯安那去吧;回到我們北方城市中的貧民窟和黑人居住區(qū)去吧。要知道,這種情況能夠而且將會改變。我們切不要在絕望的深淵里沉淪。 朋友們,今天我要對你們說,盡管眼下困難重重,但我依然懷有一個夢。這個夢深深植根于美國夢之中。 我夢想有一天,這個國家將會奮起,實現其立國信條的真諦:“我們認為這些真理不言而喻:人人生而平等?!? 我夢想有一天,在佐治亞州的紅色山崗上,昔日奴隸的兒子能夠同昔日奴隸主的兒子同席而坐,親如手足。 我夢想有一天,甚至連密西西比州——一個非正義和壓迫的熱浪逼人的荒漠之州,也會改造成為自由和公正的青青綠洲。 我夢想有一天,我的四個小女兒將生活在一個不是以皮膚的顏色,而是以品格的優(yōu)劣作為評判標準的國家里。 我今天懷有一個夢。 我夢想有一天,亞拉巴馬州會有所改變——盡管該州州長現在仍滔滔不絕地說什么要對聯邦法令提出異議和拒絕執(zhí)行——在那里,黑人兒童能夠和白人兒童兄弟姐妹般地攜手并行。 我今天懷有一個夢。 我夢想有一天,深谷彌合,高山夷平,歧路化坦途,曲徑成通衢,上帝的光華再現,普天下生靈共謁。 這是我們的希望。這是我將帶回南方去的信念。有了這個信念,我們就能從絕望之山開采出希望之石。有了這個信念,我們就能把這個國家的嘈雜刺耳的爭吵聲,變?yōu)槌錆M手足之情的悅耳交響曲。有了這個信念,我們就能一同工作,一同祈禱,一同斗爭,一同入獄,一同維護自由,因為我們知道,我們終有一天會獲得自由。 到了這一天,上帝的所有孩子都能以新的含義高唱這首歌: 我的祖國,可愛的自由之邦,我為您歌唱。這是我祖先終老的地方,這是早期移民自豪的地方,讓自由之聲,響徹每一座山崗。 如果美國要成為偉大的國家,這一點必須實現。因此,讓自由之聲響徹新罕布什爾州的巍峨高峰! 讓自由之聲響徹紐約州的崇山峻嶺! 讓自由之聲響徹賓夕法尼亞州的阿勒格尼高峰! 讓自由之聲響徹科羅拉多州冰雪皚皚的洛基山! 讓自由之聲響徹加利福尼亞州的婀娜群峰! 不,不僅如此;讓自由之聲響徹佐治亞州的石山! 讓自由之聲響徹田納西州的望山! 讓自由之聲響徹密西西比州的一座座山峰,一個個土丘! 讓自由之聲響徹每一個山崗! 當我們讓自由之聲轟響,當我們讓自由之聲響徹每一個大村小莊,每一個州府城鎮(zhèn),我們就能加速這一天的到來。那時,上帝的所有孩子,黑人和白人,猶太教徒和非猶太教徒,耶穌教徒和天主教徒,將能攜手同唱那首古老的黑人靈歌:“終于自由了!終于自由了!感謝全能的上帝,我們終于自由了!” □□ 馬丁·路德·金(公元1929—1968年),美國黑人律師,著名黑人民權運動領袖。一生曾三次被捕,三次被行刺,1964年獲諾貝爾和平獎。1968年被種族主義分子槍殺。他被譽為近百年來八大最具有說服力的演說家之一。1963年他領導25萬人向華盛頓進軍“大游行”,為黑人爭取自由平等和就業(yè)。馬丁·路德·金在游行集會上發(fā)表了這篇著名演說。 ?。╞ob錄自中國文史出版社《世紀檔案》)---------------------------- 附:英文原文----------------------------i have a dreamby martin luther king, jr.delivered on the steps at the lincoln memorial in washingtond.c. on august 28, 1963five score years ago, a great american, in whose symbolic shadowwe stand signed the emancipation proclamation. this momentousdecree came as a great beacon light of hope to millions of negroslaves who had been seared in the flames of withering injustice.it came as a joyous daybreak to end the long night ofcaptivity.but one hundred years later, we must face the tragic fact thatthe negro is still not free. one hundred years later, the lifeof the negro is still sadly crippled by the manacles ofsegregation and the chains of discrimination. one hundred yearslater, the negro lives on a lonely island of poverty in themidst of a vast ocean of material prosperity. one hundred yearslater, the negro is still languishing in the corners of americansociety and finds himself an exile in his own land. so we havecome here today to dramatize an appalling condition.in a sense we have come to our nation's capital to cash a check.when the architects of our republic wrote the magnificent wordsof the constitution and the declaration of independence, theywere signing a promissory note to which every american was tofall heir. this note was a promise that all men would beguarranteed the inalienable rights of life, liberty, and thepursuit of happiness.it is obvious today that america has defaulted on thispromissory note insofar as her citizens of color are concerned.instead of honoring this sacred obligation, america has giventhe negro people a bad check which has come back markedinsufficient funds.justice is bankrupt. we refuse to believe that there areinsufficient funds in the great vaults of opportunity of thisnation. so we have come to cash this check -- a check that willgive us upon demand the riches of freedom and the security ofjustice. we have also come to this hallowed spot to remindamerica of the fierce urgency of now. this is no time to engagein the luxury of cooling off or to take the tranquilizing drugof gradualism. now is the time to rise from the dark anddesolate valley of segregation to the sunlit path of racialjustice. now is the time to open the doors of opportunity to allof god's children. now is the time to lift our nation from thequicksands of racial injustice to the solid rock ofbrotherhood.it would be fatal for the nation to overlook the urgency of themoment and to underestimate the determination of the negro. thissweltering summer of the negro's legitimate discontent will notpass until there is an invigorating autumn of freedom andequality. nineteen sixty-three is not an end, but a beginning.those who hope that the negro needed to blow off steam and willnow be content will have a rude awakening if the nation returnsto business as usual. there will be neither rest nor tranquilityin america until the negro is granted his citizenship rights.the whirlwinds of revolt will continue to shake the foundationsof our nation until the bright day of justice emerges.but there is something that i must say to my people who stand onthe warm threshold which leads into the palace of justice. inthe process of gaining our rightful place we must not be guiltyof wrongful deeds. let us not seek to satisfy our thirst forfreedom by drinking from the cup of bitterness and hatred.we must forever conduct our struggle on the high plane ofdignity and discipline. we must not allow our creative protestto degenerate into physical violence. again and again we mustrise to the majestic heights of meeting physical force with soulforce. the marvelous new militancy which has engulfed the negrocommunity must not lead us to distrust of all white people, formany of our white brothers, as evidenced by their presence heretoday, have come to realize that their destiny is tied up withour destiny and their freedom is inextricably bound to ourfreedom. we cannot walk alone.and as we walk, we must make the pledge that we shall marchahead. we cannot turn back. there are those who are asking thedevotees of civil rights, "when will you be satisfied?" we cannever be satisfied as long as our bodies, heavy with the fatigueof travel, cannot gain lodging in the motels of the highways andthe hotels of the cities. we cannot be satisfied as long as thenegro's basic mobility is from a smaller ghetto to a larger one.we can never be satisfied as long as a negro in mississippicannot vote and a negro in new york believes he has nothing forwhich to vote. no, no, we are not satisfied, and we will not besatisfied until justice rolls down like waters and righteousnesslike a mighty stream.i am not unmindful that some of you have come here out of greattrials and tribulations. some of you have come fresh from narrowcells. some of you have come from areas where your quest forfreedom left you battered by the storms of persecution andstaggered by the winds of police brutality. you have been theveterans of creative suffering. continue to work with the faiththat unearned suffering is redemptive.go back to mississippi, go back to alabama, go back to georgia,go back to louisiana, go back to the slums and ghettos of ournorthern cities, knowing that somehow this situation can andwill be changed. let us not wallow in the valley of despair.i say to you today, my friends, that in spite of thedifficulties and frustrations of the moment, i still have adream. it is a dream deeply rooted in the american dream.i have a dream that one day this nation will rise up and liveout the true meaning of its creed: "we hold these truths to beself-evident: that all men are created equal."i have a dream that one day on the red hills of georgia the sonsof former slaves and the sons of former slaveowners will be ableto sit down together at a table of brotherhood.i have a dream that one day even the state of mississippi, adesert state, sweltering with the heat of injustice andoppression, will be transformed into an oasis of freedom andjustice.i have a dream that my four children will one day live in anation where they will not be judged by the color of their skinbut by the content of their character.i have a dream today.i have a dream that one day the state of alabama, whosegovernor's lips are presently dripping with the words ofinterposition and nullification, will be transformed into asituation where little black boys and black girls will be ableto join hands with little white boys and white girls and walktogether as sisters and brothers.i have a dream today.i have a dream that one day every valley shall be exalted, everyhill and mountain shall be made low, the rough places will bemade plain, and the crooked places will be made straight, andthe glory of the lord shall be revealed, and all flesh shall seeit together.this is our hope. this is the faith with which i return to thesouth. with this faith we will be able to hew out of themountain of despair a stone of hope. with this faith we will beable to transform the jangling discords of our nation into abeautiful symphony of brotherhood. with this faith we will beable to work together, to pray together, to struggle together,to go to jail together, to stand up for freedom together,knowing that we will be free one day.this will be the day when all of god's children will be able tosing with a new meaning, "my country, 'tis of thee, sweet landof liberty, of thee i sing. land where my fathers died, land ofthe pilgrim's pride, from every mountainside, let freedom ring."and if america is to be a great nation this must become true. solet freedom ring from the prodigious hilltops of new hampshire.let freedom ring from the mighty mountains of new york. letfreedom ring from the heightening alleghenies of pennsylvania!let freedom ring from the snowcapped rockies of colorado!let freedom ring from the curvaceous peaks of california!but not only that; let freedom ring from stone mountain ofgeorgia!let freedom ring from lookout mountain of tennessee!let freedom ring from every hill and every molehill ofmississippi. from every mountainside, let freedom ring.when we let freedom ring, whem we let it ring from every villageand every hamlet, from every state and every city, we will beable to speed up that day when all of god's children, black menand white men, jews and gentiles, protestants and catholics,will be able to join hands and sing in the words of the oldnegro spiritual, "free at last! free at last! thank godalmighty, we are free at last!"
I'm not sure what it is, but there continues to be some sort of "competition" for "who can find the biggest bug" -- as if attackers had to choose, and more importantly, as if any bug was so big that it could not be made even better by combined use with its "competition". Before my DNS talk, my old friend FX from Recurity Labs was comparing DNS issues to the Debian Non-Random Number Generator issue that caused all sorts of SSL certificates to offer no security value, and the SNMPv3 flaws that allowed infrastructure devices to be remotely administered by people who happened not to know the password. Of course, after the talk, it became clear that the DNS hack and the Debian NRNG combined rather destructively -- DNS allowed you to finally play MITM with all the SSL private keys you could trivially compute, and as Ben Laurie found, this included the keys for Sun's OpenID authentication provider. And, since the DNS hack turns Java back into a universal UDP and TCP gateway, we end up being able to log into SNMPv3 devices that would otherwise be protected behind firewalls. So there's no sense making a competition out of it. There's just an ever growing toolchest, growing from a single emerging theme: Weaknesses in authentication and encryption, some which have been known to at least some degree for quite some time and many of which are sourced in the core design of the system, continue to pose a threat to the Internet infrastructure at large, both by corrupting routing, and making those corrupted routes problematic. Back in July, the genuinely brilliant Halvar Flake posted the following regarding the entire DNS issue: "I fail to understand the seriousness with which this bug is handled though. Anybody who uses the Internet has to assume that his gateway is owned." And thus, why 75% of my Black Hat talk was on the real-world effectiveness of Man-In-The-Middle attacks: Most people aren't as smart as Halvar. I'm certainly not :) Almost nobody assumes that their gateway is owned -- and even those that do, and try to engineer around it, deploy ineffective protections that are only "secure unless there's an attacker". I say this is a theme, because it is the unifying element between some of the year's most high profile flaws. There are two subclasses -- some involve weak authentication migrating traffic from one location to another, while others involve weak authentication allowing an attacker to read or modify traffic migrated to him -- but you'd have to have some pretty serious blinders to not see the unifying theme of weak authentication leads to pwnage. Consider: Luciano Bello's Debian NRNG: This involves a core design requiring the generation of random numbers, but the random number generator required a random seed, but alas, the seed was made insufficiently random. It's an implementation flaw, but barely -- and the effect was catastrophic failure against members of the X.509 PKI authentication system that had used the Debian NRNG, and thus by extension SSL's encryption logic and OpenID (for Sun's) authentication gateway. Wes Hardakar's SNMPv3 Bug: Here, we have an authentication protocol that allows an attacker to declare how many bytes he wants to have to correctly provide. Now, the attacker can claim "just 1 please" -- and he gets into any router suffering this bug within seconds. That, by extension, allows control over all traffic traversing that router. Mike Zusman's Insecure SSL-VPN's: SSL is supposed to protect us, but there's no sense creating a secure session to someone if you don't actually know who they are. Don't worry though, by design anything that isn't a web browser is terrifyingly likely to only to skip authentication entirely and just create an encrypted link to whoever's responding. One would think that SSL-VPN's, whose sole purpose is to prevent attackers from accessing network traffic, would be immune. But with 42% of certificates on the Internet being self-signed, and a lot of them being for SSL-VPN's, one would be wrong. By extension this auth failure exposes all traffic routed over these SSL-VPN's. Mike Perry's Insecure Cookies: This gets interesting. Here we have two different authentication protocols in place -- one, from server to client, based on X.509. The other, from client to server, based on a plaintext password (delivered, at least, over an encrypted session authenticated by the server-to-client cert). But to prevent the user from needing to repeatedly type in their plaintext password, a password-equivalent token (or cookie) is handed to the user's browser, which will be attached to every request within the securely encrypted channel. Unfortunately, it'll also be attached to every request which does not traverse the securely encrypted channel, because the cookies aren't marked for secure-only. Once the cookie leaks, of course, it'll authenticate a bad guy who creates an encrypted session to that server. So by extension bad guys get to play in any number of interesting sites. My DNS flaw: Here we have a protocol that directly controls routing decisions, ultimately designed to authenticate its messages via a random number between 0 and 65535. Guess the number, and change routing. This was supposed to be OK, because you could only guess a certain number of times per day. There was even an RFC entirely based around this time limit. It turns out there's a good dozen ways around that limit, allowing anonymous and even almost 100% packet spoofed compromise of routing decisions. This, by extension, allowed exploitation of all traffic that was weakly authenticating. It's the same story, again and again. And now, everyone talking about BGP. So lets do the same sort of analysis on BGP: Kapela and Pilosov's BGP flaw: In BGP, only the nearest neighbor is authenticated. The concept is that all "members of the club" authenticate all other members, while the actual data they provide and distribute is trusted. If it's not actually trusted, anyone can hijack traffic from anyone else's routes. Pilosov's done some cool work here. It's not the sort of devastating surprise some people seem to want it to be. Indeed, that's what makes it so interesting. BGP was actually supposed to be broken, in this precise manner. Literally, in every day use, any BGP administrator has always had the ability to hijack anyone else's traffic. Pilosov has a new, even beautiful MITM attack, but as mine was not the first DNS attack, his is not the first BGP MITM. Tales of using BGP to force traffic through a compromised router (possibly compromised through SNMPv3) are legion, and Javascript and the browser DOM blur things pretty fiercely in terms of the relevance of being able to pass through to the legitimate endpoint anyway. That's not to take away from the work. It's an interesting trick. But we need to level set here: First, if you're not part of the BGP club, you're just not running this attack. Pakistan took out YouTube with BGP -- but some random kid with the ability to spoof IP packets couldn't. In other words, we're just not going to see a Metasploit module anyone can run to complete these sorts of attacks. Now, there are some entertaining combinatorics that could be played -- DNS to enable Java's SNMPv3 access to internal routers at an ISP, and then from that internal router running the sort of BGP tricks Pilosov's talking about. This goes back to the utter folly of trying to rank these bugs independently from one another. But these sort of combinatorics are at a fundamentally different level than the fire-and-forget antics that DNS allowed, and on a fundamental level, the number of potential attackers (and the number of involved defenders) on BGP is a lot lower. Second, we have far better logging -- and thus accountability -- in the BGP realm than we do perhaps for any other protocol on the Internet. Consider the archives at APNIC -- yes, that's route history going back to 1999 -- and Renesys has even more. That sort of forensic data is unimaginable for anything else, least of all DNS. BGP may have its fair share of bad actors -- consider spammers who advertise temporary ranges in unused space for mail delivery purposes, thus getting around blackholes -- but any of the really nasty stuff leaves a paper trail unmatched by any other attack. Third, BGP is something of a sledgehammer. Yes, you're grabbing traffic -- but your control over exactly what traffic you grab is fairly limited. Contrast that with DNS, which allows astonishingly fine grained targeting over exactly what you grab -- indeed, you don't even need to know in advance what traffic you want. The victim network will simply offer you interesting names, and you get to choose on the fly which ones you'll take. These names may even be internal names, offering the impossible-with-BGP attack of hijacking traffic between two hosts on the exact same network segment. Finally, BGP suffers some limitations in visibility. Simply grabbing traffic is nice, but bidirectional flows are better than unidirectional flows, and when you pull something off via DNS, you're pretty much guaranteed to grab all the traffic from that TCP session even if you stop any further poisoning attempts. Contrast that with BGP, which operates at Layer 3 and thus may cause the IP packets to reroute at any point when the TCP socket is still active. So, does that mean its always better to attack DNS than BGP? Oh, you competitive people would like things to be so simple, wouldn't you Pilosov and I talked for about a half hour at Defcon, and I've got nothing but respect for his work. Lets look at the other side of things for a moment. First, BGP controls how you route to your name server -- if not your recursive server, which may be inside your organization and thus immune to ext
鑰匙, 被遺忘在19樓; 慢慢的消沉, 有限的生命. 80樓的門, 還要多久才能開啟. 太多的幻像, 被遺忘的鑰匙; 還在爬的樓梯, 什么時間可以拾起, 那被遺忘的鑰匙. 重正, 那昔日的雄風; 蔚藍的天空, 在等待著我們. 
李國棟床上堆著書,每天晚上睡在榻榻米上,讀書讀到凌晨一兩點,讀到兩眼充血,像針扎一樣痛苦,才把書放開。蜷縮到榻榻米上,用繩子把左腿跟一只桌腳綁在一起,熄了燈睡覺。 “這樣一來,我一翻身,扯不動腿,就會醒過來。醒過來就馬上爬起來繼續(xù)看書——今年是第三年了,再考不上,就要當兵去了!” 高考前,李國棟很平靜地這樣解釋他的生活方式。他消瘦的臉頰上浮著一層暗暗的青氣,眼白里滿是一條條細細的血絲。講話的時候,眼神渙散,不知道他在看哪里。 “為什么不換個讀書方法?這種煎熬式讀書不是效果很差嗎?” 他搖搖頭:“我不知道還有什么別的方法?!?br> “為什么不找其他出路?不上大學,去讀職?;驅W技術?” 他開始咬指甲,每一片指甲都咬得爛爛毛毛的:“不行,我非讀大學不可?!?br> 李國棟后來仍舊落了榜,但是也沒去當兵。他在精神病院里住了兩個星期之后,有個晚上,偷偷吞了五枚大鐵釘,從七樓的陽臺上跳下來,剛好掉在垃圾車旁邊。 麥爾教授對老鼠很有興趣,曾經做過這樣的實驗。 他把老鼠聚集在一個平臺上,讓它們一個個往下面兩個門上跳。跳向左門,它會碰得鼻青臉腫;跳向右門,門就會打開,門后是甜美的乳酪。小老鼠當然不笨,訓練幾次后,就快快樂樂地往右門跳去,不再摔得一鼻子灰。 可是,就在小老鼠的選擇方式固定了的時候,麥爾把乳酪從右門移到左門。本來以為可以飽食一頓的老鼠現在又碰得鼻青臉腫,它不知道客觀情勢已經改變了。幸好,摔了幾次后,它又漸漸熟悉了新的情況,原來乳酪在左邊! 問題是,麥爾又有了新花樣。他把門的顏色重新漆過,把乳酪一會兒放左,一會兒放右。老鼠在新的習慣形成之后,發(fā)覺原來的方式又行不通了,它必須不斷地適應新情況,不斷地修正自己的習慣行為…… 終于,老鼠變不過來了,它的下一個反應就是“以不變應萬變”。麥爾發(fā)覺,在應變不過來的時候,老鼠“擰”了,開始固執(zhí)起來,根本就拒絕改變方式。譬如說,如果它已經習慣于跳向左門,你就是把乳酪明明白白地放在右門上,讓它看見,它仍舊狠狠地往左門去碰腫鼻子,愈碰就愈緊張。如果實驗者在這個關口繼續(xù)強迫它去作跳左或跳右的抉擇,老鼠就往往會抽筋、狂奔、東撞西跌或咬傷自己,然后全身顫抖直到昏迷為止。換句話說,這只老鼠已經“精神崩潰”了。 于是,麥爾教授歸納出導致老鼠“精神崩潰”的五個階段: 首先,對某一個難題(左門或右門),讓老鼠逐漸培養(yǎng)出一種應對的習慣來(選擇右門:右門有乳酪)。 第二個階段,客觀環(huán)境改變,老鼠發(fā)覺慣有的方式已經不能解決問題,因此感到恐懼。 第三個階段,不斷的焦慮與挫折、失敗之后,它就固執(zhí)地以舊有的方式面對新的情況,不計后果(就是看見乳酪出現在右邊,仍舊往左邊闖)。 第四個階段,根本放棄努力(乳酪也不吃了,干脆餓死)。 最后,如果外力迫使它非解決問題不可,它就又回到它所習慣的舊方式(左門就是左門,非左門不可)。當然又碰得鼻青臉腫,餓得頭昏眼花。明明只要換個途徑就可解決一切,它卻固執(zhí)地在習慣行為中飽受挫折與失敗的煎熬,最后以崩潰結束。 在垃圾車邊被清潔工人發(fā)現的李國棟是一只弄“擰”了的老鼠,我們的社會環(huán)境與教育制度是控制乳酪、制造難題的科學家。從前,大學之門是通往乳酪的門,所有的人都往那個門上跳?!笆看蠓颉庇^念深深地植入人們心中,因為我們發(fā)覺成了“士大夫”之后就有甜美的乳酪可吃。但是,在大家都習慣了這個方式之后,客觀情況卻變了,乳酪換了門。往“士大夫”那個門撞去,就會撞個鼻青臉腫,而且得不到乳酪。 可是孩子們繼續(xù)去撞那一扇門。做父母的也繼續(xù)鼓勵孩子們去撞那扇沒有乳酪的門。他們說“有志者,事竟成”;說“精誠所至,金石為開”;說“老天不負苦心人”。門的顏色變了,乳酪的位置換了,可是弄“擰”了的人固執(zhí)地守著舊有的方式“以不變應萬變”。 一個人,也只不過是只有可能精神崩潰的老鼠。人生的每個階段里都有看似不可解的難題時時強迫他作出抉擇:考試失敗了、愛人變心了、婚姻破裂了、工作失去了,每一個難題都需要一個解決的辦法。究竟乳酪在左邊還是右邊?不管左右,當一個人不再能以“新”的方式來應付“新”的情況,當他不計后果,根本拒絕改變自己的時候,他就是一只弄“擰”了的老鼠,精神的解體只是自然的結局。如何能不受制于舊習慣、舊觀念、舊方法,如何不因搞“擰”了老去撞一扇沒有乳酪的門,需要的是彈性與智慧。 智慧,不正是人之所以為人,鼠之所以為鼠的差別嗎?
|