2014-09-25 1 views
0

Я создаю проект с помощью AspectJ, чтобы перехватить метод в Android. Когда я создаю файл фляга коды я создал это создает скомпилированный синтаксис каждого среза точек я прикладываемые к методам, как, как ниже:Можем ли мы обмануть аннотации в java, используя инструмент dex2jar или любым другим способом?

кода перед запутыванием:

@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 но т.е. линию этой заметки выше определения методы не изменяется, который показывает деталь методы interce ption.

Код после запутывания:

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

Uptil что теперь я знаю, что мы можем запутывать имена классов, методов и переменных. Но я хочу, чтобы запутать эту строку:

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

Так что мои Quitions являются:

  1. Можно ли запутать аннотации? Если да, то как?

  2. Как мы можем запутать локальные переменные какого-либо метода?

ответ

1

Можно ли запутать аннотации? Если да, то как?

Теоретически да. Но если вы это сделали, код проверки аннотации AspectJ не узнает их. Следовательно, это была бы плохая идея.

Как мы можем запутать локальные переменные какого-либо метода?

Это спорный вопрос. Имена локальных переменных не включаются в исходный файл байт-кода в первую очередь.

Имена параметров метода - это еще одно дело. Но в вашем примере имена параметров используются обработчиком аннотаций. Если обфускатор изменил их, не изменив также параметры аннотации, связанные с ними, процессор потерпит неудачу.


В теории у вас может быть обфускатор + модифицированный процессор AspectJ, который сделал это. Однако нет никаких указаний на то, что (например) «proguard» или «dexguard» могут это сделать.

1

Как только плетение выполнено (я полагаю, вы занимаетесь компиляцией во времени?), Вы могли бы просто снять аннотации. Они нужны только во время стадии согласования/ткачества, их обычно не проводят повторно (например, во время выполнения). Вы можете написать простого посетителя Asm, который удалил любой из пакетов org.aspectj.

0

Вы можете решить проблему обфускации аннотаций (звучит как довольно хрупкая вещь), используя собственный синтаксис AspectJ для ваших аспектов. Может быть, это более перспективно, но я не пробовал.

BTW, будучи сверхпараноидным относительно обфускации, обычно не стоит проблем. Java noobs не будет пытаться декомпилировать ваши приложения, и настоящие Java-мастера смогут в любом случае декомпилировать основные части. Но это отчасти из-за темы, извините, я не мог сопротивляться.

Смежные вопросы