好文,轉了
逆向工程不是炫耀者用來裝B的工具
By Azy
逆向工程不是炫耀者用來裝B的工具,因為逆向工程從來就是個腦力活加體力活,同時也是對逆向者身心的極大摧殘和對意志力的嚴峻考驗。它需要時間,更需要毅力,任何半途而廢的舉動都會導致前功盡棄的結果。而這些成本我相信都是那些想要炫耀一時的浮躁者所不肯付出的。
如果說反匯編只是功力不足的浮躁者或者是對解剖對象的不屑者走馬觀花式的分析舉動,那么逆向工程就是長期浸淫于此的心靜者和對二進制強烈好奇的探險者令人景仰的還原行為。而對于逆向者本人來講,這更像是一次艱苦的旅行,但途中卻不乏美麗的風景。它是一種大部分時間讓人處于崩潰的邊緣,但偶爾會讓你迸發出發現新大陸的興奮而能有資本和動力繼續崩潰下去的這樣一個東西。
真正的逆向者知道,僅僅靠激情是不能過活的。只有激情,遠遠不夠,因為它充其量只是一個必要而非充分條件。
人們對于研究人員和科學家的最最基本的尊崇應該源自他們工作的腦力復雜度與社會價值性。即首先,他們做的這件事不是誰都可以做,需要有一定的知識積累和智力基礎;其次,他們的工作應該是有價值,有意義的,而不是將“認識世界的目的在于改造世界”的理論拋在腦后。當scz將自己逆向還原出來的ntdll中有關堆函數的資料公開時,得到了無數人的頂禮膜拜。因為這件工作一有技術含量二有實際價值,技術含量在于windows堆管理機制系統與算法上的復雜,實際價值在于為漏洞研究人員提供了絕佳的堆溢出理論指導與技術支持。
但是現在,我卻發現真正有意義的逆向越來越少。我無法評論那些工作于地下的低調逆向者,或許他們所做的工作極有技術含量與價值,我所能看到的是充斥在周圍的一些不明就里的逆向,我不知道這到底有什么意義。
我并不反對逆向與反匯編,確實也需要有人來公開軟件內部的機制,尤其是在病毒研究領域,反匯編和逆向工程更是安全人員的飯碗與家常便飯,因為這是他們的工作。
但對目前將安全技術當作業余愛好并有意朝此方向發展的人來講,是不是應該思考追求一種更加有價值的逆向,而不是簡單粗糙的涂改一下IDB就自信滿滿地將其上傳并期待高倍的頁面訪問與別人的贊美之詞。
或許有很多初學者或是已經入門了的人都沒有想過:為什么要反匯編,為什么要逆向。他們為了逆向而拋棄了一些根本上的東西。究其原因,或者稱做我個人主觀上的猥鎖猜測:逆向讓他們處于一種虛幻的"編碼安全感"之中。他們可以意淫地說:源代碼指定是我的了,只是逆不逆的問題。因為一個bin就放在那兒,所有的數據結構和算法流程都已經組織好,所要做的就是去讀懂它,根本不用考慮在編程過程中的一切細節,也不用去擔憂任何項目進度,而實際上這是一種心理上可怕的自我欺騙。
所以,被腦力與體力勞動以及高技術含量等光環所縈繞的逆向工程對于初學者而言有時更像一劑毒藥,吞噬與消化了他們的創造力與想象力,它讓人變懶,讓人產生隋性,讓人產生依賴。在強烈地滿足了受害人的好奇心與獵奇欲的同時也將他們無形地匡入一個巨大的方框之中。而這個框的巨大危害就在于它使人們明白這祥一個事實:原來高手是這樣寫的,只有這樣做才是正確的流程,我也要這樣做。
學習是一個過程,但當這個過程通過一些所謂的捷徑跨越了數個階段而最終到達目的地的時候我不知道會不會生成畸形的產物,也許處于這個過程的人根本就走錯了路,迷失了自己,忘了自己原來要做什么而只是在盲目的跟風,研究別人的東西而丟了自己的核心競爭力,并且天真的認為這些逆出來的產物只是對自己才是透明的,殊不知它的創造者只是不忍心揭穿你給你留一點面子罷了。也許在那些受益于你成果的人面前你是一個或許還比較偉大的"解密者",但在原始作者看來你只是一個猥鎖的"偷窺者"。他把你往好了想會定位為一種公開與共享的行為,往壞了想那就是你隨時準備PQ他的代碼。
無知并不可怕,可怕的是我們丟掉了想象力和創造力并虔誠地跪拜于一個死板的知識框架內高呼“萬歲”。我們應該意識到:思想比技術更加重要。
所以,對于初學者來說,停掉那些無意義的反匯編與逆向吧,或者讓它再上一個層次。創新比重復更有意義。逆向做為一種借鑒更加合適而不必成為學習或創新的必須手段。
如果可以將反匯編與逆向工程上升到發掘漏洞的高度,那么你就不會僅僅滿足于了解程序的內部工作機制。因為你有了更高的目標:subversion。即使發現不了什么0day,你也會發現原來的那份一發現冰山一角就迫不及待地想將其公開發表的浮躁情緒已蕩然無存。
如果將反匯編與逆向工程上升到把它當作自己產品級工程的一次借鑒,并且你試圖有所改進與創新的話,那么可以高興地說:創新的靈感即將光顧你的大腦。
當逆向者完完本本地將幾十K甚至上百K的二進制還原成形象化的高級代碼并編譯通過時,他可以在松一口氣的同時大呼過癮,因為他完成了一次修煉,功力得到了提升,甚至向禪宗的境界又近了一步。但是他更多思考的是可以汲取到什么,下一步該做什么,如何寫出更加高效和優美的代碼,如何創新,而不是將逆出來的代碼原封不動地安在自己的bin里,抑或是整天被別人寫的bin淹沒在無盡的逆向之中。如果是這樣的話,那么他或許只能算一個廉價的二次體力勞動者,而這個工人卻有被F5代替的趨勢。
從某種程度講,浮躁者炫耀者或者是初學者都應該遠離逆向工程,因為它或許只會讓你體驗到一時的自我成就與滿足感,但卻會養成一種依賴性的思維方式,腦子里產生一種“別人有bin我就逆”的懶惰思想。但是不久你就會發現,往日的激情早已不在,始終跟在別人的后面跑卻距離別人越來越遠,因為不注重基礎積累和知識體系建立而盲目追求奇技淫巧的你已經到達進步的頂點。
逆向技術不是炫耀者用來裝B的工具,這或許對初學者也是一個提醒:打好根基,動手實踐與思考積累必不可少,但創新才是你與別人區別脫穎而出的策略。逆向技術不是萬金油,也不是進步的籌碼。
以上所寫僅僅是本人的一面之詞。如果很多觀點你都不贊同,那就權當我在扯淡,在意淫,在裝B,在自娛自樂了。
posted on 2008-05-10 12:52
ViskerWong 閱讀(468)
評論(1) 編輯 收藏 引用