Jetbrains系列(IntelliJ IDEA, WebStorm等)有效期限延长

。_饼干妹妹 提交于 2019-12-03 18:59:33

的确,早就有高手提供了完全破解方法http://idea.lanyus.com/,就是把Jetbrains.2.5.3.jar加入到IDEA启动选项vm.options里作为javaagent,让他运行时经过这个agent做代码替换,把取得LicenseData的api替换了。这个方法自然完美,谢谢!

只是有时实在不好意思用这个crack版,原因就不说了...

于是我还是老套路,把试用期限信息删除了,就可以重新试用了。

虽说粗暴的把注册表(Mac下叫defaults)里相关的信息和用户目录/.IntelliJIdea2016.1删除肯定就可以,但是以前的设定就没了,还得重新折腾一下,于是想精确的删除试用期信息,这个比起那些大牛的活儿应该简单太多了吧,于是练练手,

最终结论,共3步。偷偷作怪的就是这第3步。

2016/08/30: Mac上干脆做了个脚本,连options.xml修改都做了,全自动了。

    defaults delete com.apple.java.util.prefs 2> /dev/null
    for f in ~/Library/Preferences/jetbrains.*.plist; do
        if [[ -f $f ]]; then
            fn=${f##*/}; key=${fn%.plist}
            echo delete $key from pref and file $f
            defaults delete "${fn%.plist}" 2>/dev/null && rm "$f"
        fi
    done
    rm -fr ~/Library/Preferences/IntelliJIdea*/eval
    rm -fr ~/Library/Preferences/WebStorm*/eval
    rm -fr ~/Library/Preferences/WebIde*/eval
    rm -fr ~/Library/Preferences/PhpStorm*/eval
    rm -fr ~/Library/Preferences/CLion*/eval
    rm -fr ~/Library/Preferences/AppCode*/eval
    rm -fr ~/Library/Preferences/GoLand*/eval
    rm -fr ~/Library/Preferences/PyCharm*/eval
    # echo registred key is here: ~/Library/Preferences/XXX/*.key
    for f in ~/Library/Preferences/*/options/options.xml; do
        if [[ -f $f ]] && grep -HF evlsprt "$f"; then
            echo modify "$f"
            cp "$f" "$f".bak && grep -vF evlsprt "$f" > "$f".tmp && mv "$f".tmp "$f" && echo removed evlsprt from $f;
        fi
    done
    echo done

而Windows下,还是零散的搞得。

1.  删除注册表里的试用信息

reg delete HKEY_CURRENT_USER\Software\JavaSoft\Prefs\jetbrains

2.  删除设定目录里的试用证书信息

 

Windows:  (通配符用不了,只好固定写了版本号,临时替换吧)

 

del /s /q "%USERPROFILE%\IntelliJIdea2016.1\config\eval"
del /s /q "%USERPROFILE%\WebStorm2016.1\config\eval"
del /s /q "%USERPROFILE%\PhpStorm2016.1\config\eval"
del /s /q "%USERPROFILE%\CLion2016.1\config\eval"
del /s /q "%USERPROFILE%\AppCode2017.3\config\eval"

2016/11/30: 最近WebStorm2016.2.4的期限信息发现放在%USEPROFILE%\.WebStorm2016.2\concig\eval下了。所以得

del /s /q "%USEPROFILE%\.WebStorm2016.2\config\eval"

3. 删除options.xml里的使用期信息。(只需做一次,但一旦升级就重做一次)

 

<用户目录>/.IntelliJIdea2016.1/config/options.xml文件,删除evalsptr*设定行。 例如:

 

<property name="evlsprt3.15" value="18" />
<property name="evlsprt.15" value="153d6d7cdad" />
<property name="evlsprt2.15" value="1537a3dd4cd" />
<property name="evlsprt3.16" value="17" />
<property name="evlsprt.16" value="1542158f690" />
<property name="evlsprt2.16" value="153ca04a797" />

对于WebStorm, PhPStorm,得把IntelliJIdea换成相应的名称。

---------------------------------------------------------------

 

寻找经过也走了些弯路,debug进去查看了bytecode才找到evlsprt*设定的,以前没发现他会使用options.xml里的设定啊。

第一步是要找到那个该死的“过期强制退出对话框”里代码,我打算在Runtime.exit里设定一个断点从而找到调用者。

先是配置vm.options使得允许debug,启动一下IDEA(就算过期了也可以运行几分钟的),Help里有个vm选项配置,执行一下就会打开一个配置文件,加入:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000

运行IDEA, 他会停住,看起来什么都没发生一样,实际它开了个8000端口等待debugger接入。

 

然后用Eclipse Luna版本+  Bytecode Visualizer插件,随便建立一个Java工程,

加一个Remote Java Applica型的Debug配置,端口号填写成8000。

图片上传限制的太狠,不传了,真烂,看来该换个地方了。

 

然后就到IntelliJ IDEA安装目录里找到自带的jdk的rt.jar,加入到Java工程的Build Path里,同时把默认的JDK从Build Path里删掉,

然后Navigate到java.lang.Runtime里,其实这就是到了刚才添加的rt.jar里了,

找到exit函数,设定一个断点,注意得正好在函数名称那一行设定断点最好,因为此时rt.jar还没被load进来,只能作为动态函数断点。

然后就运行刚刚配置好的Debug配置,这就通过8000端口接入到等待调试的IDEA进程里了。

然后就让IDEA继续运行,进入试用模式,过几分钟,IDEA会提醒“过期了,必须强制退出”的对话框,按退出按钮,就回进入断点,

这是可以看到调用层次,明显就在一个叫做com.intellij.ide.EvaluationSupport的class里,

于是到IDEA安装目录里寻找这个class的出处,就是编个脚本用unzip -l过滤EvaluationSupport就可以,结果在idea.jar里。

那么把这个idea.jar加入到这个Java工程的Build Path里,就可以进一步调试其中的代码了。

把这个EvaluationSupport的所有method全部设上断点,观察参数值,发现里面明显有包含时间信息的HashMap,key明就叫做evlsprt什么什么的,值就是数字,145开头或者146开头的,例如1465193637467,哦,似乎记得是十六进制文字列,155什么什么的,反正就像日期。

那拿这个数字到Chrome的javascript console里输入new Date(1465193637467)就可以看出时间是最近的,

这应该就是了,这个时间从哪里来的呢?key文件和注册表信息都删除了,网络也是关闭的,者还能从哪里来的?

后来的弯路就省略了,其实直接用jd-gui打开idea.jar就能得到线索了,这个class里屡次试用了evlsprt*关键字,

最终用这个关键字去到IDEA的设定目录 <用户目录>/.IntelliJIdea2016.1 下grep,发现时options.xml,于是去掉以后再试就好了。

要是再花些时间,应该可以搞清这几个evlsprt设定的含义,以及搞清楚evaluation.key文件里内容的加密方式,因为看起来非常简单,就是一个8 byte,0xffffaafeb0e1d82f,-93464110704640,看起来不是直接的时间。

就没搞了。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!