加载加密的apk并动态解密

时间:2013-09-03 09:21:53

标签: android encryption reverse-engineering dexclassloader

我想动态加载加密的jar文件。我动态加载了一个Dex文件,它工作正常。我已经在模拟器和我的Android设备上尝试了它。现在我想加载加密文件。据我所知,我将不得不自定义类加载器,以便它可以在执行之前动态解密文件。

如果有人可以指导我如何实际实现这一点,我将很高兴。我有一个想法,但我不是一个有经验的程序员。

提前致谢

公共类MainActivity扩展了Activity {

@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {
        final String libPath = Environment.getExternalStorageDirectory() + "/shoaib.jar";
        final File tmpDir = getDir("dex", 0);

        final DexClassLoader classloader = new DexClassLoader(libPath, tmpDir.getAbsolutePath(), null, this.getClass().getClassLoader());
        final Class<Object> classToLoad = (Class<Object>) classloader.loadClass("com.example.custom.MyClass");

        final Object myInstance  = classToLoad.newInstance();
        final Method doSomething = classToLoad.getMethod("doSomething");

        doSomething.invoke(myInstance);

    } catch (Exception e) {
        e.printStackTrace();
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

1 个答案:

答案 0 :(得分:0)

DexClassLoader是一个ClassLoader所以你应该(如我还没有这样做!)能够写一个EncryptedDexClassLoader extends DexClassLoader即可处理加密。

查看ClassLoader's protected methods - 特别是getResourceAsStream() - 可能会让您了解如何继续。我建议覆盖所有受保护的方法,调用super.实现但记录其参数(并报告结果),以了解它们的使用方式。

相关问题