Я использую ключ для защиты своего исполняемого файла. Ключ защищает программное обеспечение двух способов:Шифрование исполняемого объекта вызывает исключение в BinaryAssemblyInfo.GetAssembly
- внутри кода с вызовами для чтения/записи памяти брелока (например, для хранения функциональных данных), для шифрования/дешифрования данных с помощью алгоритма резидента в ключе. Ключ шифрования доступен только для записи.
- Шифрование 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)
я должен использовать бинарную сериализацию в связи с характером данных, быть стойкими.
Как решить эту проблему?
Это проблема с вашим поставщиком ключа/шифрования, и мы не можем помочь вам с - не в последнюю очередь, если вы не сообщите нам, какую систему вы используете. – Dai
Также обратите внимание, что большинство систем шифрования EXE с «черным ящиком» (где вы просто передаете готовый EXE, а не те, которые используют API) по своей сути несовместимы с программами .NET благодаря компиляции JIT. – Dai
Я не думаю, что это проблема с поставщиком ключей. Если EXE зашифрован и сжат, а загрузчик «расширяет» его в памяти, вероятно, сборка не существует на диске, и, вероятно, это причина, по которой System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly() throw исключение. Во всяком случае, это всего лишь моя гипотеза ... Я думаю, что это должно быть возможно обойти это, но я не знаю, как! Конечно, я не первый, кто использует этот ключ для защиты программного обеспечения и необходимости сериализации ... –