【问题标题】:Can we obfuscate annotations in java using dex2jar tool or any other way?我们可以使用 dex2jar 工具或任何其他方式混淆 java 中的注释吗?
【发布时间】:2014-09-25 07:37:36
【问题描述】:

我正在借助 AspectJ 构建一个项目来拦截 Android 中的方法。 当我构建我创建的代码的 jar 文件时,它会创建我在方法上应用的每个切入点的编译语法,如下所示:

混淆前的代码:

 @After(value="(execution(* android.app.Activity.onCreate(..)) && (target(obj) && within(com.snapdeal.ui.activity.MainActivity)))", argNames="obj")
      public void ajc$after$demo_Common_Aspects$1$dcc8d2c5(Object obj)
      {
        .
        .
        .
      }

当我使用 dex2jar 工具混淆这个方法时,它只会从

更改方法的名称
ajc$after$demo_Common_Aspects$19$a6eef354

到我用来混淆pkt1的字符串,但注释,即方法定义上方的行没有改变,它显示了方法拦截的详细信息。

混淆后的代码:

 @After(value="(execution(* android.app.Activity.onCreate(..)) && (target(obj) && within(com.snapdeal.ui.activity.MainActivity)))", argNames="obj")
  public void pkt1(Object obj)
  {
      .
      .
      .
   }

到目前为止,我所知道的是我们可以混淆类、方法和变量的名称。 但我想混淆这一行:

@After(value="(execution(* android.app.Activity.onCreate(..)) && (target(obj) && within(com.snapdeal.ui.activity.MainActivity)))", argNames="obj")

所以我的测验是:

  1. 我们可以混淆注释吗?如果是怎么办?

  2. 我们如何混淆某些方法的局部变量?

【问题讨论】:

    标签: java android obfuscation aspectj


    【解决方案1】:

    我们可以混淆注释吗?如果是怎么办?

    理论上是的。但是,如果您这样做了,AspectJ 注释检查代码将无法识别它们。因此,这将是一个坏主意。

    我们如何混淆某些方法的局部变量?

    没有实际意义。本地变量的名称一开始就不包含在源字节码文件中。

    方法参数名称是另一回事。但是在您的示例中,注释处理器使用参数的名称。如果混淆器更改了它们而不更改引用它们的注释参数,则处理器将失败。


    理论上,您可以使用混淆器 + 修改后的 AspectJ 处理器来执行此操作。但是,没有迹象表明(例如)“proguard”或“dexguard”可以做到这一点。

    【讨论】:

      【解决方案2】:

      一旦编织完成(我想你正在编译时编织?)你实际上可以去掉注释。仅在匹配/编织阶段才需要它们,通常不会再次咨询它们(例如在运行时)。您可以编写一个简单的 Asm 访问器,去除 org.aspectj 包中的任何内容。

      【讨论】:

        【解决方案3】:

        您可以通过对方面使用原生 AspectJ 语法来解决注释混淆问题(对我来说这听起来很脆弱)。也许这样更有希望,但我没有尝试过。

        顺便说一句,对混淆过于偏执通常不值得麻烦。 Java 新手不会尝试反编译您的应用程序,而真正的 Java 向导将能够反编译它的主要部分。但这有点离题,抱歉,我无法抗拒。

        【讨论】:

          猜你喜欢
          • 2013-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-28
          • 2014-12-05
          相关资源
          最近更新 更多