免责声明

  • 仅技术学习研究未对外传播过任何相关工具

前言

经常搞 .NET 的都知道 ReSharper ,非常好用,就是要收费。所以研究了下他是如何生成注册码的。

核心

主要代码如下,需要依赖 BigIntegerPrivateKeyPublicKey 已经打码,咋们仅仅是技术学习研究。

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
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReSharperKeygen
{
public class KeyGen
{
private const string PrivateKey = "348*********080286*********0936*********194468";
private const string PublicKey = "348*********802*********215865425*********16793";

public string CompanyName { get; set; }

public string UserName { get; set; }

public KeyGen()
{
CompanyName = string.Empty;
}

public string GetLicense()
{
var bigInteger = (new BigInteger(ushort.MaxValue) << 72) + new BigInteger(UserHash()) + (new BigInteger(ushort.MaxValue) << 56);
var n = new BigInteger(PublicKey, 10);
var exp = (new BigInteger(StringToBytesConverter.Old(UserName)) | 1).modInverse(new BigInteger(PrivateKey, 10));
return Convert.ToBase64String(bigInteger.modPow(exp, n).getBytes());
}

private int UserHash()
{
var num = 0;
for (var index = 0; index < UserName.Length; ++index)
num = ((num << 7) + UserName[index]) % 65521;
for (var index = 0; index < CompanyName.Length; ++index)
num = ((num << 7) + CompanyName[index]) % 65521;
return num;
}
}
}

截图