作者:iuang | 来源:互联网 | 2023-09-25 03:00
目录
介绍
环境
Demo
引入nugget包:
给关键方法加特性:
未开启虚拟化,反编译结果:
开启虚拟化,反编译结果:
优点:
缺点:
总结
疑问
介绍
Eazfuscator.NET是一款支持IL级混淆的强壳.
功能:
重命名符号 字符串加密和压缩 代码和数据虚拟化 H 同态加密 自动代码优化 资源加密和压缩 控制流混淆 装配体合并和嵌入 XML文档过滤器 调试支持 XAML重命名
20年更新中加入了同态加密(Homomorphic Encryption),大大加强了混淆强度。
同态加密参考:https://blog.gapotchenko.com/eazfuscator.net/homomorphic-encryption-of-code
环境
版本:2020.4版
Demo
.net 5 consoleAPP
using System;
using System.Reflection;namespace ConsoleApp1
{internal class Program{private static void Main(string[] args){Vertify("123");Console.ReadKey();}//[Obfuscation(Feature = "virtualization", Exclude = false)]private static void Vertify(string key){if (key.Length == 12345678){Console.WriteLine(key);}else{Console.WriteLine("Error!");}}}
}
引入nugget包:
给关键方法加特性:
[Obfuscation(Feature = "virtualization", Exclude = false)]
release时,自动加壳(只对有【obfuscation】特性的 模块 虚拟化IL和同态加密)
未开启虚拟化,反编译结果:
只是简单的控制流和命名混淆、资源加密:
开启虚拟化,反编译结果:
首先看到代码迅速膨胀;
同样在入口点断下,未加 [Obfuscation] 特性的方法如上不变,而需要虚拟化的方法已经被虚指令重写:
虚指令的原理是利用反射和opCode类代替原IL指令,参考大佬的文章:
https://www.52pojie.cn/thread-958680-1-1.html
简单使用de4dot还原一下:
虚拟化的部分de4dot无法还原,跟下去发现所有原语句都变为反射实现,参数都变为object数组。
逆向难度相对confuser壳还是高不少的!
优点:
- 方便、release/publish自动混淆,不要像其他混淆工具需要先配置DLL加密,在替换回去;
- 更新快,技术前沿;
- 流程混淆非常好,适合加密核心算法;
缺点:
调试混淆后的程序时,直接对系统类库下断点,观察输入输出较为容易;
(根据大佬们的文章推测出虚拟方法与原IL的对应关系,可以写出脱壳机)
总结
IL混淆比较强,极大的提高了逆向难度,适合加密核心算法;
可搭配其他壳进一步提升逆向难度;
疑问
Q1:复杂算法性能会降低多少?
Q2:原先在代码中提示同态加密的语句,和不使用同态加密对比(即12345678改为123),编译后没有发现区别,
同态加密的程序数据化(Homomorphic encryption is enabled with virtualization since the latter naturally transforms a program into data)
如何观察到区别?
待进一步使用、观察;
知道的大佬请留步回复一下~