使用加密技術(shù)對(duì)代碼加密,保護(hù)軟件知識(shí)產(chǎn)權(quán),刻不容緩

Java 開發(fā)語言以其安全性高、代碼優(yōu)化、跨平臺(tái)等特性,迅速取代了很多傳統(tǒng)高級(jí)語言,受到廣大編程人員和企業(yè)家的青睞。不過隨之產(chǎn)生的安全問題也越來越受到大家的關(guān)注,Java 最突出的跨平臺(tái)優(yōu)勢(shì)使其要以中間代碼的形式運(yùn)行在虛擬機(jī)環(huán)境中,因此 Java 代碼反編譯要比其他開發(fā)語言更容易實(shí)現(xiàn),并且反編譯的代碼經(jīng)過優(yōu)化后幾乎可與源代碼相媲美。為了避免出現(xiàn)這種情況,保護(hù)軟件知識(shí)產(chǎn)權(quán),我們需要采用加密技術(shù)對(duì)代碼進(jìn)行加密。

本文介紹使用xjar加密技術(shù)對(duì)jar包進(jìn)行加密,主要針對(duì)maven構(gòu)建的項(xiàng)目,同時(shí)需要安裝go環(huán)境,通過在pom.xml中添加項(xiàng)目依賴,生成加密后的jar包以及go啟動(dòng)器,再對(duì)go啟動(dòng)器進(jìn)行編譯,獲取到go執(zhí)行器,最終以go執(zhí)行器啟動(dòng)jar包來運(yùn)行項(xiàng)目。

一、Maven項(xiàng)目在pom.xml中添加項(xiàng)目依賴

<!-- 設(shè)置 jitpack.io 插件倉庫 -->

<pluginRepositories>

<pluginRepository>

<id>jitpack.io</id>

<url>https://jitpack.io</url>

</pluginRepository>

</pluginRepositories>

<!-- 添加 XJar Maven 插件 -->

<build>

<plugin>

<groupId>com.github.core-lib</groupId>

<artifactId>xjar-maven-plugin</artifactId>

<version>4.0.2</version>

<executions>

<execution>

<goals>

<goal>build</goal>

</goals>

<phase>package</phase>

<configuration>

<password>123456</password>

<!-- 需要加密的資源路徑表達(dá)式 -->

<includes>

<include>net/hfmri/**</include>

<include>mapper/*Mapper.xml</include>

<include>conf/**</include>

</includes>

<!-- 無需加密的資源路徑表達(dá)式 -->

<excludes>

<exclude>static/**</exclude>

<exclude>META-INF/**</exclude>

</excludes>

<!-- 目標(biāo)jar存放目錄 -->

<targetDir>${project.build.directory}\xJarDir\</targetDir>

<!-- 目標(biāo)jar名稱,也可以用表達(dá)式(參考官網(wǎng)) -->

<targetJar>afcApp.jar</targetJar>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

</build>

Maven使用package打包后,自動(dòng)構(gòu)建出加密的jar包,生成加密jar的同時(shí),目錄下還會(huì)生成go啟動(dòng)器文件xjar.go。

我們使用反編譯工具查看加密后的jar包是否還能看到編譯后的代碼:顯示INTERNAL ERROR 不再展示源代碼。

得到加密后的jar包之后,區(qū)分windows系統(tǒng)還是linux系統(tǒng)進(jìn)行下一步操作。

二、windows系統(tǒng)

1、安裝go環(huán)境

(1)選擇windows版本下載

(2)下載之后,一步步按照操作指引安裝。我的安裝目錄:D:\install\go\install

2、安裝完成之后配置系統(tǒng)環(huán)境變量

進(jìn)入cmd驗(yàn)證go是否配置正確:

3、配置好go的環(huán)境之后,對(duì)啟動(dòng)器文件xjar.go進(jìn)行編譯

當(dāng)前目錄下進(jìn)入cmd執(zhí)行:go build xjar.go,生成對(duì)應(yīng)的go執(zhí)行器(得到xjar.exe)

4、以go執(zhí)行器xjar.exe啟動(dòng)jar包

執(zhí)行命令:xjar.exe java -jar afcApp.jar

測(cè)試服務(wù)調(diào)用是否正常:

6、填坑注意事項(xiàng)

打包時(shí)maven使用的是jdk8,本地是jdk11,啟動(dòng)時(shí)一直報(bào)錯(cuò)。

查詢資料,部分人反饋:用jdk1.8編譯的jar被xjar加密后,用jdk11是無法運(yùn)行。此結(jié)論待進(jìn)一步驗(yàn)證,目前將本地的jdk改成jdk8,可以正常運(yùn)行。進(jìn)一步將maven中的jdk和本地jdk都改成11,不能正常啟動(dòng)。測(cè)試結(jié)果:

ps:如何查看jar包的jdk版本:

原因:JDK-9及以上版本由于模塊化導(dǎo)致XJar無法使用 jdk.internal.loader 包的問題解決方案。

解決方法:在啟動(dòng)時(shí)添加參數(shù):--add-opens java.base/jdk.internal.loader=ALL-UNNAMED

添加參數(shù)之前啟動(dòng)方式:xjar.exe java -jar afcApp.jar

添加參數(shù)之后啟動(dòng)方式:xjar.exe java --add-opens java.base/jdk.internal.loader=ALL-UNNAMED -jar afcApp.jar

三、linux系統(tǒng)

1、Linux下載安裝go環(huán)境

(1)選擇linux版本下載

或使用命令下載wget https://studygolang.com/dl/golang/go1.16.3.linux-amd64.tar.gz

(2)解壓tar.gz包:tar -zxvf go1.16.3.linux-amd64.tar.gz 到自己需要安裝的目錄下(比如/usr/loacl)

(3)添加/usr/loacl/go/bin目錄到PATH變量中。在/etc/profile文件最后一行添加兩行代碼。

vim /etc/profile

// 在最后一行后添加

export GOROOT=/usr/local/go

export PATH=$PATH:$GOROOT/bin

// wq保存退出后source一下,讓配置文件生效

source /etc/profile

(4)執(zhí)行g(shù)o version,如果出現(xiàn)版本號(hào),則表示Go環(huán)境安裝成功

2、配置好go的環(huán)境之后,對(duì)xjar.go進(jìn)行編譯

執(zhí)行命令:go build xjar.go,生成對(duì)應(yīng)的go執(zhí)行器(得到xjar,這一點(diǎn)與windows系統(tǒng)不同。Windows系統(tǒng)得到的是xjar.exe)

3、以go執(zhí)行器xjar啟動(dòng)jar包

執(zhí)行命令:nohup ./xjar java -jar afcApp.jar&

帶參數(shù)啟動(dòng)方式:

nohup ./xjar java --add-opens java.base/jdk.internal.loader=ALL-UNNAMED -jar afcApp.jar&

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容