c# - 加密可执行文件导致 BinaryAssemblyInfo.GetAssembly 异常

标签 c# encryption dongle source-code-protection

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

  1. 在代码中调用读/写加密狗内存(例如存储功能数据),使用加密狗中的算法加密/解密数据。加密 key 是只可写的。
  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)

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

如何解决这个问题?

最佳答案

我花了很多时间解决这个问题,我找到了一个解决方法,而不是一个真正的解决方案。

我分享我学到的东西。序列化需要加载生成永久流的程序集,以便准确了解保存数据的结构。对于“黑盒”EXE 加密系统,程序集不可用。一种可能的解决方案是编写自定义 BynaryFormatter:这肯定不值得付出努力。

解决方法是将要序列化的类放在未加密的 DLL 中,然后在运行时由加密狗在内存中解密。这个想法源于我找到的一个类似问题的建议:一个人想在应用程序 A 中反序列化从应用程序 B 写入的数据。

关于c# - 加密可执行文件导致 BinaryAssemblyInfo.GetAssembly 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30072762/

相关文章:

c# - ASP.NET MVC 4 : Error received when trying to insert datetime field in Sql Server Database from input text box

php - MCrypt rijndael-128 到 OpenSSL aes-128-ecb 转换

ios - 在越狱设备中可以看到数据库文件吗?

copy-protection - 为加密狗连接的系统编写什么代码以提供更好的安全性?

c# - 需要覆盖导航方法

c# - 电子邮件发送过程的节流速度

c# - RijndaelManaged 加密替换企业库

bluetooth - 带有 PuTTY 的 USB 蓝牙加密狗

serial-port - ^SMMEMFULL :"RAM"HUAWEI K2540 加密狗错误信息

c# - 如何实现 CollectionLengthToVisibility 转换器?