什麼是逆向工程?
逆向工程(又名反向工程,reverse engineering-re)是對產品設計過程的一種描述。在工程技術人員的一般概念中,產品設計過程是乙個從設計到產品的過程,即設計人員首先在大腦中構思產品的外形、效能和大致的技術引數等,然後在詳細設計階段完成各類資料模型,最終將這個模型轉入到研發流程中,完成產品的整個設計研發週期。這樣的產品設計過程我們稱為「正向設計」過程。逆向工程產品設計可以認為是乙個從產品到設計的過程。簡單地說,逆向工程產品設計就是根據已經存在的產品,反向推出產品設計資料(包括各類設計圖或資料模型)的過程。從這個意義上說,逆向工程在工業設計中的應用已經很久了。比如早期的船舶工業中常用的船體放樣設計就是逆向工程的很好例項。
隨著計算機技術在各個領域的廣泛應用,特別是軟體開發技術的迅猛發展,基於某個軟體,以反彙編閱讀原始碼的方式去推斷其資料結構、體系結構和程式設計資訊成為軟體逆向工程技術關注的主要物件。軟體逆向技術的目的是用來研究和學習先進的技術,特別是當手裡沒有合適的文件資料,而你又很需要實現某個軟體的功能的時候。也正因為這樣,很多軟體為了壟斷技術,在軟體安裝之前,要求使用者同意不去逆向研究。
逆向工程的實施過程是多領域、多學科的協同過程。
為什麼學習逆向工程?
在2023年初,我國相關的法律為逆向工程正名,承認了逆向技術用於學習研究的合法性。獲悉這個訊息,國內軟體逆向界人士紛紛奔走相告,雀躍不已。眾所周知,我國的軟體產業落後於西方列強,甚至落後於鄰國印度和日本,而這個舉措意味著我國的軟體研發人員如果利用逆向技術去研究學習國外一流軟體的開發方法,那麼我國的軟體技術將會有極大的提公升,此舉何其開明也!
然而,逆向技術相關的培訓實在少之又少,而各個大專院校雖然開設計算機相關專業,但是對此技術也尚未重視。社會上雖然湧現出大量軟體開發培訓機構,但是以培養軟體藍領為主要目標,對逆向技術更是避而遠之。時下的ide是極其優秀的,拜其所賜,市面上的程式設計師多出十幾倍,但是又有多少能理解程式內部的機制呢?雖然很多人認為,去研究程式的內部原理,就是破壞了「黑盒子」封裝性。但是如果只是能夠在別人搭建好的平台上做開發,那麼就只會被別人牽引技術方向,而自己始終只能追逐技術。如果我們能夠充分掌握逆向分析的方法,就可以在一流的軟體裡直接學習各類先進技術,取長補短,為我所用。若如此,實為我國軟體產業之幸事。
怎麼學習逆向工程?
逆向工程是乙個綜合性和實踐性很強的學科,最需要的是耐心和毅力。初學者往往一開始就拿乙個成熟軟體去反彙編分析,結果被海量的指令和錯綜複雜的流程搞得暈頭轉向,然後大多數人就中途放棄了。
最好從自己用彙編寫的「hello world」程式開始。然後在學習的過程中逐步將難度公升級,一點點去看懂流程特性。等把匯程式設計序看順眼了,就開始研究c/c++的流程特性,一邊在老師的帶領下去學習研究,一邊勤做筆記、總結方法。幾個月下來,就會形成屬於自己的一套分析**的風格或習慣,這樣以來,任何軟體在你眼中都沒有了神秘感,只要你願意投入時間去分析就一定會得到你所需要的知識。
關於Linux 之父及 計算機行業的感想
首先貼一段話 linus可以向bitmover公司道個歉,保證以後嚴格管教弟兄們,嗯,這是不可能的。實際情況是這樣的 linus花了兩周時間自己用c寫了乙個分布式版本控制系統,這就是git!乙個月之內,linux系統的原始碼已經由git管理了!牛是怎麼定義的呢?大家可以體會一下。git的誕生 牛就乙...
計算機行業「喧嘩」背後的隱憂
計算機行業2013行業資產收益率並無顯著改善,風險正在累計,根據2012年8月 2013年8月的歷史經驗,在2013年8月計算機行業市盈率接近50倍時,行業增速放緩,如果歷史會重複,那麼未來一年計算機行業將進入市盈率下降週期。2013年利潤增速高於2012年。2013年申萬計算機應用行業 以2012...
關於計算機編碼的故事
很久很久以前,有一群人,他們決定用8個可以開合的電晶體來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,於是他們把這稱為 位元組 再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。他們看到這樣是好的,於是它們就這機器稱為 計...