构造激活码
下面就来构造一个形式上正确的lic code:
先是Value部分:
{
"email": "user@example.com",
"license_code": "LIC-1234-ABCD",
"license_type": 2,
"license_start_date_time": 2000,
"license_stop_date_time": 1735689600000,
"apps": [
{
"app_id": "app_001",
"app_name": "ExampleApp"
}
]
}
在线生成Base64编码:
ewogICJlbWFpbCI6ICJ1c2VyQGV4YW1wbGUuY29tIiwKICAibGljZW5zZV9jb2RlIjogIkxJQy0xMjM0LUFCQ0QiLAogICJsaWNlbnNlX3R5cGUiOiAyLAogICJsaWNlbnNlX3N0YXJ0X2RhdGVfdGltZSI6IDIwMDAsCiAgImxpY2Vuc2Vfc3RvcF9kYXRlX3RpbWUiOiAxNzM1Njg5NjAwMDAwLAogICJhcHBzIjogWwogICAgewogICAgICAiYXBwX2lkIjogImFwcF8wMDEiLAogICAgICAiYXBwX25hbWUiOiAiRXhhbXBsZUFwcCIKICAgIH0KICBdCn0=
然后是Signature部分,也生成Base64编码。
U2lnbmF0dXJl
然后再拼在一起。准备激活。

调试激活过程
在GetUser函数设置断点,很快就进来了。

token就是拼装好的授权码。从'.'处切成两段,前面一段由Base64转码,得到的string就是原始的json配置内容了。

再一次来到了Verify函数:
// Token: 0x06000110 RID: 272 RVA: 0x00007858 File Offset: 0x00005A58
public static bool Verify(Data data)
{
bool flag2;
try
{
bool flag = false;
if (!string.IsNullOrEmpty(data.Signature))
{
using (RSA rsa = RSA.Create())
{
byte[] bytes = Encoding.UTF8.GetBytes(data.Value);
byte[] array = Convert.FromBase64String(data.Signature);
rsa.ImportFromPem(Class0.smethod_20(2010));
flag = rsa.VerifyData(bytes, array, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
}
flag2 = flag;
}
catch (Exception ex)
{
throw new VerificationFailedException(Class0.smethod_20(2930), ex);
}
return flag2;
}
肯定是验证不通过了啦。不管三七二十一,直接返回true吧。

通过之后 ,就是调用JsonSerializer.Deserialize<User>(@string, null);函数从json字符串中解析出User对象。

如果格式不正确,会抛出异常,返回null。
格式正确,就能得到User对象:

然后,再判断一下授权期限和APP类型是否匹配。
User user = ActivateUtil.GetUser(token);
if (user != null && TimeService.Now > user.LicenseStartDateTime && TimeService.Now < user.LicenseStopDateTime)
{
List<AssociatedApp> apps = user.Apps;
if (apps != null)
{
foreach (AssociatedApp associatedApp in apps)
{
if (associatedApp.App == Class47.smethod_17(6456))
{
flag = associatedApp.ActivatedDevices != null && associatedApp.ActivatedDevices.Contains(deviceId);
break;
}
}
}
}
if (flag)
{
this.Uuid = user.LicenseCode;
this.Email = user.Email;
StaticValue.AppSettings.User = token;
StaticValue.AppSettings.Save();
base.Info(Resources.ActivationSuccessful);
goto IL_0301;
}
没问题就成功了:


被折叠的 条评论
为什么被折叠?



