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

的確,早就有高手提供了徹底破解方法http://idea.lanyus.com/,就是把Jetbrains.2.5.3.jar加入到IDEA啓動選項vm.options裏做爲javaagent,讓他運行時通過這個agent作代碼替換,把取得LicenseData的api替換了。這個方法天然完美,謝謝!javascript

只是有時實在很差意思用這個crack版,緣由就不說了...java

因而我仍是老套路,把試用期限信息刪除了,就能夠從新試用了。api

雖然說粗暴的把註冊表(Mac下叫defaults)裏相關的信息和用戶目錄/.IntelliJIdea2016.1刪除確定就能夠,可是之前的設定就沒了,還得從新折騰一下,因而想精確的刪除試用期信息,這個比起那些大牛的活兒應該簡單太多了吧,因而練練手,bash

最終結論,共3步。偷偷做怪的就是這第3步。網絡

2016/08/30: Mac上乾脆作了個腳本,連options.xml修改都作了,全自動了。app

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下,仍是零散的搞得。socket

1.  刪除註冊表裏的試用信息ide

reg delete HKEY_CURRENT_USER\Software\JavaSoft\Prefs\jetbrains

2.  刪除設定目錄裏的試用證書信息函數

 

Windows:  (通配符用不了,只好固定寫了版本號,臨時替換吧)ui

 

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,看起來不是直接的時間。

就沒搞了。

相關文章
相關標籤/搜索