为什么我无法动态加载混淆的程序集?

时间:2014-08-20 12:10:37

标签: c#

我正在使用以下代码动态加载程序集:

FileStream io = new FileStream("AssemblyName.dll", FileMode.Open, FileAccess.Read);
if (io == null) return null;
BinaryReader binaryReader = new BinaryReader(io);
Assembly assembly = Assembly.Load(binaryReader.ReadBytes((int)io.Length));

return assembly;

但是当我的程序集(“AssemblyName.dll”)被混淆时,这个程序集的方法不能正常工作!我已经看到了一些关于这个问题的问题,但他们的问题却有所不同。我认为混淆不会改变执行逻辑。

我不使用反射来获取此程序集的类型,我只需在AssemblyResolve事件中加载它。

编辑: [已解决] 我刚刚遇到特定程序集的问题,我可以动态加载其他混淆程序集。我不知道到底是什么问题!

1 个答案:

答案 0 :(得分:2)

方法正常,只是它们有不同的名称。在不知道混淆器的确切配置的情况下,无法分辨混淆的内容。

我猜想混淆器会将公共类的公共方法保留原样,同时几乎使其他所有方法都混淆。

混淆通常是通过为静态和实例成员提供新的“人类不可读”名称来完成的,即通过其未经模糊处理的名称找到方法几乎不可能。你必须知道要找到它的混淆名称,或者它必须有一个足够精确的参数列表才能找到它(如果参数有混淆类型,那当然很难......)

  

当.Net框架加载混淆程序集本身时,它们正常工作。 .Net框架是否使用不同的代码来加载程序集?

这是因为公共方法没有被混淆,因为那会使组件的整个想法无效。

我的猜测是你试图做一些作者大会不希望做的事情,所以你是自己的伴侣:)