首页 > 其他分享 >使用Proguard插件对代码混淆

使用Proguard插件对代码混淆

时间:2024-04-11 10:33:43浏览次数:27  
标签:混淆 插件 代码 jar Proguard proguard

背景:最近项目中需要将jar包提供给第三方去用,担心代码被反编译偷取源码,所以需要对现在代码进行混淆。

原理:使用Proguard对代码进行混淆。

  其实Proguard混淆代码的原理很简单,java代码在编译后会生成许多.class文件,这些.class文件可以被反编译(常用gui反编译等),编译后原本的代码就能看到。Proguard就是在打包时,吧class文件中方法,字段,包,类等等这些java元素的名称变得无意义,比如一个类为  com.highgo.mysql.mysqltest.MysqlTestinfo001,它就会吧这个混淆为 com.highgo.a.d.c这样的形势。这样代码的结构其实没有变化,且可以运行,但是想弄懂就很难。

  下面这些情况下不能改变元素名称的否则就会报错:

  一, 我们用到反射的地方。
  二, 我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。
  三, 是我们的java 元素名称是在配置文件中配置好的。
  所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。

使用:

ProGuard有包括一下四种功能:

l  压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。

l  优化(Optimize):对字节码进行优化,移除无用的指令。

l  混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。

l  预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。

ProGuar由shrink、optimize、obfuscate和preveirfy四个步骤组成,每个步骤都是可选的,我们可以通过配置脚本来决定执行其中的哪几个步骤。

我主要使用的是maven中使用插件,搭配proguard.conf文件来使用

Maven项目集成模式的使用方式,通过引入proguard.cfg配置文件到项目中,直接在pom文件中配置proguard插件,可以更加快速便捷的实现我们的需求。

<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>com.guardsquare</groupId>
<artifactId>proguard-base</artifactId>
<version>7.4.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.guardsquare</groupId>
<artifactId>proguard-core</artifactId>
<version>9.1.1</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
</dependencies>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<obfuscate>true</obfuscate>
<proguardInclude>../proguard.conf</proguardInclude>
<addMavenDescriptor>false</addMavenDescriptor>
<injar>${project.build.finalName}-jar-with-dependencies.jar</injar>
<outjar>${project.build.finalName}-jar-with-dependencies-test.jar</outjar>
<outputDirectory>${project.build.directory}</outputDirectory>
<libs>
<lib>C:\Program Files\Java\jdk-1.8\jre\lib\rt.jar</lib>
</libs>
</configuration>
</plugin>

 

注意需要在引入的插件中,指定proguard.cfg配置文件所在位置

 

接下来就是配置proguard.cfg文件来实现混淆。

   

标签:混淆,插件,代码,jar,Proguard,proguard
From: https://www.cnblogs.com/zhangyuwuhu/p/18128269

相关文章

  • Kibana-4.6.6 marvel插件license过期重新注册
    1、注册新的license,https://register.elastic.co/marvel_register,注册完毕邮箱收取下载地址,将新的license下载到本地2、到license所在目录执行curl命令:curl-XPUT'http://<host>:<port>/_license'[email protected]将host和port替换为Elasticsearch的IP和端口执行curl命令报......
  • SQL事前巡检插件
    背景:事故频发•每年都会看到SQL问题引发的线上问题不易发觉•对于SQL性能问题测试在预发环境不易发现•saas系统隔离字段在SQL条件中遗漏,造成越权风险•业务初期SQL没问题,业务增长容易出现事故•DBS慢SQL不支持实时报警,无法及时发现•靠大家review代码总会出现遗漏事......
  • 2024年主流的java混淆方案有哪些
    到2024年,主流的Java混淆方案可能会继续发展和更新,但目前常用的一些Java混淆方案包括:ProGuard:ProGuard是一个免费的Java字节码混淆器,能够对Java类进行压缩、优化和混淆,以增强应用程序的安全性和性能。DashO:DashO是一种商业级别的Java和Android混淆工具,提......
  • 扩展ueditor中公式插件kityformula的字符集
    https://blog.csdn.net/hshuaile/article/details/86079147 例如,我想在公式中使用"▱"符号,但是现有公式插件不支持输入,所以需要扩展,扩展步骤如下在网上找到"▱"符号,并起一个名字,例如叫parallelogram打开kity-formula-render.all.js文件,找到如下代码/*!*字体主文件*/_p[29]......
  • 用于平板电脑的建筑效果图渲染工具!最后必备云渲染插件
    当前市场上存在众多适用于平板电脑的软件,它们能够让用户轻松体验建筑效果图的渲染过程。对于刚开始学习建筑渲染的用户而言,选择一款界面直观、功能基础且能够迅速完成渲染任务的软件显得尤为关键。下面,我们将探讨一些适合初学者使用的平板电脑上的建筑渲染软件。适于平板电脑的......
  • 【Vue I18n 国际化插件】vue3+vue-i18n 项目实战总结
    一、为什么要国际化?前端国际化:应用要服务于不同的地区的用户,所以应用不能单一语言;应用要能让不同地区的人无障碍使用就需要实现国际化。目前在各大商城项目中,对于国际化语言的需求越来越高了,其中最多的就是vue项目使用i18n插件实现多语言切换功能。前端国际化:应用要......
  • AnimateDiff 目前生成视频最流畅的SD插件
    前言测试了下最近比较火的AnimateDiff,感觉确实蛮棒的,画面流畅没有闪帧的问题,真的感觉视频生成又近了一步,下面小刚分享下基本的使用方法。效果预览(电脑配置不行仅作参考):一、安装插件(以秋叶大佬的整合包为例):AnimateDiff项目:https://github.com/guoyww/AnimateDiffWebU......
  • 有效提升Halcon二次开发调试效率的插件 HalconAssit
    HalconAssit开发背景:大家好,我是HalconAssit得作者。首先得解释下开发这款工具的得原因。作为视觉工程师,可以说Halcon大家应该或多或少都接触过。功能非常强大,算子非常全,开发的自由度也非常高,但是唯一的得缺点应该是GUI支持这块稍显欠缺。在我也c#做halcon二次开发的时候,发现......
  • 日志脱敏更加优雅性能更好,远超正则。支持 logback+log4j2 插件
    项目介绍日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。sensitive项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。支持logback和log4j2等常见的日志脱敏插件。日志插件解决正则匹配长文本可能出现的回溯......
  • Unity3D代码混淆方案详解
    背景Unity引擎使用Mono运行时,而C#语言易受反编译影响,存在代码泄露风险。本文通过《QQ乐团》项目实践,提出一种适用于Unity引擎的代码混淆方案,以保护代码逻辑。引言在Unity引擎下,为了防止代码被轻易反编译,需要采取相应的保护措施。本文将分享一种基于实践经验的可行方案,希......