CompileAssemblyFromSource + 混淆 = 不起作用
CompileAssemblyFromSource + Obfuscation = don't work
我有可用的 CompileAssemblyFromSource 代码。但是,当我使用任何代码保护器(如 RedGate SmartAssembly 或 Themida)时,它停止工作并且出现错误 "Could not load file or assembly or one of its dependencies"。你能帮我吗?
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;
namespace stringToCode
{
public class Program
{
public static int q = 0;
static void Main(string[] args)
{
try
{
string source = "namespace stringToCode { public class FooClass { public void Execute() { Program.q = 1; } } }";
Console.WriteLine("q=" + q);
using (var foo = new CSharpCodeProvider())
{
var parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
try
{
string location = assembly.Location;
if (!String.IsNullOrEmpty(location))
{
parameters.ReferencedAssemblies.Add(location);
}
}
catch (NotSupportedException)
{ }
}
var res = foo.CompileAssemblyFromSource(parameters, source);
var type = res.CompiledAssembly.GetType("stringToCode.FooClass");
var obj = Activator.CreateInstance(type);
var output = type.GetMethod("Execute").Invoke(obj, new object[] { });
Console.WriteLine("q=" + q);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);;
}
Console.ReadLine();
}
}
}
抱歉我的问题。我只是明白为什么会这样)
这是代码示例。我从服务器获得的代码的主要问题。
因此,当我混淆我的 vars 时,我不会在我使用 CompileAssemblyFromSource 的 "online" 代码中混淆它们。所以这是行不通的。因为变量没有相同的名称。
我有可用的 CompileAssemblyFromSource 代码。但是,当我使用任何代码保护器(如 RedGate SmartAssembly 或 Themida)时,它停止工作并且出现错误 "Could not load file or assembly or one of its dependencies"。你能帮我吗?
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;
namespace stringToCode
{
public class Program
{
public static int q = 0;
static void Main(string[] args)
{
try
{
string source = "namespace stringToCode { public class FooClass { public void Execute() { Program.q = 1; } } }";
Console.WriteLine("q=" + q);
using (var foo = new CSharpCodeProvider())
{
var parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
try
{
string location = assembly.Location;
if (!String.IsNullOrEmpty(location))
{
parameters.ReferencedAssemblies.Add(location);
}
}
catch (NotSupportedException)
{ }
}
var res = foo.CompileAssemblyFromSource(parameters, source);
var type = res.CompiledAssembly.GetType("stringToCode.FooClass");
var obj = Activator.CreateInstance(type);
var output = type.GetMethod("Execute").Invoke(obj, new object[] { });
Console.WriteLine("q=" + q);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);;
}
Console.ReadLine();
}
}
}
抱歉我的问题。我只是明白为什么会这样) 这是代码示例。我从服务器获得的代码的主要问题。 因此,当我混淆我的 vars 时,我不会在我使用 CompileAssemblyFromSource 的 "online" 代码中混淆它们。所以这是行不通的。因为变量没有相同的名称。