[Net] 程式碼保護

光明與黑暗 – 談程式碼保護
https://dotblogs.com.tw/code6421/2017/01/11/darknet

通常.Net Managed Language所產出的程式檔是最容易被竊取的,因為他們是在執行時期解譯,所以必須有個機制來轉換,例如C#編譯為IL,CLR讀入IL解譯為機器碼執行,這裡的C#到IL這段注定了C#很容易被反組譯的命運,因為既然可以由C#到IL,那麼必然也能由IL到C#,而IL相對於機器碼又是一個很容易理解的指令集,所以能輕易被看光。

有關於反反組譯、模糊、加殼脫殼、檢查點,請再自行谷歌。


#Net, Managed Language, Denuvo, 程式碼, 保護, 檢查點, 殼

.Net Managed Language有反組譯工具,自然也會有反反組譯工具,模糊器是最簡單的方式,例如Smart Assembly。如果還不夠可進入機器碼的層級,可以把重要的部份用C/C++撰寫(或Assembly)再用P/Invoke呼叫,這可以達到多一層防護。

攻防戰基本上就是比誰氣長,你的殼越多,對手就越容易放棄,舉現今最有名的denuvo來說,殼自然是不用說,隨處插上check checksum,加上由硬體產生的獨一hashcode,要穿過去就得面對數萬次的check checksum,如果想繞過去就得做出完美的checksum validation simulator來規避各種檢查點。

只是,一山還有一山高,就denuvo與駭客之間的攻防大家早就聽說,例如先前《惡靈古堡 7》、《霜華》、《鐵拳 7》,這些採用 Denuvo 加密的遊戲一週內統統遭破解,使正版玩家與遊戲開發商對整個系統產生質疑,而實際dunuvo怎麼被破解/繞過,就再請大家自行谷歌了。


留言