今天尝试了下Visual Studio自带的代码混淆工具Dotfuscator,将一些心得记录如下。
先建立一个命令行应用程序,输出hello world字符。
在命令行窗口中执行此程序,输出hello world字符,用ildasm打开此程序,可查看到程序的il码
打开代码混淆工具,在VisualStudio中找到TOOLS菜单下的
PreEmptive Dotfuscator and Analytics
第一次打开时会要求你接受一个协议,选择Yes即可
点击最下面的 Read our online privacy policy 可打开下面网页:
https://www.preemptive.com/company/privacy
进入Dotfuscator工具后,界面如下所示
在Inputs中设置要进行混淆的exe和dll
按ctrl+s保存配置到xml文件中
保存完毕后,单击绿色箭头按钮即可进行混淆操作
输出界面打印的文字如下:
Loading Assemblies...
Running C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\ildasm.exe /OUT=C:\Users\Administrator\AppData\Local\Temp\~CodeObf.0\CodeObfuscationTest.exe.il /TEXT /NOBAR /RAWEH /QUOTEALLNAMES /UTF8 /FORWARD "C:\Users\Administrator\Documents\Visual Studio 2012\Projects\CodeObfuscationTest\CodeObfuscationTest\bin\Debug\CodeObfuscationTest.exe"
Processing instrumentation attributes...
WARNING: Send Analytics Messages is enabled, but no SetupAttribute was found. No analytics code will be injected into this application.Analyzing Markup...
Renaming...
Updating Markup...
Writing map file to C:\Users\Administrator\Documents\Visual Studio 2012\Projects\CodeObfuscationTest\CodeObfuscationTest\bin\Debug\Dotfuscated\Map.xml
Writing Assemblies...
Running C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe /OUTPUT="C:\Users\Administrator\Documents\Visual Studio 2012\Projects\CodeObfuscationTest\CodeObfuscationTest\bin\Debug\Dotfuscated\CodeObfuscationTest.exe" /nologo /quiet /resource=C:\Users\Administrator\AppData\Local\Temp\~CodeObf.0\CodeObfuscationTest.exe.res C:\Users\Administrator\AppData\Local\Temp\~CodeObf.0\CodeObfuscationTest.exe.il
Build Finished.
Build Statistics Total Renamed Percent Renamed
Types: 1 1 100.00%
Methods: 2 1 50.00%
Fields: 0 0 0.00%
生成完毕后,在Dotfuscator.xml同一目录下,会出现Dotfuscated目录,目录中的exe和dll文件即为混淆后的文件,将此文件替换掉原文件即可
混淆后程序的il码如下图所示,可看到标识符被修改了
上面的代码太过简单,我们另写一段打印九九乘法表的代码,进行混淆
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeObfuscationTest
{
class Program
{
static void Main(string[] args)
{
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write(string.Format("{0}*{1}={2} ", i, j, i * j));
}
Console.WriteLine();
}
}
}
}
左边是混淆前的il码,右边是混淆后的il码
还有几点需要注意的问题:
1、Dotfuscator工具支持使用命令行打开,但我还没找到使用命令行运行代码混淆功能的方法
2、Dotfuscator工具在电脑中的位置:VisualStudio安装目录\PreEmptive Solutions\Dotfuscator and Analytics Community Edition,工具名称为dotfuscator.exe
END