官术网_书友最值得收藏!

1.1.3 保護JIT語言

與真正的機器碼程序不同,即時編譯程序往往可以被轉換成源代碼。這降低了逆向工程代碼的門檻,使得我們在后續章節中討論的許多x86逆向工程防御機制變得多余和過度。

對于可反編譯的語言,常用的防止逆向工程的防御措施是采用混淆技術。圖1.2展示了.NET應用程序在混淆前后的樣子。

圖1.2的上半部分展示的是代碼被混淆之前的情況,其中的函數名、變量名和字符串都很容易閱讀。這些變量名中的信息使得逆向工程師更容易理解每個函數的用途以及整個應用程序的工作方式。

圖1.2的下半部分展示的是同一段代碼的混淆版本。現在,函數名、變量名和字符串都被混亂地重命名,使得我們很難理解顯示的函數的用途,更別說理解整個應用程序的功能了。

另一個重要的安全性最佳實踐是避免用易于逆向工程的即時編譯語言編寫涉及安全性或隱私的關鍵代碼。相反,應該用匯編語言(如C/C++)編寫這些代碼,對這種代碼逆向工程要難得多。這些代碼可以包含在動態鏈接庫(Dynamic Link Library,DLL)中,這些庫可被鏈接到包含用即時編譯語言編寫的非敏感代碼的執行文件中。

圖1.2 JetBrains dotPeek中的混淆

主站蜘蛛池模板: 娱乐| 五常市| 曲麻莱县| 凌云县| 科尔| 定襄县| 松江区| 乐安县| 弋阳县| 靖江市| 沾化县| 福安市| 萍乡市| 霍州市| 德令哈市| 昌都县| 阜南县| 岳西县| 韶山市| 浦城县| 临西县| 小金县| 光泽县| 陵水| 曲阜市| 镇宁| 邓州市| 靖边县| 库伦旗| 东兰县| 海兴县| 怀远县| 蓝山县| 阳高县| 永丰县| 宜宾市| 阿勒泰市| 贵州省| 政和县| 宜都市| 上林县|