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