其他分享
首页 > 其他分享> > CodeGo.net>使用他们的idades保护反序列化失败

CodeGo.net>使用他们的idades保护反序列化失败

作者:互联网

如标题所示,在使用他们保护我的应用程序之后,反序列化失败,但有以下例外:

Unable to generate a temporary class (result=1).
error CS0009: Metadata file ‘c:\Path\to\protected.exe’ could not be opened — ‘An attempt was made to load a program with an incorrect format. ‘

这是我用于反序列化的代码(当exe不受保护时,它可以工作):

MyClass myClass;
try
{
    using (var stream = new MemoryStream(Data))
    {
        var serializer = new XmlSerializer(typeof(ComSec.MyClass));
        myClass = serializer.Deserialize(stream) as MyClass;
    }
}
catch (Exception e)
{
    return null;
}

奇怪的是,它们的代码保护在我的机器上可以正常工作,但在VM和同事的机器上却失败

我正在使用(与我的同事相同的配置):

> VS2012专业版
> Windows 7 x64旗舰版
> Themida 2.1.2.0 x86(具有.Net支持)

VM是Windows 7 x86的全新安装.

解决方法:

我最终使用了DataContract属性,并使用了DataContractSerializer对对象进行序列化和反序列化(它现在在任何地方都可以使用,无论有没有保护).

我的研究:

[DataContract(Name = "TestClass")]
public class TestClass
{
    [DataMember(Name = "Name")]
    public string Name { get; set; }
    [DataMember(Name = "Age")]
    public int Age { get; set; }
}

序列化/反序列化:

var serializer = new DataContractSerializer(typeof(TestClass));

using (var stream = new MemoryStream())
{
    serializer.WriteObject(stream, this);
    File.WriteAllBytes("TestClass.xml", stream.ToArray());
}

TestClass o = null;
using (var stream = new MemoryStream(File.ReadAllBytes("TestClass.xml")))
{
    o = serializer.ReadObject(stream) as TestClass;
}

标签:xml-deserialization,copy-protection,c
来源: https://codeday.me/bug/20191031/1978741.html