Jar包混淆加密

2022-09-09 14:00:27 字數 3923 閱讀 3215

一般公司開發的專案上線前都會做安全審核,為了保護一些私密**和一些敏感資訊,均需要加密處理,比如各種密碼、license處理的等,就用到jar包混淆。

jar包混淆工具挺多的,實現原理不盡相同,這裡使用的classfinal,

classfinal是一款j**a class檔案安全加密工具,支援直接加密jar包或war包,無需修改任何專案**,相容spring-framework;可避免原始碼洩漏或位元組碼被反編譯。

gitee: 

jdk 1.8 +

執行以下命令

j**a -jar classfinal-fatjar.jar -file yourproject.jar -libjars a.jar,b.jar -packages com.yourpackage,com.yourpackage2 -exclude com.yourpackage.main -pwd

123456 -y

引數說明

-file 加密的jar/war完整路徑

-packages 加密的包名(可為空,多個用","

分割)-libjars jar/war包lib下要加密jar檔名(可為空,多個用","

分割)-cfgfiles 需要加密的配置檔案,一般是classes目錄下的yml或properties檔案(可為空,多個用","

分割)-exclude 排除的類名(可為空,多個用","

分割)-classpath 外部依賴的jar目錄,例如/tomcat/lib(可為空,多個用","

分割)-pwd

加密密碼,如果是#號,則使用無密碼模式加密

-code 機器碼,在繫結的機器生成,加密後只可在此機器上執行

-y 無需確認,不加此引數會提示確認以上資訊

結果: 生成 yourpaoject-encrypted.jar,這個就是加密後的jar檔案;加密後的檔案不可直接執行,需要配置j**aagent。

注: 以上示例是直接用引數執行,也可以直接執行 j**a -jar classfinal-fatjar.jar按照步驟提示輸入資訊完成加密。

在要加密的專案pom.xml中加入以下外掛程式配置,目前最新版本是:1.2.1。

<

plugin

>

<

groupid

>net.roseboy

groupid

>

<

artifactid

>classfinal-m**en-plugin

artifactid

>

<

version

>$

version

>

<

configuration

>

<

password

>000000

password

>

<

packages

>com.yourpackage,com.yourpackage2

packages

>

<

cfgfiles

cfgfiles

>

<

excludes

>org.spring

excludes

>

<

libjars

>a.jar,b.jar

libjars

>

configuration

>

<

executions

>

<

execution

>

<

phase

>package

phase

>

<

goals

>

<

goal

>classfinal

goal

>

goals

>

execution

>

executions

>

plugin

>

執行mvn package時會在target下自動加密生成yourpaoject-encrypted.jar。

m**en外掛程式的引數名稱與直接執行的引數相同,請參考上節的引數說明。

加密時-pwd引數設為#,啟動時可不用輸入密碼; 如果是war包,啟動時指定引數 -nopwd,跳過輸密碼過程。

機器繫結只允許加密的專案在特定的機器上執行;

在需要繫結的機器上執行以下命令,生成機器碼

j**a -jar classfinal-fatjar.jar -c

加密時用-code指定機器碼。機器繫結可同時支援機器碼+密碼的方式加密。

加密後的專案需要設定j**aagent來啟動,專案在啟動過程中解密class,完全記憶體解密,不留下任何解密後的檔案。

解密功能已經自動加入到 yourpaoject-encrypted.jar中,所以啟動時-j**aagent與-jar相同,不需要額外的jar包。

啟動jar專案執行以下命令:

j**a -j**aagent:yourproject-encrypted.jar='

-pwd 0000000

' -jar yourproject-encrypted.jar

//引數說明

//-pwd 加密專案的密碼

//-pwdname 環境變數中密碼的名字

j**a -j**aagent:yourpaoject-encrypted.jar -jar yourproject-encrypted.jar

使用nohup命令啟動時,如果系統支援gui,會彈出輸入密碼的介面,如果是純命令列下,不支援gui,則需要在同級目錄下的classfinal.txt或yourpaoject-encrypted.classfinal.txt中寫入密碼,專案讀取到密碼後會清空此檔案。

密碼讀取順序已經改為:引數獲取密碼||環境變數獲取密碼||密碼檔案獲取密碼||控制台輸入密碼||gui輸入密碼||退出

//

linux下 catalina.sh

catalina_opts="

$catalina_opts -j**aagent:classfinal-fatjar.jar='-pwd 0000000'";

export catalina_opts;

//win下catalina.bat

set j**a_opts="

-j**aagent:classfinal-fatjar.jar='-pwd 000000'"//

引數說明

//-pwd 加密專案的密碼

//-nopwd 無密碼加密時啟動加上此引數,跳過輸密碼過程

//-pwdname 環境變數中密碼的名字

本工具使用aes演算法加密class檔案,密碼是保證不被破解的關鍵,請儲存好密碼,請勿洩漏。

密碼一旦忘記,專案不可啟動且無法恢復,請牢記密碼。

本工具加密後,原始的class檔案並不會完全被加密,只是方法體被清空,保留方法引數、註解等資訊,這是為了相容spring,swagger等掃瞄註解的框架; 方法體被清空後,反編譯者只能看到方法名和註解,看不到方法的具體內容;當class被classloader載入時,真正的方法體會被解密注入。

為了保證專案在執行時的安全,啟動jvm時**引數: -xx:+disableattachmechanism 。

jar包公升級,jar包衝突

事件 需要將clientlibrary 1.0.jar公升級為clientlibrary 1.1.jar,對jar包版本進行公升級 檢查原因 檢查備份系統可正常訪問,公升級jar包後出現同樣問題,確定jar的問題,getbean name 引用的spring.jar中的org.springframe...

Android 混淆打包不混淆第三方jar包

專案由於要公布,所以要混淆打包。混淆打包流程 1.在proguard project.txt檔案裡加入不須要混淆的類和第三方的jar包 這個是保持自己包中不須要混淆的類,假設有些類呼叫了jni也不須要混淆,不然會出錯。還有假設專案中有其它專案作為library引入,那這些專案的一些類也不能混淆。這個...

前端加密辦法之混淆js加密

每個頁面都是有資料和頁面結構以及樣式組成,對於單頁面的作者來說這中分離的感覺會明顯一點,那當我們通過ajax請求拿到資料之後我們一般就是把資料渲染到頁面,但是資料介面又不想那麼明顯是乙個json字串,資料加密一半採用混淆的js的做法,比如如果你使用的是react的話,react更新資料的是this....