国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用開源工具ProGuard實現(xiàn)Java代碼混淆

這篇具有很好參考價值的文章主要介紹了使用開源工具ProGuard實現(xiàn)Java代碼混淆。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

參考文檔:

  1. ProGuard官網
  2. ProGuardMaven插件文檔
  3. ProGuard官方配置文檔
  4. ProGuard配置中文文檔
  5. CSDN-ProGuard使用演示
  6. 知乎-ProGuard使用演示

一、概述

代碼混淆是將計算機程序的代碼轉換成一種功能上等價,但是難以閱讀和理解的形式。

二、常見的混淆思路

  • 符號混淆

    將函數(shù)的符號,如函數(shù)名、變量名去除或混淆。

  • 控制流混淆

    混淆程序正常的控制流,使其在功能保持不變的情況下,使其不能清晰地反映原程序的正常邏輯。

  • 計算混淆

    混淆程序的計算流程,或計算流程中使用的數(shù)據(jù),使分析者難以分辨某一段代碼所執(zhí)行的具體計算。

  • 虛擬機混淆

    將一組指令集合(如一組x86指令)轉化為一組攻擊者未知的自定義指令集,并用與程序綁定的解釋器解釋執(zhí)行。

三、ProGuard工具

? ProGuard是一個壓縮、優(yōu)化和混淆Java字節(jié)碼文件的免費的工具,它可以刪除無用的類、字段、方法和屬性??梢詣h除沒用的注釋,最大限度地優(yōu)化字節(jié)碼文件。它還可以使用簡短的無意義的名稱來重命名已經存在的類、字段、方法和屬性。常常用于Android/Java開發(fā)用于混淆最終的項目,增加項目被反編譯的難度。

? 處理流程:

  • proguard 開源,Java技術之路,java,開發(fā)語言

? 1)壓縮(shrink):檢測并刪除未使用的類,字段,方法和屬性

? 2)優(yōu)化(Optimize):分析并優(yōu)化方法的字節(jié)碼

? 3)混淆(obfuscate):使用簡短無意義的名稱如a,b等重命名類、方法和屬性。

? 4)預檢(preverify):Java平臺上對處理后的代碼進行預檢

四、引入項目

? ProGuard官方默認提供Gradle插件,不提供Maven插件。但是官方推薦了兩個Maven插件wvengen/proguard與dingxin/proguard,我們使用第一個插件。

項目使用的框架及語言版本:

- 版本
Spring 2.7.* (2.0+版本都可以,1.5和3.0+未測試)
Java 8
proguard 2.6.0

1. 配置xml

<build>
  <plugins>
    <!--  代碼混淆proguard maven插件  -->
    <plugin>
      <groupId>com.github.wvengen</groupId>
      <artifactId>proguard-maven-plugin</artifactId>
      <version>2.6.0</version>
      <executions>
        <!--   package時執(zhí)行proguard   -->
        <execution>
          <phase>package</phase>
          <goals>
            <goal>proguard</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <!--  輸入的jar包  -->
        <injar>${project.build.finalName}.jar</injar>
        <!--  輸出的jar包  -->
        <outjar>${project.build.finalName}.jar</outjar>
        <!--  是否進行混淆,默認為true  -->
        <obfuscate>true</obfuscate>
        <!--  配置文件,通常為proguard.cfg,主要對options選項進行配置,所有的options選項都可以進行配置  -->
        <proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>
        <!--  額外的jar,項目編譯所需的jar  -->
        <libs>
          <lib>${java.home}/lib/rt.jar</lib>
          <!--<lib>${java.home}/lib/jce.jar</lib>-->
          <lib>${java.home}/lib/jsse.jar</lib>
        </libs>
        <!--  對輸入jar進行過濾,如對META-INFO文件不處理  -->
        <inLibsFilter>!META-INF/**,!META-INF/versions/**</inLibsFilter>
        <!--  輸出路徑配置,必須包含injar標簽中填寫的jar  -->
        <outputDirectory>${project.build.directory}</outputDirectory>
        <!--  上面使用了conf配置文件,options無需配置  -->
        <!--<options></options>-->
      </configuration>
    </plugin>
  </plugins>
</build>

2. proguard.cfg文件配置

? 該文件主要是對項目代碼混淆時的參數(shù)配置,這里放在項目根目錄與pom文件同級

# 指定 java 版本
-target 1.8
# 關閉對代碼進行優(yōu)化壓縮,開啟會刪除從未使用的類或者類成員變量等
-dontshrink
# 列出未使用的代碼,可打印到標準輸出或寫入指定文件
#-printusage
# 關閉字節(jié)碼級別的優(yōu)化,如果不開啟則設置如下配置,默認開啟。
-dontoptimize
# 關閉預檢,預檢主要針對JavaME,Java6以后都不用預檢
-dontpreverify
# 不生成大小寫混寫的類名
-dontusemixedcaseclassnames
# 對類成員的命名混淆采取唯一策略
-useuniqueclassmembernames
# 混淆類名之后,對使用Class.forName('className')之類的地方進行相應替代
-adaptclassstrings
#對異常、注解信息予以保留
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
# 此選項將保存接口中的所有原始名稱(不混淆)-->
-keepnames interface ** { *; }
# 此選項將保存所有軟件包中的所有原始接口文件(不進行混淆)
#-keep interface * extends * { *; }
#保留參數(shù)名,因為控制器,或者Mybatis等接口的參數(shù)如果混淆會導致無法接受參數(shù),xml文件找不到參數(shù)
-keepparameternames
# 保留枚舉成員及方法
-keepclassmembers enum * { *; }
# 不混淆所有類,保存原始定義的注釋-
-keepclassmembers class * {
    @org.springframework.context.annotation.Bean *;
    @org.springframework.beans.factory.annotation.Autowired *;
    @org.springframework.beans.factory.annotation.Value *;
    @org.springframework.stereotype.Service *;
    @org.springframework.stereotype.Component *;
}

#忽略warn消息
-ignorewarnings
#忽略note消息
#-dontnote
#打印配置信息
#-printconfiguration
# 排除混淆 指定的類名且類中的方法也不混淆
-keep class com.example.proguard.ProguardDemoApplication{<methods>;}

keep可以幫助我們保留我們不需要進行混淆的類、方法或屬性,關于上述配置文件中的keep關系整理:

保留內容 防止刪除或重命名 防止重命名
類和類成員 -keep -keepnames
僅類成員 -keepclassmembers -keepclassmembernames
如果類成員存在,保留類和類成員 -keepclasswithmembers -keepclasswithmembernames

更多屬性配置,請參照:ProGuard配置中文文檔

3. 項目結構

├── pom.xml
├── proguard.cfg
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── proguard
    │   │               ├── ProguardDemoApplication.java
    │   │               └── controller
    │   │                   └── IndexController.java
    │   └── resources
    │       └── application.yml
    └── test

4. 注意事項

  • 不混淆反射代碼。(class.forName(“類名”))
  • 不混淆需要bean注入的類。(因為我們沒有給bean指定id,那么此時的bean的唯一標識的就是name。)
  • 不混淆aop切面的類或方法。(原因與上述大致)
  • 混淆之后可能會有很多奇怪的問題導致項目啟動失敗,需要根據(jù)實際情況進行放行(不混淆)。
  • 對于混淆成功了的項目也需要多進行測試,保證其功能與接口完成與未混淆的源碼功能一致。

五、成功演示

1. 未混淆代碼反編譯演示

將項目正常打包后通過反編譯工具(JD)進行查看:

proguard 開源,Java技術之路,java,開發(fā)語言

2. 混淆后代碼反編譯演示

將項目代碼混淆后通過反編譯工具查看

proguard 開源,Java技術之路,java,開發(fā)語言

3. 使用命令啟動混淆后的jar包

java -jar proguard-1.0.0-SNAPSHOT.jar

請求接口進行測試

proguard 開源,Java技術之路,java,開發(fā)語言

六、源碼

Gitee碼云,免費下載及參考。文章來源地址http://www.zghlxwxcb.cn/news/detail-725751.html

到了這里,關于使用開源工具ProGuard實現(xiàn)Java代碼混淆的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 組件打包常用工具-proguard-maven-plugin等

    ?1.proguard-maven-plugin 2. maven-shade-plugin 3.maven-Assembly-plugin 4.onejar-maven-plugin ? ?5.mvaen-jar-plugin和 maven-dependency-plugin ?

    2024年02月12日
    瀏覽(21)
  • 【Dotnet 工具箱】JIEJIE.NET - 強大的 .NET 代碼混淆工具

    你好,這里是 Dotnet 工具箱,定期分享 Dotnet 有趣,實用的工具和組件,希望對您有用! JIEJIE.NET 是一個使用 C# 開發(fā)的開源 .NET 代碼加密工具。 很多 .NET 開發(fā)人員擔心他們的軟件被破解,版權受到侵犯,所以他們使用一些工具來混淆 IL 代碼。比如 PreEmptive dotfuscator, 但有些場

    2024年02月01日
    瀏覽(21)
  • php代碼還原工具,解決goto語句混淆,php goto解密還原

    php代碼還原工具,解決goto語句混淆,php goto解密還原

    在編寫php代碼時,使用goto語句是一種常見的加密技巧。為了解決goto解碼無法閱讀這個問題,今天我要向大家介紹一款強大的php goto解密工具。 這款工具的主要功能之一就是php代碼的還原。通過對代碼進行解析和分析,它能夠輕松還原被混淆的goto語句,使得代碼更加易讀和易

    2024年02月12日
    瀏覽(21)
  • 八十行代碼實現(xiàn)開源的 Midjourney、Stable Diffusion “咒語”作圖工具

    八十行代碼實現(xiàn)開源的 Midjourney、Stable Diffusion “咒語”作圖工具

    本篇文章聊聊如何通過 Docker 和八十行左右的 Python 代碼,實現(xiàn)一款類似 Midjourney 官方圖片解析功能 Describe 的 Prompt 工具。 讓你在玩 Midjourney、Stable Diffusion 這類模型時,不再為生成 Prompt 描述撓頭。 本文將提供兩個版本的工具,分別支持 CPU 和 GPU 推理使用,如果你有一張大于

    2023年04月14日
    瀏覽(51)
  • Java開源工具庫使用之httpclient

    Java開源工具庫使用之httpclient

    HttpClient 成立于2001年,是 Apache Jakarta Commons 項目下的子項目,2004 年離開 Commons ,提升成為一個單獨的 Jakarta 項目。2005 年,Jakarta 創(chuàng)建了 HttpComponents 項目,目標是開發(fā) HttpClient 3.x 的繼任者。2007 年, Commons 項目,也就是 HttpClient 項目的發(fā)源地,離開了 Jakarta , 成為了1個新的

    2024年02月06日
    瀏覽(20)
  • 開源|用 Java 實現(xiàn)一個生成 Markdown 文本的工具

    公司的 IM 每天有許多機器人推送的消息,我也在使用,這個功能是好的,但是當我們想去發(fā)送一些格式優(yōu)美的消息時,卻要費許多功夫,主要來源于字符串拼接,如果要拼接出 Markdown 格式的那就更費力了,另外由拼接帶來的是混亂的代碼,為了解決這個痛點,我寫了一個

    2023年04月15日
    瀏覽(22)
  • 基于misra-c-2012規(guī)則在vscode下集成cppcheck開源工具實現(xiàn)代碼靜態(tài)檢查

    基于misra-c-2012規(guī)則在vscode下集成cppcheck開源工具實現(xiàn)代碼靜態(tài)檢查

    依賴工具: 1、cppcheck工具 2、vscode下安裝C/C++ Advanced Lint擴展 3、python工具 雙擊后軟件自行安裝在:C:Program FilesCppcheck 添加系統(tǒng)路徑步驟 2.1、在vscode軟件中點擊設置按鈕,選擇“設置”選項 2.2、搜索“@ext:jbenden.c-cpp-flylint”然后“settings.json”中編輯 2.3、在settings.json中添加這

    2024年02月09日
    瀏覽(203)
  • 從零開發(fā)基于ASM字節(jié)碼的Java代碼混淆插件XHood

    因在公司負責基礎框架的開發(fā)設計,所以針對框架源代碼的保護工作比較重視,之前也加入了一系列保護措施 例如自定義classloader加密保護,授權l(xiāng)icense保護等,但都是防君子不防小人,安全等級還比較低 經過調研各類加密混淆措施后,決定自研混淆插件,自主可控,能夠貼

    2024年02月06日
    瀏覽(17)
  • 開源一套文本處理工具:Java+Bat腳本實現(xiàn)自動批量處理對賬單工具

    開源一套文本處理工具:Java+Bat腳本實現(xiàn)自動批量處理對賬單工具

    原創(chuàng)/朱季謙 這款工具是筆者在2018年初開發(fā)完成的,時隔兩載,偶然想起這款小工具,于是,決定將其開源,若有人需要做類似Java批處理實現(xiàn)整理文檔的工具,可參考該工具邏輯思路來實現(xiàn)。 該工具是運行在windos系統(tǒng)上的,基于bat腳本與jar包形式協(xié)同運行。 當時開發(fā)該工具

    2024年02月03日
    瀏覽(20)
  • 完全從零Java自學系列【工具篇】(GITHUB開源社區(qū)&GIT管理工具入門使用)

    完全從零Java自學系列【工具篇】(GITHUB開源社區(qū)&GIT管理工具入門使用)

    ??本文適用于新手理解GITHUB社區(qū)與GIT的理解與入門使用。 ??GITHUB社區(qū)是一個代碼開源交流社區(qū)。 對于普通的開發(fā)者而言: 可以在上面找到各種開源好用的工具用于借鑒學習或者下載使用。 可以提問,搜索相應的問題處理辦法。比如bug。 對于高級開發(fā)者而言: 可以參與

    2024年02月20日
    瀏覽(58)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包