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