前言

JetBrains公司的IDE十分好用,如Idea、Pycharm等。以前的各种激活方式被相继封杀,现在主要的白嫖方式是通过无限重置试用来实现的。(其实还是有永久激活的,关键词:FineAgent

那么,无限重置试用是怎么做的呢?有没有不装插件一键全部重置试用的方式呢?

原理

JetBrains的重置试用来自Jetbrains系列产品重置试用方法 | 知了,主要是需要安装IDE Eval Reset插件,插件源码:ide-eval-resetter: Reset your IDE eval information.

自JetBrains 2020版本,IDE的试用key保存在用户目录下的 AppData\Roaming\JetBrains<IDE名称>\eval 目录下,以.evaluation.key结尾。这是个非常小的文件,只有8字节,内容如下:

1
2
> xxd .\CLion212.evaluation.key
00000000: ffff fe83 76f7 f9b6                      ....v...

16进制的ffff fe83 76f7 f9b6经过转为二进制,再取反,再转成十进制,其实就是试用时的时间戳(毫秒为单位),转换过程如下:

1
2
3
4
5
16进制         ffff fe83 76f7 f9b6
==> 二进制     1111111111111111111111101000001101110110111101111111100000000000
==> 取反       0000000000000000000000010111110010001001000010000000011111111111
==> 转成十进制  1634386577407
==> 转成时间    2021-10-16 20:16:17

那么,对于重置试用,只需要把新的值按照上面的转换规则写到key文件即可。

实现

在了解上面的原理后,实现起来其实不难,只要把新的时间戳按位取反再以二进制写到key文件即可。

考虑到用Golang写能直接编译成可执行文件,同时为了练习,这里给出个Golang实现的版本,通过其它方式实现也是非常简单的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
	"bytes"
	"encoding/binary"
	"os"
	"path/filepath"
	"time"
)

func main() {
	home := os.Getenv("userprofile")
	pattern := filepath.Join(home, "AppData", "Roaming", "JetBrains", "*", "eval", "*.evaluation.key")
	evalKey, _ := filepath.Glob(pattern)
	var fp *os.File
	defer fp.Close()
	for _, key := range evalKey {
		buf := new(bytes.Buffer)
		fp, _ = os.Create(key)
		target := ^uint64(time.Now().UnixNano() / 1e6)
		binary.Write(buf, binary.BigEndian, target)
		fp.Write(buf.Bytes())
	}
}

自动执行

如果手动执行的话自然还是比较麻烦的,所以可以新建一个任务计划自动执行。打开任务计划程序,新建一个任务计划,操作选择上面编译出来的可执行文件,至于触发器,考虑到我一般0点的时候开着电脑,这里选择每天0点执行。

配置好后,就能每天定时自动重置JetBrains试用了,并且不需要一个个IDE去安装IDE Eval Reset插件,也不需要重启IDE:试用到期后,选择“Add New License”再选择试用,即可让IDE重新加载key文件。