当前位置: 首页 > 知识库问答 >
问题:

混淆

匡安宜
2023-03-14

我一直在摆弄Proguard配置,我想测试只是为了优化

# Include java runtime classes
-libraryjars  <java.home>/lib/rt.jar


-dontshrink
-dontusemixedcaseclassnames
-dontpreverify
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-dontwarn
-keep class **
-keep interface **
-keep enum **

但我仍然会遇到这样的错误:

java.lang.IllegalArgumentExc0019:找不到[org/apache/log/log4j/core/jackson/Log4jXmlMoules](有1个已知的超级类)和[org/apache/log/log4j/core/jackson/Log4jJsonMoules](有4个已知的超级类)的公共超级类

我做错了什么?

共有1个答案

马奇略
2023-03-14

log4j库依赖于一些运行时依赖项,请参见此处的页面:

https://logging.apache.org/log4j/2.x/runtime-dependencies.html

所讨论的类(Log4jXmlModule和Log4jJsonModule)是从某个jackson类扩展而来的,该类只是一个可选的依赖项,因此可能不包括在您的项目中。

如果您启用-dont收缩,ProGuard无法删除这些类,在优化过程中,您会遇到这样的错误,因为ProGuard不了解层次结构。一般来说,不建议执行优化,但禁用收缩,因为一些优化技术依赖于收缩事后清理的事实。

在您的情况下,您可以将丢失的运行时依赖项作为-库创建器输入添加到ProGuard以避免此错误。

 类似资料:
  • Powershell的混淆目前已经使用的越来越多,国内外也有了较多的研究,在今年的BH大会上也有对应的议题,关注点是反混淆,那么里面的一些姿势很值得我们学习,我们提供一些混淆实例,来让大家对于PS的混淆做到一个初步了解,也为防御混淆提供一些思路。 实例 在混淆之前,先看看powershell编码执行的方式。 -EC,-EncodedCommand,-EncodedComman,-EncodedCo

  • 除了传统的面向对象继承方式,还流行一种通过可重用组件创建类的方式,就是联合另一个简单类的代码。 你可能在Scala等语言里对mixins及其特性已经很熟悉了,但它在JavaScript中也是很流行的。 下面的代码演示了如何在TypeScript里使用混入。 后面我们还会解释这段代码是怎么工作的。 // Disposable Mixin class Disposable { isDispos

  • OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但它最终的颜色还包含了玻璃之后所有物体的颜色。这也是混合这一名字的出处,我们混合(Blend)(不同物体的)多

  • 除了传统的面向对象继承方式,还流行一种通过可重用组件创建类的方式,就是联合另一个简单类的代码。 你可能在Scala等语言里对mixins及其特性已经很熟悉了,但它在JavaScript中也是很流行的。 混入示例 下面的代码演示了如何在TypeScript里使用混入。 后面我们还会解释这段代码是怎么工作的。 // Disposable Mixin class Disposable { isD

  • 问题内容: 我正在寻找一个好的Java混淆器。 我已经对以下Java混淆器进行了初步研究:proguard,yguard,retroguard,dasho,alatorari,jshrink,smokescreen,jobfuscate,marvin,jbco,jode,javaguard,jarg,joga,cafebabe,donquixote,mwobfu,bbmug,zelix klass

  • 我对混淆有问题。为了获得更好的想象力: JAVA代码 本机代码 在我想发布一个混淆版本之前,一切都很好。这个类中的Java类(例如)和方法的名称被proGuard重命名为“a”和“a()”(这可能并不总是相同的),但在本机代码中,方法和类的原始名称保持不变,因为它被硬编码为字符串,如下所示: ...有没有办法动态设置方法名?