第一節 關於反向工程(About Reverse Engineering)
反編譯?反向?解密?(Decompilation? Reverse? Cracking?)
簡單的說,反編譯是編譯過程的反轉:把一個可執行文件翻譯為更高級語言。假如你丟失了你的Delphi工程的源程序而只有可執行文件:如果源程序已不可得則反向工程(反編譯)是有用的。
耶,“源程序不可得”,這是否意味著我們可以反編譯別的程序員開發的Delphi工程呢?嗯,對也不對......
真正的反編譯可能嗎?(Is true decompilation possible?)
不,當然不行。完全自動的反編譯是不可能的—沒有一個反編譯器可以正確的重生出原始代碼。
當Delphi工程被編譯和連接從而產生一個獨立的可執行文件,程序中使用的大部分的名稱都被轉換為地址。名稱的丟失意味著反編譯器必須為所有的常量、變量、函數和過程創建唯一的名稱。即使在某種程度上反編譯是成功的,產生的“源代碼”仍缺少了原始含義的變量和函數名。
顯而易見,原始編程語言的語法在可執行文件中已不存在。所以,讓反編譯器對可執行文件的連續的機器語言指令進行翻譯並判斷出原始語言指令是非常困難的。
為什麼要使用並且什麼時候使用呢(Why and when to use.)
反向工程因為以下幾個原因而使用:
這合法嗎?(Is this legal?)
反向工程不是解密,盡管很難在兩者之間劃一個明晰的界限。計算機程序被版權和商標法保護。不同的國家對版權擁有者的權利有著不同的解釋。最共同的解釋是,下列情況下的反編譯是可以的:
為了更好的解釋的目的,而接口說明已不可得;為了錯位更正的目的,而版權擁有者不能進行更正;為了判斷程序的部分內容是否被保護。當然,如果你不能肯定是否被允許反匯編某些程序的可執行文件時,你應該很小心或者聯系你的律師。
注:如果你正尋找著怎樣破解Delphi、鑰匙產生器或僅僅是序列號:那麼你找錯地方了。請保證你在這兒所寫下或所介紹的每件事都僅僅是為了研究和教育的目的。