色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

java中的代碼混淆技術

科技綠洲 ? 來源:了不起 ? 作者:了不起 ? 2023-09-25 11:48 ? 次閱讀

今天和大家一起學習下java中的代碼混淆技術,后面你也可以讓你的代碼不再裸露在外了,讓人輕易窺視

代碼混淆技術

當需要閱讀jar文件的內容時,可能你會使用一些反編譯工具,比如jd-gui,但是否有遇到反編譯后的內容和想象的不一樣,但正常引用該jar又都是正常的?

開始的話

前段時間,使用了docx4j的庫來操作.docx文件進行一些復雜的操作,比如對多個docx文件進行合并,在網上找了很多的方式發現最終生成的文檔都有很多多余的內容, 導致原本幾兆的文件合并后有幾十兆,記得docx4j官網有提供商業版本的方法,準備窺探下其源碼來研究下,然而當我下載好jar后打開時,我蒙了...

圖片

簡介

我們知道,一般情況下編譯打包后的jar文件可以通過反編譯工具看到jar中的接口、類、方法都是可以被,這樣相關的代碼實現很容易被模仿借鑒,企業的核心代碼很可能被人盜用。特別是一些涉密較強或者商業性的行業軟件,當被拿到jar并反編譯后如同開源一般。那么通過對class文件進行字節碼級別的混淆加密,就能夠在一定程度防止技術被模仿或復用, 從而對java軟件起到很好的保護作用。

實現方式

  1. 對class文件進行加密,但是需要特定的Classloader在加載class時對其解密
  2. 針對class文件反編譯原理,通過花指令防止文件被反編譯
  3. 基于代碼混淆技術,對代碼中的包、類、方法等名稱進行混淆,從而提高代碼閱讀成本

示例

今天主要介紹通過第3種方法實現代碼混淆,這里主要使用了proguard工具對應的maven插件 proguard-maven-plugin :

Proguard是一個Java類文件壓縮器、優化器、混淆器、預校驗器。壓縮環節會檢測以及移除沒有用到的類、字段、方法以及屬性。優化環節會分析以及優化方法的字節碼。混淆環節會用無意義的短變量去重命名類、變量、方法。這些步驟讓代碼更精簡,更高效,也更難被逆向(破解)

比如我們基于Restful開發一個用戶服務接口

  1. 可能你的項目結構會是這樣的:
packages...
├ entity
|  ├ User
├ dao
|  ├ UserDao
|  ├ impl
|    ├ UserDaoImpl
├ service
|  ├ UserService
|  ├ impl
|    ├ UserServiceImpl
├ web
|  ├ UserController

通過命令mvn package打包后,結構是這樣的:

圖片

  1. 現在引入proguard:

需要在pom.xml中build標簽中加入插件,具體配置如下:

< !-- ProGuard混淆插件-- >
            < plugin >
                < groupId >com.github.wvengen< /groupId >
                < artifactId >proguard-maven-plugin< /artifactId >
                < version >2.6.0< /version >
                < executions >
                    < execution >
                        < !-- 混淆時刻,這里是打包的時候混淆-- >
                        < phase >package< /phase >
                        < goals >
                            < !-- 使用插件的什么功能-- >
                            < goal >proguard< /goal >
                        < /goals >
                    < /execution >
                < /executions >
                < configuration >
                    < !-- 是否將生成的PG文件安裝部署-- >
                    < attach >true< /attach >
                    < !-- 對什么東西進行加載,這里僅有classes成功,畢竟你也不可能對配置文件及JSP混淆吧-- >
                    < injar >${project.build.finalName}.jar< /injar >
                    < !--class 混淆后輸出的jar包-- >
                    < outjar >${project.build.finalName}-pg.jar< /outjar >
                    < !-- 是否混淆-- >
                    < obfuscate >true< /obfuscate >
                    < !-- 配置一個文件,通常叫做proguard.cfg,該文件主要是配置options選項,也就是說使用proguard.cfg那么options下的所有內容都可以移到proguard.cfg中 -- >
                    < proguardInclude >${project.basedir}/proguard.cfg< /proguardInclude >
                    < !-- 指定生成文件分類 -- >
                    < attachArtifactClassifier >pg< /attachArtifactClassifier >
                    < !-- 額外的jar包,通常是項目編譯所需要的jar -- >
                    < libs >
                        < lib >${java.home}/lib/rt.jar< /lib >
                    < /libs >
                    < !-- 對輸入jar進行過濾比如,如下配置就是對META-INFO文件不處理。 -- >
                    < inLibsFilter >!META-INF/**< /inLibsFilter >
                    < !-- 這是輸出路徑配置,但是要注意這個路徑必須要包括injar標簽填寫的jar -- >
                    < outputDirectory >${project.basedir}/target< /outputDirectory >
                    < !--這里特別重要,此處主要是配置混淆的一些細節選項,比如哪些類不需要混淆,哪些需要混淆-- >
                    < options >
                        < !-- 可以在此處寫option標簽配置,不過我上面使用了proguardInclude,故而我更喜歡在proguard.cfg中配置 -- >
                    < /options >
                < /configuration >
            < /plugin >

其中配置文件proguard.cfg如下:

#指定Java的版本
-target 1.8
#proguard會對代碼進行優化壓縮,他會刪除從未使用的類或者類成員變量等
-dontshrink
#是否關閉字節碼級別的優化,如果不開啟則設置如下配置
-dontoptimize
#混淆時不生成大小寫混合的類名,默認是可以大小寫混合
-dontusemixedcaseclassnames
# 對于類成員的命名的混淆采取唯一策略
-useuniqueclassmembernames
#混淆時不生成大小寫混合的類名,默認是可以大小寫混合
-dontusemixedcaseclassnames
#混淆類名之后,對使用Class.forName('className')之類的地方進行相應替代
-adaptclassstrings
 
#對異常、注解信息予以保留
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
# 此選項將保存接口中的所有原始名稱(不混淆)-- >
# -keepnames interface ** { *; }
# 此選項將保存所有軟件包中的所有原始接口文件(不進行混淆)
#-keep interface * extends * { *; }
#保留參數名,因為控制器,或者Mybatis等接口的參數如果混淆會導致無法接受參數,xml文件找不到參數
-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
  1. 執行打包命令mvc package,可以看到target目錄下新增了幾個文件
  • obfuscation-pg.jar 混淆處理后的輸出jar
  • proguard_map.txt 存放混淆前后類、方法的對應關系
  • proguard_seed.txt 存放保持不變的類 可見包的名稱、類名都改成了短字母

圖片

實現技術

通過proguard來實現class內容的混淆相對比較簡單,當然還有很多其他的技術方法,比如上面說到的對class進行加密這種更安全的技術手段,感興趣的你可以繼續探究。

其他技術

  • Jocky
  • retroguard
  • androidkiller
  • ClassFinal

結束語

此篇文章簡單介紹了java中的代碼混淆技術,我們可以根據具體的項目需求對編譯后的代碼進行混淆或加密處理,從而保護自己的勞動成果。開頭看到的docx4j企業級功能提供 的jar具體是怎么實現代碼保護的,目前還沒發現其具體采用了什么技術實現,后面繼續研究。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2971

    瀏覽量

    104854
  • 開源
    +關注

    關注

    3

    文章

    3368

    瀏覽量

    42567
  • 源碼
    +關注

    關注

    8

    文章

    646

    瀏覽量

    29279
  • 代碼
    +關注

    關注

    30

    文章

    4801

    瀏覽量

    68735
  • 編譯
    +關注

    關注

    0

    文章

    659

    瀏覽量

    32903
收藏 人收藏

    評論

    相關推薦

    如何通過注解來優化我們的Java代碼

    注解? Java注解是一種元數據形式,可以被添加到Java代碼的各種元素(類、方法、字段等)上,以提供關于這些元素的額外信息。注解是在Java
    的頭像 發表于 09-30 11:39 ?651次閱讀

    詳解java代碼優化方法

    Java代碼優化是Java編程開發很重要的一個步驟,Java代碼優化要注重細節優化,一個兩個的細節的優化,產生的效果不大,但是如果處處都能注
    發表于 04-02 15:43

    Java程序設計經典教程(源代碼)

    Java程序設計經典教程(源代碼): 基于swing的Java可視化軟件開發在代碼編輯區中生成如下所示程序框架代碼:package pack
    發表于 12-08 17:37 ?87次下載

    工程制圖網絡習題系統JAVA 應用

    本文主要介紹基于AUTOCAD 二次開發的工程制圖習題系統JAVA 技術的應用,主要涉及到JAVA 對非JAVA
    發表于 09-02 15:40 ?5次下載

    JAVA版聊天軟件源代碼

    JAVA版聊天軟件源代碼 一款用JAVA制作開發的小型聊天軟件,里面附有安裝程序和JAVA代碼。.rar
    發表于 03-11 14:21 ?0次下載

    貪吃蛇游戲java代碼

    貪吃蛇游戲java代碼
    發表于 12-27 17:56 ?9次下載

    統計java代碼行數和jar包.class代碼的行數

    本文檔內容介紹了統計java代碼行數和jar包.class代碼的行數,供參考
    發表于 03-19 15:27 ?0次下載

    代碼保護之道——混淆的藝術

    第三點是藏葉于林。安全是業務的天然屬性,業務是安全的最佳載體。只有結合了業務的安全才是真正的安全,孤立的安全是很容易被攻擊者攻破的。將業務代碼和安全代碼放在一起進行混淆,攻擊者要破解的話,不但要摸清安全邏輯,還要了解清楚整個業務
    的頭像 發表于 12-13 11:11 ?4794次閱讀
    <b class='flag-5'>代碼</b>保護之道——<b class='flag-5'>混淆</b>的藝術

    Java異常的習題和代碼分析

    Java異常的習題和代碼分析
    發表于 07-08 14:54 ?5次下載
    <b class='flag-5'>Java</b>異常的習題和<b class='flag-5'>代碼</b>分析

    Java的iterator和foreach遍歷集合源代碼

    Java的iterator和foreach遍歷集合源代碼
    發表于 03-17 09:16 ?9次下載
    <b class='flag-5'>Java</b>的iterator和foreach遍歷集合源<b class='flag-5'>代碼</b>

    如何在java代碼中使用HTTP代理IP

    如何在java代碼中使用HTTP代理IP。
    的頭像 發表于 08-04 15:38 ?2238次閱讀

    Java反編譯反混淆編程實例分析

    支持對已混淆的ja (1).控制臺輸出(沒有反混淆)r包進行反混淆
    發表于 06-01 14:48 ?1525次閱讀
    <b class='flag-5'>Java</b>反編譯反<b class='flag-5'>混淆</b>編程實例分析

    APP混淆實戰(Java/so代碼混淆)

    Android App Bundle混淆加密加殼加固保護的解決方案(過Google App上架審核)最全Android及資源混淆方法匯總(無需加固節約成本并將APP上架Google Play成功的最佳方案)
    的頭像 發表于 06-29 15:42 ?919次閱讀
    APP<b class='flag-5'>混淆</b>實戰(<b class='flag-5'>Java</b>/so<b class='flag-5'>代碼</b><b class='flag-5'>混淆</b>)

    用了Stream后,代碼反而越寫越丑?

    Java,同樣的功能,代碼行數寫的少了,并不見得你的代碼就好。由于Java使用;作為代碼行的
    的頭像 發表于 08-23 15:08 ?479次閱讀

    java反編譯的代碼可以修改么

    Java反編譯是一種將編譯后的Java字節碼(.class文件)轉換回源代碼的過程。反編譯后的代碼可以進行修改,但是需要注意,反編譯代碼的質
    的頭像 發表于 09-02 11:00 ?734次閱讀
    主站蜘蛛池模板: 久久视频在线视频| free性欧美xxx狂欢| 久久精品国产亚洲精品2020| 北条麻妃夫の友人196| 亚洲视频91| 日本福利片午夜免费观着| 九色PORNY丨视频入口| 高清一区二区亚洲欧美日韩| 2019夜夜| 亚洲一区在线视频观看| 我的好妈妈BD免费观看| 强奷乱码欧妇女中文字幕熟女| 九九99热久久精品在线6| 国产精品伊人| 儿媳妇完整版视频播放免费观看| 18亚洲男同gay1069| 一扒二脱三插片在线观看| 午夜伦理电影在线观免费| 热九九99香蕉精品品 | 嗯好大好猛皇上好深用力| 好吊日视频在线| 国产精品一区二区免费| 大学生一级毛片免费看| av老司机色爱区综合| 96精品视频| 2019伊人查蕉在线观看| 在线 国产 欧美 专区| 亚洲色偷偷偷网站色偷一区人人藻 | 亚洲三级视频| 亚洲精品高清视频| 香蕉免费高清完整| 脱jk裙的美女露小内内无遮挡| 日本中文字幕伊人成中文字幕| 尿了么app| 欧美日韩中文字幕综合图区| 内射后入在线观看一区| 免费夜色污私人影院网站| 美国色吧影院| 免费被靠视频动漫| 暖暖 视频 在线 观看 高清| 浓毛BWBWBWBWBW日本|