2

ドングルを使用して実行可能ファイルを保護しています。ドングルは、次の 2 つの方法でソフトウェアを保護します。

  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)

データが永続的であるため、バイナリ シリアル化を使用する必要があります。

どうすればこの問題を解決できますか?

4

1 に答える 1

0

私はこの問題に膨大な時間を費やし、真の解決策以上の回避策にたどり着きました。

私が学んだことを共有します。シリアル化では、保存されたデータの構造を正確に把握するために、永続的なストリームを生成したアセンブリを読み込む必要があります。「ブラックボックス」の EXE 暗号化システムでは、アセンブリは利用できません。考えられる解決策の 1 つは、カスタム BynaryFormatter を作成することです。

回避策は、シリアル化するクラスを、暗号化されていない DLL に配置し、実行時にドングルによってメモリ内で復号化することです。このアイデアは、同様の問題に対して私が見つけた提案に由来しています。アプリケーション B から書き込まれたデータをアプリケーション A で逆シリアル化したいと考えています。

于 2015-05-07T05:57:33.223 に答える