ZKM混淆工具
原创文章,尊重劳动,转载请标明出处
ZKM 介绍
zkm 是一款付费的代码混淆工具。
一般使用步骤
直接使用 ZKM 脚本
直接下载 zkm.jar ,根据 ZKM 混淆语法规则编写混淆脚本(这里假设脚本名为 zkm.script.txt ),直接输入命令:
#zkm.script.txt 脚本名 |
zkm 脚本的语法规则详见参考的链接
- 使用 GUI 工具混淆,同时生成 ZKM 脚本
运行命令
java -jar zkm.jar
运行结束后,可以看到 GUI 程序启动了

- 运行 Build Helper
或者 
- 设置 ClassPath
classPath是配置要混淆的 jar 包所依赖的 jar。
默认情况下 java 依赖已经添加了
我这里直接将 jar 依赖的包同一放到了一个 lib 目录下, 然后点击 add 按钮, 在下面的这个对话框里面将 lib 下的 jar 包全部选中,点击 ok 全部选中
设置成功后就可以下一步了
- 设置 open,也就是选择要被混淆的 jar

设置完后就会进入这个界面了,如果前面的classPath 没有配好这里会提示出错, 我这设置的没问题,所以只是提示了 warning
- 一路操作下来,就到了设置 Trim Exclusions 了, Trim Exclusions 的作用是设置不配 zkm trim的 class 或者 field ( trim 操作比如删除源文件属性, 行号属性等), 我后面会跳过 Trim 设置, 所以这一步也跳过 (设置的操作也很简单,可以参考第7步)

- 设置 Trim Options,ZKM 会对除了第 5 步配置的 Trim Exclusions ,其他的打开的类会根据这里的配置做一些修剪操作,我这里就直接跳过了

- 配置 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类名,以及所在的包名。 - 设置 Obfuscate Options, 主要是配置一些信息
- 设置 Save Classes 点击 Next - 点击 ok, 这里是配置混淆后的 jar 保存路径,

一路确定, 到这混淆就正式开始了, 混淆后的 jar 包 可以在这里配置的路径下找到
- 查看和保存 ZMK Script, 这样以后就可以直接用这个脚本来混淆了


参考
ZKM混淆工具的更多相关文章
- [转载]Dotfuscator Professional Edition 4.9.7500.9484 混淆工具破解版+使用教程
如有转载,请注明出处: http://www.cnblogs.com/flydoos/archive/2012/01/26/2329536.html Dotfuscator Professional ...
- Java代码混淆工具ProGuard
目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...
- .Net混淆工具和反混淆工具
一.简介 本文给大家列举一些常用的.net程序反破解代码混淆工具.同时也列取一些反混淆工具. 二.混淆工具 Agile.NET (aka CliSecure) Babel.NET CodeFort C ...
- 技术分享:几种常见的JavaScript混淆和反混淆工具分析实战【转】
信息安全常被描述成一场军备竞赛,白帽与黑帽,渗透测试者与黑客,善与恶,本文将聚焦这场永无止境决斗中的一个小点. HTML5 & JS 应用中充满着对输入进行验证/注入的问题,需要开发人员始终保 ...
- 几种常见的JavaScript混淆和反混淆工具分析实战
几种常见的JavaScript混淆和反混淆工具分析实战 xiaix2016-03-05+8共1195751人围观 ,发现 5 个不明物体WEB安全 信息安全常被描述成一场军备竞赛,白帽与黑帽,渗透测试 ...
- java混淆工具Jocky和Proguard
java混淆工具有很多种,这里介绍Jocky和Proguard 一:Jocky是金蝶中间件技术领袖袁红岗先生的个人作品(旧有名称JOC).原本是方便Apusic 应用服务器的开发,现在开放出来,供大家 ...
- .NET代码混淆工具NET Reactor - 初学者系列-学习者系列文章
这几天无事,除了看书,然后就倒腾原来的代码.想起.NET的代码混淆工具软件,所以今天就讲讲这个.NET代码混淆工具. .NET代码混淆工具软件,以前有了解和找过,但是当时需求不大,所以找了下就搁置了. ...
- java混淆工具 字符串加密 程序加密 代码逻辑混淆 防止反编译
混淆工具使用文档 ht-confusion-project1.0.0 目 录 1.功能介绍... 1 2.安装说明... 3 2.1Window查询jdk版本(点击开始菜单,输入cmd, 输入java ...
- JS,html压缩及混淆工具
现在已经出现了不少有自己特色的: JSMin Javascript compressor Packer Closure Compiler YUI Compressor Pretty Diff Java ...
随机推荐
- Gridview实现删除弹出提示信息
实现方法: 双击GridView的OnRowDataBound事件: 在后台的GridView1_RowDataBound()方法添加代码,最后代码如下所示: protected void ...
- Redis性能点
AliRedis是来自阿里巴巴的基于Redis改造的缓存产品,目前还未开源.网上只能搜到这么一篇资料<AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群&g ...
- viewgroup用addview添加的view不显示问题
先看代码: public class MyviewGroup extends ViewGroup { private final Context context; private View view; ...
- 微信支付之JSAPI开发第一篇-基本概念
申请权限 具体步骤就不说了,进入微信支付商户平台进行申请认证,认证成功后在微信公众号后台会有个微信支付的菜单按钮,点击后会有如下的信息 配置 在进行微信支付开发之前,必须进行一些必要的配置,如果这些配 ...
- AIX 环境下动态路由
IBM AIX v5.3操作系统环境下动态路由配置如下: 1,用命令lssrc -S routed和lssrc -S gated分别检查routed和gated子系统是是活动状态.如果这两个子系统为活 ...
- 【java基础学习二】 数组相互转换,转成用逗号隔开的字符串等
/** * int[],Integer[],List,List<Integer>,HashSet<Integer>相互转换,转成用逗号隔开的字符串 */ public stat ...
- Res_Orders_01需求分析
一.背景及好处 为了提高餐厅的运营效率,增强餐厅各部门间的配合,减少顾客到店后的点餐.等餐及结算过程消耗的时间,降低服务员点餐失误率,进一步提高餐厅管理人员对菜品.资金的管理以及更好的掌握餐厅的全局运 ...
- Java线程问题分析定位
Java线程问题分析定位 分析步骤: 1.使用top命令查看系统资源占用情况,发现Java进程占用大量CPU资源,PID为11572: 2.显示进程详细列表命令:ps -mp 11572 -o THR ...
- 改变Eclipse 中代码字体大小
1.改变eclipse 中代码字体大小,就是我打进去的java文件的字体大小 wiondow--preferences--general--appearance--colors and fonts-- ...
- Texture Filter中的Bilinear、Trilinear以及Anistropic Filtering
1. 为什么在纹理采样时需要texture filter(纹理过滤)?我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应texture ...