加密可执行文件会导致binaryAssemblyInfo.getAssembly中的例外



我使用加密狗保护我的可执行文件。加密狗以两种方式保护该软件:

  1. 在代码内部带有读取/编写加密狗内存的调用(例如存储功能数据),以加密/解密数据,并使用加密狗中的算法进行加密。加密密钥仅是可写的。
  2. 对EXE文件进行加密,并使用将其通过加密狗解密的加载程序。如果像SoftIce这样的调试器正在运行,该软件要么终止或不启动。

它可以很好地运行,并且购买许可证比破解我的软件便宜,这是我唯一的目标。

问题是我不能再序列化了!如果我尝试,我会得到以下例外:

SerializationException
Source = mscorlib
Message = Unable to find assembly 'MyApp, Version=1.0.0.3, Culture=neutral, PublicKeyToken=null'.
TargetSite = System.Reflection.Assembly GetAssembly()
Stack =
    System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly()
    System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name)
    System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable)
    System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)
    System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)
    System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
    System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)

由于数据的性质,我必须使用二进制序列化。

如何解决此问题?

我将大量的时间用于此问题,我可以解决解决方案,而不是一个真正的解决方案。

我分享我学到的东西。序列化需要加载生成永久流的程序集,以便准确了解保存数据的结构。使用" Black-Box" EXE加密系统,组件不可用。一种可能的解决方案可能是编写自定义ByNaryFormatter:肯定不值得付出努力。

解决方法是将这些类放在dll中序列化,该类未加密,然后在奔跑的时间内被加密元中解密。这个想法来自我为一个类似问题发现的建议:一个人希望在应用程序中进行一个从应用程序编写的数据b。

中的数据。

最新更新