ProGuard详解 - Java代码混淆

这篇具有很好参考价值的文章主要介绍了ProGuard详解 - Java代码混淆。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、java代码混淆使用场景 - proguard

1.1 混淆使用场景

   我们在工程应用中经常会遇到核心代码不希望给别人抄袭,但系统是用java开发的,无法避免被反编译的情况,这样可以用代码混淆的方式来解决。
   调查了一下主流的第三方混淆工具,发现只有ProGuard用的最多,而且版本一直在更新维护,功能也比较多,所以打算用这个来混淆。

1.2 proguard简介

   ProGuard是Java类文件收缩器,优化器,混淆器和预验证器。这些可以使代码库更小,更有效,并且更好地抵御逆向工程。
   proguard包括四个功能:
(1) shrinker - Java类文件收缩器:
   检测并移除没有用到的类,变量,方法和属性。
(2) optimizer - Java类文件优化器:
   分析并优化了方法的字节码,非入口节点类会加上private/static/final, 没有用到的参数会被删除,一些方法可能会变成内联代码。
(3) obfuscator : 混淆器
   使用短又没有语义的名字重命名非入口类的类名,变量名,方法名。入口类的名字保持不变。
(4) preverifier : 预验证器
   预校验代码是否符合Java1.6或者更高的规范(唯一一个与入口类不相关的步骤)。
注:如果你的代码中用到了反射,那需要把反射调用的类,变量,方法也设置成入口节点。只需要加上-keep就可以了。(下面会讲)

除了proguard之外,还有一个DexGuard,是专门用来优化混淆Android应用的。它的功能包括资源混淆,字符串加密,类加密和dex文件分割等。它是在android编译的时候直接产生Dalvik字节码。

1.3 proguard下载

   proguard官网: https://www.guardsquare.com/proguard.

二、proguard使用示例

注:我这边使用的是proguard6.1.1版本

下载了proguard6.1.1这个版本,解压缩后执行proguard6.1.1\bin\proguardgui.bat这个文件就可以打开软件

2.1 运行

 下图中标红框的地方是需要特别设置的,其他地方都可以默认
1、点击next,进入下一步
ProGuard详解 - Java代码混淆

2.2 设置Input/Output

ProGuard详解 - Java代码混淆
1、“Add input”:选择要混淆的jar文件
2、“Add output”:设置混淆后的文件保存的路径和名字

(1) 如果混淆后工程名称不需要改变的话,指定一个目录位置,混淆的工程会自动放入指定的目录:
ProGuard详解 - Java代码混淆
(2)如果需要改变混淆后工程名称的话,这里需要创建一个空的jar文件,指定混淆后导出保存的.
如何创建一个空的jar文件?
  window+R
  -> cmd 进入命令行界面
  -> e:(进入需操作的磁盘)
   -> cd 待创建文件的目录
   -> 输入命令: jar cf 文件名.jar input-file(s-这里需要空文件,所以设置为空)
ProGuard详解 - Java代码混淆
执行后,会出现如下文件:
ProGuard详解 - Java代码混淆
注:可能还有其他设置方法

3、下面那个“Add”:把你这个工程所有用到的依赖j包全部加进来,包括依赖的所有依赖引用和java的依赖

1、如何知道你的工程用到哪些依赖?
(1) java工程或Gwt工程:
右键 工程 -> properties -> Java Build Path 可查看依赖工程和引用jar包
ProGuard详解 - Java代码混淆
(2)maven工程:
在pom.xml文件里加上这一段配置,可以把所有用到的依赖导出到指定目录里。Maven install后,会在target\lib目录下导出所有的依赖,把这些jar包加入到“Add”中:
ProGuard详解 - Java代码混淆

2、 注意 : java的依赖需要你到Java\jdk1.8.0\jre\lib目录里Add进来
如何找到java的jdk目录?
–> 命令行输入:java -verbose
ProGuard详解 - Java代码混淆

4、点击next,进入下一步

2.3 shrining - 收缩参数设置

1、设置keep
2、点击next,进入下一步

这里主要Keep选项,根据自己情况选择,例如是应用程序就选Application,WEB工程就选Librarys,还有Android等自己根据情况选择,然后next

ProGuard详解 - Java代码混淆

2.4 obfuscating - 配置混淆规则

1、设置输出map日志文件位置:

  map文件为空的.txt文件,程序执行时会自动存储打印原始名称到混淆名称的混淆映射日志数据到文件中。

2、根据自己的需要选择混淆参数

参数说明:
ProGuard详解 - Java代码混淆

3、点击next,进入下一步
这里我的配置如下:
ProGuard详解 - Java代码混淆

2.5 optimization - 类文件优化

   这里暂时没有特殊设置,使用它的默认设置

 如果混淆后程序运行不太正常,可以把Optimize选项关闭。反正我们最关心的是混淆和防止反编译,代码优化不优化的不是很重要。

点击next,进入下一步
ProGuard详解 - Java代码混淆

2.6 information

1、设置java版本 : Target可以选择JDK版本
2、点击next,进入下一步

注意: Ignore warnings about possibly erronous input,如果混淆的时候,因为警告导致无法继续,可以把这个选项勾上。其它的选默认就可以了,然后下一步。

ProGuard详解 - Java代码混淆

2.7 process

1、点"Save configuration…"按钮 : .pro的txt文件,将配置文件保存。
2、点击Process进行混淆,看到Processing completed successfully就说明成功了。
ProGuard详解 - Java代码混淆
ProGuard详解 - Java代码混淆
成功后的map日志示例如下:
ProGuard详解 - Java代码混淆

2.8 异常重新操作

  如果process显示没有成功或者以后需要进行混淆操作,可以将2.7节保存的.pro文件加载,然后工具会自动设置混淆参数。

   如果混淆出错了就倒回去查查每项配置是不是有问题,或者懂工具配置项含义的话可以直接修改上面保存的配置文件,然后重新Load configuration使用修改完的配置文件来进行混淆操作。

ProGuard详解 - Java代码混淆

参考链接:https://blog.csdn.net/kouwoo/article/details/106938939文章来源地址https://www.toymoban.com/news/detail-408307.html

到了这里,关于ProGuard详解 - Java代码混淆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3D代码混淆方案详解

    Unity引擎使用Mono运行时,而C#语言易受反编译影响,存在代码泄露风险。本文通过《QQ乐团》项目实践,提出一种适用于Unity引擎的代码混淆方案,以保护代码逻辑。 在Unity引擎下,为了防止代码被轻易反编译,需要采取相应的保护措施。本文将分享一种基于实践经验的可行方

    2024年01月18日
    浏览(30)
  • ProGuard 进阶系列(一): 运行源代码

    在前面的文章深入 Android 混淆实践:ProGuard 通关秘籍和深入 Android 混淆实践:多模块打包爬坑之旅中,已经讲到了如何在 Android 中使用 ProGuard,以及如何自定义实现混淆规则的生成。为了更深入地理解 ProGuard 的细节,本系列文章从我感兴趣的点出发,记录在阅读 ProGuard 源码

    2024年02月09日
    浏览(92)
  • Java字符串详解:概念、特点与常见的使用场景

    Java字符串是开发中经常使用到的一种数据类型,使用它可以处理文本、URL、文件路径等多种类型的数据。本文将对Java字符串的概念、特点以及常见使用场景进行详细解释。本文将分为以下几个部分: String的概念和特点 Java字符串常量池 字符串的不可变性 使用equals()方法比较

    2024年02月03日
    浏览(31)
  • 从零开发基于ASM字节码的Java代码混淆插件XHood

    因在公司负责基础框架的开发设计,所以针对框架源代码的保护工作比较重视,之前也加入了一系列保护措施 例如自定义classloader加密保护,授权license保护等,但都是防君子不防小人,安全等级还比较低 经过调研各类加密混淆措施后,决定自研混淆插件,自主可控,能够贴

    2024年02月06日
    浏览(24)
  • 【机器学习笔记15】多分类混淆矩阵、F1-score指标详解与代码实现(含数据)

    参考文章 4.4.2分类模型评判指标(一) - 混淆矩阵(Confusion Matrix)_进击的橘子猫的博客-CSDN博客_混淆矩阵 之前在逻辑回归的文章中简单提到过F1-score,但并没有详细对其进行说明和代码实现。这里补一下。 混淆矩阵 (又称 误差矩阵 )是评判模型结果的指标,属于模型评估的

    2023年04月17日
    浏览(30)
  • 如何使用代码混淆技术保护移动应用程序安全

    在移动应用开发过程中,代码保护一直是一个重要的议题。为了保护应用程序免受黑客攻击和逆向工程师的破解,开发人员使用各种方法来加强应用程序的安全性。其中,代码混淆是一种常用的技术,可以通过对代码进行混淆、压缩和重命名等操作,使得应用程序的代码难以

    2024年01月17日
    浏览(50)
  • 前端安全防线:使用Vue CLI配置代码压缩、加密和混淆功能

    在 Vue 应用程序的开发中,代码压缩、加密和混淆是优化应用程序性能和提高安全性的重要步骤。 Vue CLI 是一个功能强大的开发工具,它提供了方便的配置选项来实现这些功能。本文将介绍如何使用 Vue CLI 配置代码压缩、加密和混淆功能,以提高应用程序的性能和安全性。

    2024年02月16日
    浏览(37)
  • 代码混淆与反混淆学习-第二弹

    deflat脚本链接:GitHub - cq674350529/deflat: use angr to deobfuscation 这里以代码混淆与反混淆学习-第一弹中的OLLVM 混淆样本为例进行去除。【LLVM-4.0】 控制流平坦前 控制流平坦后 python deflat.py --file main-bcf --addr 0x401180 deflat.py 成功去除后效果: 去混淆后,效果还算可以,能分析程序流程

    2023年04月09日
    浏览(39)
  • 【设计模式】builder 创建者设计模式详解(包含电商应用场景及代码示例)

    在常见的设计模式中,“Builder” 通常是指一种设计模式,而不是具体的类或方法。Builder 模式是一种创建型设计模式,其目的是通过提供一个独立的构建器类来构建一个复杂对象。 建造者模式 (Builder Pattern) 是一种创建型设计模式,它的主要目标是为了将一个复杂对象的构

    2024年01月21日
    浏览(38)
  • uniapp一键发行代码并混淆代码

    安装完成后,javascript-obfuscator就是一个独立的可执行命令了。 小程序发行后代码会自动打包到unpackage/dist/build文件中(生产环境) unpackage/dist/dev文件是发行旁边的运行按钮打包出来的文件(开发环境) 1.在自己项目根目录下创建一个build.bat脚本文件(最好是在unpackage/dist文件

    2024年02月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包