CorBindToRuntimeEx( NULL, SERVER_BUILD, CLR_FLAGS,
__uuidof(CorRuntimeHost), __uuidof(ICorRuntimeHost), (void**) &pRuntimeHost );
// CLR is now working…
pRuntimeHost->Stop();
Obfuscator(代码混淆)是一种防止.NET程序集被逆向工程(Reverse Engineering)的有效方法。 传统的代码混淆技术有重命名代码中的Class、Method、Variable的名称;在不影响代码逻辑的前提下,更改代码行的顺序。这可以使得被逆向工程后的代码逻辑不容易被破解。
在Visual Studio 2005中集成了Dotfuscator Community Edition工具就是用来对开发后的程序集进行代码混淆的,根本原理就是重命名。但是他的强大之初是加入了Overload Induction功能,也就是说它能够最大程度的利用Trivial Identifier(替换原有名称的一个标识符)。
private void CalcPayroll(SpecialList employeeGroup) {
while (employeeGroup.HasMore()) {
employee = employeeGroup.GetNext(true);
employee.UpdateSalary();
DistributeCheck(employee);
}
}
处理之后如下:
private void a(a b) {
while (b.a()) {
a = b.a(true);
a.a();
a(a);
}
}
以上只是说明了Obfuscator的原理,其实Obfuscator是在MSIL层面上对代码进行重命名的。重命名后的MSIL功能上等同于未重命名的MSIL。除了增加了代码混淆的程度,Obfuscator也使得程序集的尺寸变得更小了,因为Trivial Identifier通常都是单个无意义的字符。
目前Dotfuscator有3个版本,CE(Community Edition)、STD(Standard Edition)、PRO(Professional Edition)。Visual Studio 2005中集成的是CE版,其功能限制很大,基本无法用于商业用途。但是对于个人学习已经足够了。