我们可以使用dex2jar工具或任何其他方式混淆java中的注释吗?
我正在AspectJ的帮助下构建一个项目,以便在Android中拦截该方法。 当我构建我创建的代码的jar文件时,它会创建我在方法上应用的每个切入点的编译语法,如下所示: 混淆前的代码:我们可以使用dex2jar工具或任何其他方式混淆java中的注释吗?,java,android,obfuscation,aspectj,Java,Android,Obfuscation,Aspectj,我正在AspectJ的帮助下构建一个项目,以便在Android中拦截该方法。 当我构建我创建的代码的jar文件时,它会创建我在方法上应用的每个切入点的编译语法,如下所示: 混淆前的代码: @After(value="(execution(* android.app.Activity.onCreate(..)) && (target(obj) && within(com.snapdeal.ui.activity.MainActivity)))", argNames
@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)
{
.
.
.
}
@After(value="(execution(* android.app.Activity.onCreate(..)) && (target(obj) && within(com.snapdeal.ui.activity.MainActivity)))", argNames="obj")
public void pkt1(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 ajc$after$demo_Common_Aspects$1$dcc8d2c5(Object obj)
{
.
.
.
}
@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")
因此,我的辞职是:
理论上,您可以使用一个模糊器+修改的AspectJ处理器来实现这一点。但是,没有迹象表明(例如)“proguard”或“dexguard”可以做到这一点。一旦编织完成(我假设您正在进行编译时编织?),实际上可以去掉注释。仅在匹配/编织阶段需要它们,通常不会再次咨询它们(例如在运行时)。您可以编写一个简单的Asm访问者,去掉org.aspectj包中的任何内容。您可以通过使用本地aspectj语法来解决注释混淆的问题(对我来说这是一件非常脆弱的事情)。也许这更有希望,但我没有尝试过 顺便说一句,对于混淆过度偏执通常不值得费心。JavaNoobs不会尝试反编译你的应用程序,真正的Java向导无论如何都可以反编译它的主要部分。但这有点离题了,对不起,我无法抗拒