摘要:前言最近在項(xiàng)目中碰到個(gè)一個(gè)場(chǎng)景,我們需要把自己的項(xiàng)目包部署到一個(gè)第三方的服務(wù)器上,雖然雙方互相信任,但是綜合考慮,避免別人拿到包后可以很快的編譯出源碼,我們決定給代碼加一層混淆,雖然此方法不能從根源上解決問(wèn)題,但是做了一層混淆,也可以增加閱
前言
最近在項(xiàng)目中碰到個(gè)一個(gè)場(chǎng)景,我們需要把自己的java項(xiàng)目jar包部署到一個(gè)第三方的服務(wù)器上,雖然雙方互相信任,但是綜合考慮,避免別人拿到j(luò)ar包后可以很快的編譯出源碼,我們決定給代碼加一層混淆,雖然此方法不能從根源上解決問(wèn)題,但是做了一層混淆,也可以增加閱讀源碼的難度,總結(jié)了一下,寫(xiě)下這篇文章。
如何反編譯java代碼我用的是mac電腦,從官網(wǎng):http://java-decompiler.github...下載JD-GUI,官網(wǎng)有很多版本,下載后安裝打開(kāi)即可,導(dǎo)入你想反編譯的jar,我這里隨便找了個(gè)jar包做演示
細(xì)心的小伙伴肯定發(fā)現(xiàn)了,上面的截圖有的包名是a,b,c這樣命名的,但凡有點(diǎn)節(jié)操的程序員都不會(huì)這樣命名的,這就是被混淆后的代碼,讓人不會(huì)一眼看出來(lái)代碼里面的邏輯,效果會(huì)像下面這樣
可以看到類名,包名都被修改了
我們以之前springboot項(xiàng)目為例,進(jìn)行service層的代碼的混淆,混淆前效果如下:
接下來(lái)我們只需要在pom里面加入如下插件
org.apache.maven.plugins maven-compiler-plugin 3.1 1.7 UTF-8 com.github.wvengen proguard-maven-plugin 2.0.14 package proguard 6.1.0beta2 ${project.build.finalName}.jar ${project.build.finalName}.jar true true ${java.home}/lib/rt.jar net.sf.proguard proguard-base 6.1.0beta2 org.springframework.boot spring-boot-maven-plugin
執(zhí)行打包命令:mvn package,會(huì)看到生成如下
我們看到了生成了不只一個(gè)jar包,還有一些別的文件,這個(gè)我們放后面介紹,我們先看下劃紅線的jar反編譯后的效果
可以看到我們針對(duì)service包下面的類混淆成功了
zplxjj_proguard_base.jar是沒(méi)有經(jīng)過(guò)混淆的jar
兩個(gè).txt文件說(shuō)明了混淆前和混淆后的對(duì)應(yīng)關(guān)系
如果項(xiàng)目中引入了spring框架,類的注入id要保持唯一性,否則就要重寫(xiě)生成bean的id規(guī)則的方法
更多pom文件細(xì)節(jié)可以參考:https://www.guardsquare.com/e...
更多文章可關(guān)注個(gè)人博客:https://www.zplxjj.com和公眾號(hào)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/74918.html
摘要:小節(jié)也有類似的栗子,其結(jié)論是靜態(tài)方法不具有多態(tài)性。來(lái)自一個(gè)有趣的問(wèn)題靜態(tài)字段論述的問(wèn)題大致是說(shuō)以上兩個(gè)類中各有幾個(gè)方法本質(zhì)其實(shí)就是有無(wú)時(shí)的區(qū)別。 Demo1 來(lái)自關(guān)于java中static一個(gè)有意思的小案例: class Employee { private static Employee employee = new Employee(); public static...
摘要:二進(jìn)制位,是計(jì)算機(jī)內(nèi)部數(shù)據(jù)儲(chǔ)存的最小單位,是一個(gè)位二進(jìn)制數(shù)。由于源代碼也是一個(gè)文本文件,所以,當(dāng)你的源代碼中包含中文的時(shí)候,在保存源代碼時(shí),就需要?jiǎng)?wù)必指定保存為編碼。 計(jì)算機(jī)存儲(chǔ)的幾個(gè)概念 想要徹底搞清楚編碼問(wèn)題,我們必須要先搞清楚計(jì)算機(jī)是怎么存儲(chǔ)數(shù)據(jù)的,這就涉及到了計(jì)算機(jī)基礎(chǔ)的幾個(gè)概念了,開(kāi)篇我們就先來(lái)捋捋這幾個(gè)容易混淆的概念。 bit 二進(jìn)制位, 是計(jì)算機(jī)內(nèi)部數(shù)據(jù)儲(chǔ)存的最小單位,1...
閱讀 2074·2021-10-12 10:12
閱讀 793·2021-09-24 09:47
閱讀 1194·2021-08-19 11:12
閱讀 3472·2019-08-29 13:06
閱讀 689·2019-08-26 11:43
閱讀 2573·2019-08-23 17:20
閱讀 1154·2019-08-23 16:52
閱讀 2602·2019-08-23 14:27