- x86匯編與逆向工程:軟件破解與防護的藝術
- (美)斯蒂芬妮·多馬斯 (美)克里斯托弗·多馬斯
- 440字
- 2025-02-10 16:05:39
1.1.3 保護JIT語言
與真正的機器碼程序不同,即時編譯程序往往可以被轉換成源代碼。這降低了逆向工程代碼的門檻,使得我們在后續章節中討論的許多x86逆向工程防御機制變得多余和過度。
對于可反編譯的語言,常用的防止逆向工程的防御措施是采用混淆技術。圖1.2展示了.NET應用程序在混淆前后的樣子。
圖1.2的上半部分展示的是代碼被混淆之前的情況,其中的函數名、變量名和字符串都很容易閱讀。這些變量名中的信息使得逆向工程師更容易理解每個函數的用途以及整個應用程序的工作方式。
圖1.2的下半部分展示的是同一段代碼的混淆版本。現在,函數名、變量名和字符串都被混亂地重命名,使得我們很難理解顯示的函數的用途,更別說理解整個應用程序的功能了。
另一個重要的安全性最佳實踐是避免用易于逆向工程的即時編譯語言編寫涉及安全性或隱私的關鍵代碼。相反,應該用匯編語言(如C/C++)編寫這些代碼,對這種代碼逆向工程要難得多。這些代碼可以包含在動態鏈接庫(Dynamic Link Library,DLL)中,這些庫可被鏈接到包含用即時編譯語言編寫的非敏感代碼的執行文件中。

圖1.2 JetBrains dotPeek中的混淆