Modbus Slave Emulator注册算法研究(五)

构造激活码

下面就来构造一个形式上正确的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;
							}

没问题就成功了:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值