ZKM混淆工具

原創文章,尊重勞動,轉載請標明出處html

 

 

ZKM 介紹

 zkm 是一款付費的代碼混淆工具。java

通常使用步驟

  • 直接使用 ZKM 腳本

直接下載 zkm.jar ,根據 ZKM 混淆語法規則編寫混淆腳本(這裏假設腳本名爲 zkm.script.txt ),直接輸入命令:android

#zkm.script.txt 腳本名
java -jar zkm.jar zkm.script.txt

 

zkm 腳本的語法規則詳見參考的連接api

  • 使用 GUI 工具混淆,同時生成 ZKM 腳本
  1. 運行命令bash

    java -jar zkm.jar


    運行結束後,能夠看到 GUI 程序啓動了
    工具

  2. 運行 Build Helper
     或者 
  3. 設置 ClassPath
    classPath是配置要混淆的 jar 包所依賴的 jar。
    默認狀況下 java 依賴已經添加了

    我這裏直接將 jar 依賴的包同一放到了一個 lib 目錄下, 而後點擊 add 按鈕, 在下面的這個對話框裏面將 lib 下的 jar 包所有選中,點擊 ok 所有選中

    設置成功後就能夠下一步了
  4. 設置 open,也就是選擇要被混淆的 jar

    設置完後就會進入這個界面了,若是前面的classPath 沒有配好這裏會提示出錯, 我這設置的沒問題,因此只是提示了 warning
  5. 一路操做下來,就到了設置 Trim Exclusions 了, Trim Exclusions 的做用是設置不配 zkm trim的 class 或者 field ( trim 操做好比刪除源文件屬性, 行號屬性等), 我後面會跳過 Trim 設置, 因此這一步也跳過 (設置的操做也很簡單,能夠參考第7步)
  6. 設置 Trim Options,ZKM 會對除了第 5 步配置的 Trim Exclusions ,其餘的打開的類會根據這裏的配置作一些修剪操做,我這裏就直接跳過了
  7. 配置 Obfuscate Name Exclusions, 這裏主要是設置不被混淆的包名, 類, field, method 等 


    介紹:

    Application type:
    這裏是默認提供的一些模版, 好比這裏選擇其中的一個

    能夠看到選擇了 Extensible framework 以後, 自動幫咱們添加了一些配置

    Exclude package qualifiers:
    配置不會被混淆的包名

    能夠看到咱們選擇了 com.bluware.agent.android 這個包名後, 配置裏面就出現了 com.blueware.agent.android. 根據 zkm 腳本規則, 這條配置就是指 com.blueware.agent.android這個包名不會被混淆

    don't change main class name:
     若是 jar 清單配置文件裏面配置了 main 類的信息, 這裏就能夠選擇不被混淆的 Main類了

    Add

    能夠看出, 點擊了 Add 按鈕後, 彈出的對話框裏面有 包名, 類, field, 方法等選項, 說明這裏能夠配置不會混淆的類、包名、 field、方法等,注意包名不被混淆除了在 Exclude package qualifiers 裏面配置外, 也能夠在這裏配置

    我這裏以配置方法爲例說明, 選中 method ,點擊 ok
    如今我要配置 OneApmAgent.class這個類 裏面的全部 public 修飾的方法都不被混淆, 同時OneApmAgent.class這個類所在的包名以及 OneApmAgent.class 這個類名也不被混淆

    1.配置 Method, public *(*) 也就是隻要是public 類修飾的方法都不被混淆

    這裏的 * 是通配符, 通過這麼設置後, jar 包裏面的 public 方法都不會被混淆, 可是其所所在的類的類名, 以及包名都會被混淆

    2.限定方法所在的類,設置 Containing class

    通過這一部設置後,也就是隻有名爲 OneApmAgent 的類中的 public 方法纔不會被混淆, OneApmAgent 類名和所在的包名仍是會被混淆, 若是要向類名不會被混淆的話, 須要勾選 Exclude class name as well

    這樣類名也不會被混淆了,可是所在的包名仍是會被混淆

    3 配置 Containing package
     這一步主要是配置類所在的包,能夠指定具體的包名,或者使用通配符匹配的包名, 我這裏任意包名均可以,因此使用通配符 *.
     
    注意這裏若是不勾選 Exclude package name as well 的話, 那麼OneApmAgent.class所在的包名不會被混淆, Name 是限制 OneApmAgent.class 所在的包名, 只有包名配置 Name 的 OneApmAgent.class纔會被混淆

    設置完後能夠看到添加了一條配置信息
     
    根據 ZKM 混淆規則 的確是 任意包名下的 名爲 OneApmAgent 的類的全部 public 方法均不混淆, 同時不混淆 OneApmAgent類名,以及所在的包名。
  8. 設置 Obfuscate Options, 主要是配置一些信息
     
     
  9. 設置 Save Classes 點擊 Next - 點擊 ok, 這裏是配置混淆後的 jar 保存路徑, 

    一路肯定, 到這混淆就正式開始了, 混淆後的 jar 包 能夠在這裏配置的路徑下找到
     
  10. 查看和保存 ZMK Script, 這樣之後就能夠直接用這個腳原本混淆了

 

參考

相關文章
相關標籤/搜索