移除 Extended WPF Toolkit 免费版授权警告
2024-11-03 00:48:00

在项目中引用了免费的第三方控件包 Extended.Wpf.Toolkit,根据介绍,此控件包只允许用于非商业用途,且每次启动都会在调试窗口中输出关于许可证的提示:

1
2
3
4
5
6
7
*********************************************************************************************************
WARNING: The component "Extended WPF Toolkit" you are currently using is governed by the Xceed Community License Agreement
and permits NON-commercial use only. By continuing using this version, you are confirming that this component
is only being used for a non-commercial purpose. If you are using this component in a commercial application,
please contact Xceed's sales team by email at sales@xceed.com or visit
https://xceed.com/en/our-products/product/toolkit-plus-for-wpf to purchase a subscription license.
*************************************************************************************************************

虽然并不影响程序运行,但是开发时看着它输出一大坨内容就感觉被污染了,于是打算看能不能破解它。
dnSpy 打开Xceed.Wpf.Toolkit.dll文件,搜索警告内容中的字符串,什么都没找到。直觉告诉我,作者将字符串加密处理了。
好在程序集并没有加密处理,于是一个个看类似LicenseCore之类的字眼,幸运地发现一个奇怪的Message类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
namespace Xceed.Wpf.Toolkit.Core
{
internal static class Message
{
private static IEnumerable<ulong> Data
{
get
{
yield return 44UL;
yield return 35UL;
yield return 131UL;
...
yield break;
}
}

internal static void ShowMessage()
{
if (Message.m_shown)
{
return;
}
Trace.WriteLine(new string(Message.Data.Select(new Func<ulong, char>(Message.ConvVal)).ToArray<char>()));
Message.m_shown = true;
}

private static char ConvVal(ulong x)
{
return (char)((x - 5UL) / 3UL);
}

private static bool m_shown;
}
}

已经特别明显了,作者没有使用明文,而是简单的对每个字符做了数学运算。
破解很简单,只要将m_shown这个静态变量设置为true即可。


我们可以在程序入口点处,通过反射放方式修改这个变量:

1
2
3
4
5
6
7
8
9
10
11
AppDomain.CurrentDomain.AssemblyLoad += OnCurrentDomainAssemblyLoad;

private static void OnCurrentDomainAssemblyLoad(object? sender, AssemblyLoadEventArgs args)
{
if (args.LoadedAssembly.GetName().Name != "Xceed.Wpf.Toolkit")
return;

var type = args.LoadedAssembly.GetType("Xceed.Wpf.Toolkit.Core.Message", false);
var field = type?.GetField("m_shown", BindingFlags.NonPublic | BindingFlags.Static);
field?.SetValue(null, true);
}

就这么简单!

Plus版

Plus 版本多了更多主题和更多控件,当然是收费使用的。
不过【这里】可以下载到破解版。截至到此时最新的破解版本是24.1.25154.0957
直链:Xceed_Ultimate_Suite_24.1.25154.0957_Downloadly.ir.rar

相关阅读

Extended WPF Toolkit
Xceed Ultimate Suite