[Gradle中文教程系列]-跟我學Gradle-使用proguard混淆你的spring boot應用

使用proguard混淆你的spring boot應用

Proguard介紹

本文示例源碼

安卓開發(fā)的同學想必對Proguard都是十分熟悉的,由于java的反編譯實在是太容易翔脱,使用它可以對java源碼進行混淆處理柳沙,這樣即使反編譯之后也極大的降低了源碼的可讀性邑茄。當然除了混淆关顷,proguard還有其余一些功能。

  • shrink: 檢測并移除沒有用到的類耘擂,變量摇庙,方法和屬性旱物;

  • optimize: 優(yōu)化代碼,非入口節(jié)點類會加上private/static/final, 沒有用到的參數會被刪除卫袒,一些方法可能-會變成內聯(lián)代碼宵呛。

  • obfuscate: 使用短又沒有語義的名字重命名非入口類的類名,變量名夕凝,方法名宝穗。入口類的名字保持不變。

  • preverify: 預校驗代碼是否符合Java1.6或者更高的規(guī)范(唯一一個與入口類不相關的步驟)

proguard.png

環(huán)境準備

  • proguard plugin: 6.0.3

  • spring boot: 2.0.3

  • gradle 4.9

  • windows 10

引言

普通proguard的使用方式非常簡單迹冤,只要下載proguard.jar直接運行java -jar proguard.jar @progurad.pro即可讽营。@后面指定的是規(guī)則文件。本篇著重講解如何通過gradle task的方式來進行混淆打包泡徙。

這里以spring boot為例,當然這并非僅限于spring boot應用膜蠢,只要明白了原理堪藐,所有java應用都可以如法炮制。最重要的是如何編制規(guī)則文件挑围,需要特別注意的是用到反射的類不要進行混淆礁竞。

有人說后端java應用部署在服務器端,對代碼進行混淆并沒有太大意義杉辙,關于此點不在本文討論范圍之內模捂,本文僅提供純技術層面的探討,喜者自取蜘矢,惡者輕噴狂男。

步驟

引入方式有兩種,第一種是自行下載后采用本地引用,第二種只直接去中央倉庫加載依賴品腹。 這里采用法二的方式

法一:

buildscript {
    repositories {
        flatDir dirs: '/usr/local/java/proguard/lib'
    }
    dependencies {
        classpath ':proguard:'
    }
}

法二:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'net.sf.proguard:proguard-gradle:6.0.3'
    }
}

具體做法比較簡單岖食,這里直接貼出完整構建文件如下

spring boot pluginbootjar任務默認會打包所有runtime 期間的依賴以及$builddir\classes下的class文件,這里為了讓spring boot從混淆后的class中打包舞吭,所以自定義了bootPro任務泡垃,該任務為bootJar類型任務(這里可以理解為繼承)同時依賴于proguard任務析珊,對bootInf方法進行了重寫。如此可以在代碼混淆后將混淆后的class文件打包到jar包中蔑穴。

需要說明的是Proguard任務內部可以直接編寫混淆規(guī)則忠寻,也可以引用外部規(guī)則文件,這里采用的是引用外部文件的方法存和。 具體規(guī)則可以參考文章尾部的proguard鏈接奕剃。

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'net.sf.proguard:proguard-gradle:6.0.3'
    }
}
plugins {
    id 'org.springframework.boot' version '2.0.3.RELEASE'
}

import proguard.gradle.ProGuardTask
import org.springframework.boot.gradle.tasks.bundling.BootJar

apply plugin: 'io.spring.dependency-management'

dependencies {
    compile "org.springframework.boot:spring-boot-starter-web:${bootVersion}",
            "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcat_embed}"
    compileOnly "org.projectlombok:lombok:1.16.10"

    compile    project(":webpage")
}

// 不混淆打普通jar
bootJar {
  mainClassName = 'org.pkaq.Booter'
}
// 混淆任務
task proguard(type: ProGuardTask, dependsOn: compileJava) {
    // 輸出混淆前->混淆后的映射
    printmapping "$buildDir/mapping.txt"
    // 混淆規(guī)則文件
    configuration 'proguard-rules.pro'

    // 混淆時依賴的庫
    libraryjars files(configurations.compile.findAll {}.collect())
    libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
    libraryjars "${System.getProperty('java.home')}/lib/jce.jar"

    // 混淆輸入
    injars sourceSets.main.output
    // 混淆輸出
    outjars "$buildDir/classes-pro"
}

// 混淆打包
task bootPro(type: BootJar){
  dependsOn 'proguard'
  // 重新組織boot-inf下的文件
  bootInf {
    into('classes') {
        from "$buildDir/classes-pro"
    }

    into('lib') {
        from configurations.runtime
    }

  }
  // 包名
  baseName = "web"
  // 入口
  mainClassName = 'org.pkaq.Booter'

  doLast {
      new File("$buildDir/classes-pro").deleteDir()
  }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哑姚,隨后出現(xiàn)的幾起案子祭饭,更是在濱河造成了極大的恐慌,老刑警劉巖叙量,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倡蝙,死亡現(xiàn)場離奇詭異,居然都是意外死亡绞佩,警方通過查閱死者的電腦和手機寺鸥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來品山,“玉大人胆建,你說我怎么就攤上這事≈饨唬” “怎么了笆载?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涯呻。 經常有香客問我凉驻,道長,這世上最難降的妖魔是什么复罐? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任涝登,我火速辦了婚禮,結果婚禮上效诅,老公的妹妹穿的比我還像新娘胀滚。我一直安慰自己,他們只是感情好乱投,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布咽笼。 她就那樣靜靜地躺著,像睡著了一般篡腌。 火紅的嫁衣襯著肌膚如雪褐荷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天嘹悼,我揣著相機與錄音叛甫,去河邊找鬼层宫。 笑死,一個胖子當著我的面吹牛其监,可吹牛的內容都是我干的萌腿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抖苦,長吁一口氣:“原來是場噩夢啊……” “哼毁菱!你這毒婦竟也來了?” 一聲冷哼從身側響起锌历,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贮庞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后究西,有當地人在樹林里發(fā)現(xiàn)了一具尸體窗慎,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年卤材,在試婚紗的時候發(fā)現(xiàn)自己被綠了遮斥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡扇丛,死狀恐怖术吗,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情帆精,我是刑警寧澤较屿,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站卓练,受9級特大地震影響吝镣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜昆庇,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闸溃。 院中可真熱鬧整吆,春花似錦、人聲如沸辉川。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乓旗。三九已至府蛇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屿愚,已是汗流浹背汇跨。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工务荆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人穷遂。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓函匕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚪黑。 傳聞我的和親對象是個殘疾皇子盅惜,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355