溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.net程序防止反編譯

發(fā)布時間:2020-06-18 15:47:23 來源:網(wǎng)絡 閱讀:565 作者:senseshield 欄目:安全技術

當前C# .net語言的應用范圍越來越廣泛,IIS 服務器架構(gòu)后臺代碼、桌面應用程序的 winform 、Unity3d 的邏輯腳本都在使用。C# .net 具備強大的便捷特性,使得開發(fā)成本極低。而作為一款.net 語言,也有它讓開發(fā)者頭疼的弊病——非常容易被反編譯。市面上的 Dnspy, ILspy,de4dot等工具可以非常容易反編譯出被混淆保護的C# .net 程序。

?

未經(jīng)深思加殼保護的 ILspy 反編譯效果如下:

public?int?add(int?a,?int?b)
{
????return?a?+?b;
}
public?int?div(int?a,?int?b)
{
????return?a?/?b;
}
public?int?mul(int?a,?int?b)
{
????return?a?*?b;
}
public?int?sub(int?a,?int?b)
{
????return?a?-?b;
}


?

解決方案:

深思自主研發(fā)了為 C# .net 語言做保護的外殼(Virbox Protector)。將C# .net 編譯成的執(zhí)行程序(.exe),動態(tài)庫(.dll)直接拖入加殼工具即可完成保護操作,十分方便。并且在效果上已經(jīng)完全看不到源碼中的邏輯。

?.net程序防止反編譯

加密技術:代碼加密/代碼混淆/碎片代碼執(zhí)行

代碼加密:針對dotNet程序,保護IL代碼:一種動態(tài)運行方法解密被保護代碼。把當前代碼加密存儲為密文,存儲起來,當程序運行到被保護函數(shù)時候自動解密并且執(zhí)行,執(zhí)行之后再擦除代碼,執(zhí)行之后再擦除代碼,運行到哪里才解密哪里的代碼,***無法獲得原始的中間語言的指令和內(nèi)存完整性的代碼,由于是純內(nèi)存操作所以運行速度快, 性價高的保護手段,建議全加

代碼混淆:將代碼中的各種元素,如變量,函數(shù),類的名字改寫成無意義的名字。比如改寫成單個字母,或是簡短的無意義字母組合,甚至改寫成“__”這樣的符號,使得閱讀的人無法根據(jù)名字猜測其用途。

· 重寫代碼中的部分邏輯,將其變成功能上等價,但是更難理解的形式。比如將for循環(huán)改寫成while循環(huán),將循環(huán)改寫成遞歸,精簡中間變量,等等。

· 打亂代碼的格式。比如刪除空格,將多行代碼擠到一行中,或者將一行代碼斷成多行等等。

· 添加花指令,通過特殊構(gòu)造的指令來使得反匯編器出錯,進而干擾反編譯工作的進行。

代碼混淆器也會帶來一些問題。

主要的問題包括:

· 被混淆的代碼難于理解,因此調(diào)試除錯也變得困難起來。開發(fā)人員通常需要保留原始的未混淆的代碼用于調(diào)試。

· 對于支持反射的語言,代碼混淆有可能與反射發(fā)生沖突。

· 代碼混淆并不能真正阻止反向工程,只能增大其難度。因此,對于對安全性要求很高的場合,僅僅使用代碼混淆并不能保證源代碼的安全。

碎片代碼執(zhí)行深思自主知識產(chǎn)權(quán)的最新技術:基于 LLVM ARM 虛擬機技術,自動抽取海量代碼移入 SS 內(nèi)核態(tài)模塊,極大的降低了使用門檻, 不再需要手動移植算法,可移植的算法從有限的幾個增長到幾乎無限多,支持的語言也不再限于 C, 這是加密技術的一次綜合應用,效果上類似于將軟件打散執(zhí)行,讓破解者無從下手。

加密后的效果

public?int?add(int?a,?int?b)
{
????return?(int)dm.dynamic_method((object)this,?System.Reflection.MethodBase.GetCurrentMethod(),?16416u,?21,?16384u,?32u,?31516u,?5).Invoke(this,?new?object[]
????{
????????this,
????????a,
????????b
????});
}
?
public?int?div(int?a,?int?b)
{
????return?(int)dm.dynamic_method((object)this,?System.Reflection.MethodBase.GetCurrentMethod(),?16956u,?21,?16924u,?32u,?31516u,?2).Invoke(this,?new?object[]
????{
????????this,
????????a,
????????b
????});
}
?
public?int?mul(int?a,?int?b)
{
????return?(int)dm.dynamic_method((object)this,?System.Reflection.MethodBase.GetCurrentMethod(),?16776u,?21,?16744u,?32u,?31516u,?3).Invoke(this,?new?object[]
????{
????????this,
????????a,
????????b
????});
}
?
public?int?sub(int?a,?int?b)
{
????return?(int)dm.dynamic_method((object)this,?System.Reflection.MethodBase.GetCurrentMethod(),?16596u,?21,?16564u,?32u,?31516u,?4).Invoke(this,?new?object[]
????{
????????this,
????????a,
????????b
????});
}

?

架構(gòu)支持#

IIS 服務架構(gòu)的后臺邏輯 DLL 文件

windows PC 應用程序 EXE 文件

windows PC 應用程序動態(tài)庫 DLL 文件

UG等第三方繪圖工具使用的 DLL 文件

Unity3d 編譯使用的 DLL 文件


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI