.net程序防止反編譯

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

 

未經深思加殼保護的 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;
}


 

解決方案:

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

 jkjs9.png

加密技術:代碼加密/代碼混淆/碎片代碼執行

代碼加密:針對dotNet程序,保護IL代碼:一種動態運行方法解密被保護代碼。把當前代碼加密存儲爲密文,存儲起來,當程序運行到被保護函數時候自動解密並且執行,執行之後再擦除代碼,執行之後再擦除代碼,運行到哪裏才解密哪裏的代碼,***無法獲得原始的中間語言的指令和內存完整性的代碼,由於是純內存操作所以運行速度快, 性價高的保護手段,建議全加

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

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

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

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

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

主要的問題包括:

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

· 對於支持反射的語言,代碼混淆有可能與反射發生衝突。

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

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

加密後的效果

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
    });
}

 

架構支持#

IIS 服務架構的後臺邏輯 DLL 文件

windows PC 應用程序 EXE 文件

windows PC 應用程序動態庫 DLL 文件

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

Unity3d 編譯使用的 DLL 文件


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章