2010-11-23 104 views
5

我想在運行時在Android應用程序中注入代碼。我試圖用dx工具在sdcard中生成一個dexfile,但是當我想實例化時,它失敗了。是否有任何工具可以注入生成新的達爾維克字節碼的代碼?我正在學習一些庫,aspecjt或android的guice。使用腳本語言更好嗎?是否有可能在android應用程序中注入代碼?

謝謝各位:)

+0

聽起來你正在做什麼是極其錯誤的,甚至如果它不工作,有更多的惡意使用超過合法 – Falmarri 2010-11-23 19:56:08

+0

這不是想法,我想用類似於BCEL或一個工具ASM。您可以將代碼調整爲可用的信息。 ; P – Sergio 2010-11-23 20:06:56

+1

如果您想通過調用動態添加的代碼來擴展您自己編寫的一個自己編寫的應用程序,請重新編寫問題。 – 2010-11-23 20:24:17

回答

-10

不,這是不可能的。如果可能的話,Android應用程序權限將不起作用。

2

您可以使用DexClassLoader類指定您自己的DEX文件。這被一些需要「插件」行爲的應用程序所使用。

但是,設備上沒有任何東西會生成DEX文件。沒有任何機制可以即時生成代碼並利用它。

0

Generating Dalvik Bytecode at Runtime on-device Using ASM or BCEL

此示例使用ASM和BCEL到generete設備上的兩個類。 將這些類創建到SD卡內存中,然後將它們動態加載到Android操作系統中。

了以下的類的實例的模板:

public class HelloWorld { 
    public static void hello(){ 
     int a=0xabcd; 
     int b=0xaaaa; 
     int c=a-b; 
     String s=Integer.toHexString(c); 
     System.out.println(s); 
    } 

} 

首先我用BCEL或ASM創建在SD卡上創建新的ad-hoc類。 其次我已經將SD卡中的Dxclient功能轉換爲Dex Class。 最後,我創建了一個jar文件,然後我從SD卡

DXClient參考

https://github.com/headius/dexclient/blob/master/src/DexClient.java

5

Dexmaker是新加載這個包到設備和設計只是爲了這個。下面是從項目網站上的例子的一部分:

DexMaker dexMaker = new DexMaker(); 

    // Generate a HelloWorld class. 
    TypeId<?> helloWorld = TypeId.get("LHelloWorld;"); 
    dexMaker.declare(helloWorld, "HelloWorld.generated", Modifier.PUBLIC, TypeId.OBJECT); 
    generateHelloMethod(dexMaker, helloWorld); 

    // Create the dex file and load it. 
    File outputDir = new File("."); 
    ClassLoader loader = dexMaker.generateAndLoad(HelloWorldMaker.class.getClassLoader(), 
      outputDir, outputDir); 
    Class<?> helloWorldClass = loader.loadClass("HelloWorld"); 

    // Execute our newly-generated code in-process. 
    helloWorldClass.getMethod("hello").invoke(null); 
相關問題