使用 .NET Reactor 混淆C#程序后,调用ToJson()出现Newtonsoft.Json.JsonSerializationException

阅读: 评论:0

使用 .NET Reactor 混淆C#程序后,调用ToJson()出现Newtonsoft.Json.JsonSerializationException

使用 .NET Reactor 混淆C#程序后,调用ToJson()出现Newtonsoft.Json.JsonSerializationException

使用 .NET Reactor 混淆 C#程序,出现Newtonsoft.Json.JsonSerializationException
具体问题如下:

Newtonsoft.Json.JsonSerializationException: A member with the name ' ' already exists on 'Test.AuthCode'. Use the JsonPropertyAttribute to specify another name.在 Newtonsoft.Json.Serialization.JsonPropertyCollection.AddProperty(JsonProperty property)在 Newtonsoft.Json.Serialization.DefaultContractResolver.CreateConstructorParameters(ConstructorInfo constructor, JsonPropertyCollection memberProperties)在 Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(Type objectType)在 Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType)在 System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)在 Newtonsoft.Json.Utilities.ThreadSafeStore`2.Get(TKey key)

背景:
1.代码中Config类同AuthCode类相似,他们的实例都有调用ToJson()方法,但Config的实例调用ToJson()方法无误。

解决该问题我使用了“dnSpy”逆向工具

起初我一直在“修改混淆模式 -> 运行程序 -> 报错”这个循环往复,以为是 .NET Reactor 工具的问题。我在这种方式下调试了一天,一直到下午下班,还是没有调试出来。然后,我想反正解决不了,要不先去吃饭,放松下,在放松的工程中总会有拓开的想法,感觉思维进胡同了。后面我就吃饭去了。就在吃饭的时候我想到了一个办法:
将出错位置的代码拷贝到程序起始位置去运行,看看是否报错,如果仍然报错,就拷贝AuthCode类为AuthCode2。然后来逐渐删减里面的代码,直到出现运行正常时候,就定位到具体错误代码行。

最后我按照该方法,果然定位到问题行。原来是AuthCode2的构造函数的访问权限应该为public。
原代码为:

private AuthCode2() { }

改为:

public AuthCode2() { }

那为什么Config类中构造函数为:

private Config() { }

却能正常运行呢? ***目前该问题还不得而知。***但可以知道的是 .NET Reactor 混淆等功能跟原程序中类、方法、属性、字段的访问权限有关系,并且影响其保护输出的exe的结果。

以上虽仍有问题未解决,但“适当放松->拓展思维”的这个Debug的方法确实很好的,这也印证了我在以前的一片随想“解决技术难题思路” 中提到的 排除法, 控制变量法

补充:

在下午调试的时候最终定位的位置如图:

如图,程序时运行到此处由于 变量parameters 中存储的属性名有两个 " "(string类型) 和一个0(int类型)。这个现象让我想起了AuthCode的另有一个三参数的构造函数,如下:

public AuthCode(string account, string computerUniqueID, int usableMonthNumber){}

而Config却只有一个 private权限的无参构造函数。我在想问题是否就出在了构造函数。

本文发布于:2024-02-01 18:54:36,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170678487538740.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23