C#写的DLL怎么加密?
代码加密(X86):
为X86汇编代码:一种保护代码的代码自修改技术(SMC)。将当前代码加密存储为密文,存储,当程序运行到受保护的函数时自动解密执行,执行后擦除代码,无论代码运行到哪里都解密。黑客无法获得原始的机器指令和具有内存完整性的代码。因为是纯内存操作,所以是一种运行速度快,成本高的保护方式。建议全部补充。
代码加密
dotNet程序的IL代码保护:一种解密受保护代码的动态操作方法。将当前代码加密存储为密文,存储,当程序运行到受保护的函数时自动解密执行,执行后擦除代码,然后在运行的地方擦除代码。黑客无法获得中间语言的原始指令和具有内存完整性的代码。因为是纯内存操作,所以是一种运行速度快,成本高的保护方式。建议全部补充。
压缩
压缩软件,如zip,压缩代码和数据段。由于其动态密码,任何工具都无法自动解包,是防止反编译反汇编的关键手段。
代码混淆(IL):
将代码中各种元素的名称,如变量、函数、类等,改写成无意义的名称。比如改写成单个字母,或者简短无意义的字母组合,甚至改写成“_ _”之类的符号,让读者无法根据名字猜出其用途。
a)将代码中的部分逻辑重写为功能等效但更难理解的形式。比如把For循环改写成while循环,把循环改写成递归,精简中间变量等等。
b)打乱代码的格式。比如删除空格,把多行代码挤成一行,或者把一行代码拆成多行等等。
c)加入花哨的指令,通过专门构造的指令让反汇编程序出错,进而干扰反编译。
代码混淆器也会带来一些问题。主要问题包括:混乱的代码难以理解,因此调试困难。开发人员通常需要保留原始的、整洁的代码用于调试。对于支持反射的语言,代码混乱可能会与反射冲突。代码混乱并不能真正阻止逆向工程,只会增加其难度。因此,对于安全性要求较高的场合,仅仅使用代码混淆并不能保证源代码的安全性。
代码混淆的特点是安全性低,不会影响效率。
代码虚拟化:
对于X86代码:是指将机器代码翻译成一串机器和人都无法识别的伪代码字节流;这些伪代码在具体执行过程中被逐一翻译解释,逐渐还原成原码执行。这个用来翻译伪代码,负责具体执行的子程序叫做虚拟机VM(就像一个抽象的CPU)。它以函数的形式存在,函数的参数是字节码的内存地址。由于虚拟机代码和虚拟机CPU的实现每次都可以随机设计和执行,每次都可以随机修改代码,包括一些逻辑上的等价修改,可以参考硬件N个与非门实现各种逻辑门、算法和内存访问形式,包括数学上的非等价修改,代码量几乎可以膨胀到100到10000次,使得机器无法执行算法恢复到原来的逻辑。
代码虚拟化的特点是:安全性适中,不影响效率。
代码碎片:
深入思考自主知识产权的最新技术:基于LLVM和ARM虚拟机技术,自动提取大量代码,移入SS内核模式模块,大大降低了使用门槛,不再需要人工移植算法。可移植算法的数量从有限增加到几乎无限,支持的语言也不再局限于c,这是加密技术的综合应用,效果类似于把软件拆开执行,让破解者无所适从。
安全性高,提示关键功能或调用加密锁方法;用多了会影响效率。