摘要:前言最近在項目中碰到個一個場景,我們需要把自己的項目包部署到一個第三方的服務器上,雖然雙方互相信任,但是綜合考慮,避免別人拿到包后可以很快的編譯出源碼,我們決定給代碼加一層混淆,雖然此方法不能從根源上解決問題,但是做了一層混淆,也可以增加閱
前言
最近在項目中碰到個一個場景,我們需要把自己的java項目jar包部署到一個第三方的服務器上,雖然雙方互相信任,但是綜合考慮,避免別人拿到jar包后可以很快的編譯出源碼,我們決定給代碼加一層混淆,雖然此方法不能從根源上解決問題,但是做了一層混淆,也可以增加閱讀源碼的難度,總結了一下,寫下這篇文章。
如何反編譯java代碼我用的是mac電腦,從官網:http://java-decompiler.github...下載JD-GUI,官網有很多版本,下載后安裝打開即可,導入你想反編譯的jar,我這里隨便找了個jar包做演示
細心的小伙伴肯定發現了,上面的截圖有的包名是a,b,c這樣命名的,但凡有點節操的程序員都不會這樣命名的,這就是被混淆后的代碼,讓人不會一眼看出來代碼里面的邏輯,效果會像下面這樣
可以看到類名,包名都被修改了
我們以之前springboot項目為例,進行service層的代碼的混淆,混淆前效果如下:
接下來我們只需要在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
執行打包命令:mvn package,會看到生成如下
我們看到了生成了不只一個jar包,還有一些別的文件,這個我們放后面介紹,我們先看下劃紅線的jar反編譯后的效果
可以看到我們針對service包下面的類混淆成功了
zplxjj_proguard_base.jar是沒有經過混淆的jar
兩個.txt文件說明了混淆前和混淆后的對應關系
如果項目中引入了spring框架,類的注入id要保持唯一性,否則就要重寫生成bean的id規則的方法
更多pom文件細節可以參考:https://www.guardsquare.com/e...
更多文章可關注個人博客:https://www.zplxjj.com和公眾號
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74918.html
摘要:小節也有類似的栗子,其結論是靜態方法不具有多態性。來自一個有趣的問題靜態字段論述的問題大致是說以上兩個類中各有幾個方法本質其實就是有無時的區別。 Demo1 來自關于java中static一個有意思的小案例: class Employee { private static Employee employee = new Employee(); public static...
摘要:二進制位,是計算機內部數據儲存的最小單位,是一個位二進制數。由于源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存為編碼。 計算機存儲的幾個概念 想要徹底搞清楚編碼問題,我們必須要先搞清楚計算機是怎么存儲數據的,這就涉及到了計算機基礎的幾個概念了,開篇我們就先來捋捋這幾個容易混淆的概念。 bit 二進制位, 是計算機內部數據儲存的最小單位,1...
閱讀 2071·2021-10-12 10:12
閱讀 791·2021-09-24 09:47
閱讀 1191·2021-08-19 11:12
閱讀 3468·2019-08-29 13:06
閱讀 689·2019-08-26 11:43
閱讀 2571·2019-08-23 17:20
閱讀 1154·2019-08-23 16:52
閱讀 2601·2019-08-23 14:27