2014-09-25 23 views
0

我正在用AspectJ的幫助下構建一個項目來攔截Android中的方法。 當我建立的代碼的jar文件我創建它創建每個切入點我施加在方法作爲像波紋管的編譯的語法:我們可以使用dex2jar工具或其他方法在java中對註釋進行混淆嗎?

代碼混淆之前:

@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的細節上述Anotation即線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語法,您可以解決註解混淆問題(聽起來像是一個非常虛弱的事情)。也許這是更有希望的,但我沒有嘗試過。

順便說一句,關於混淆是過度偏執通常不值得麻煩。 Java noobs不會嘗試反編譯你的應用程序,真正的Java嚮導將能夠反編譯它的主要部分。但是這是一個脫離主題,對不起,我無法抗拒。

相關問題