我想在运行时在android应用程序中注入代码。我曾尝试使用dx工具在sdcard中生成dexfile,但是当我想要实例化时,它会失败。是否有任何工具可以注入生成新dalvik字节码的代码?我正在研究一些库,aspecjt或guice for android。使用脚本语言更好吗?
谢谢大家:)
答案 0 :(得分:6)
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);
答案 1 :(得分:2)
您可以使用DexClassLoader类指定自己的DEX文件。一些需要“插件”行为的应用程序使用此功能。
然而,设备上没有任何内容可以生成DEX文件。没有机制可以动态生成代码并使用它。
答案 2 :(得分:0)
Generating Dalvik Bytecode at Runtime on-device Using ASM or BCEL
此示例使用ASM和BCEL在设备上生成两个类。 这些类被创建到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 utiliy将Java类转换为Dex类。 最后我创建了一个jar文件,然后我将这个软件包从SD卡加载到设备中
DXClient参考
https://github.com/headius/dexclient/blob/master/src/DexClient.java
答案 3 :(得分:-1)
您可以查看此页面,但必须使用某些工具,例如APKTool,SignApk。
http://blackhatcrackers.blogspot.de/2013/05/injecting-custom-code-into-android-apks.html
答案 4 :(得分:-10)
不,这是不可能的。如果可能的话,Android应用程序权限将不起作用。