Android防止代码注入攻击

Shared storage cannot protect your application from code injection attacks

从Android4.1.2开始,App不能直接从sdcard中加载字节码,因为sdcard对于所有应用程序来说是共享的,为了防止恶意的代码注入,当采用DexClassLoader从sdcard中动态加载字节码的时候,就会抛出异常,
Caused by: java.lang.IllegalArgumentException: Optimized data directory /storage/emulated/0 is not owned by the current user. Shared storage cannot protect your application from code injection attacks.

源码分析

下面是DexFile的源代码,通过Libcore.os.getuid() != Libcore.os.stat(parent).st_uid判断文件的user id和进程的user id是否一致。如果不一致则抛出异常。

解决方案

使用app的私有目录,也就是data/data/应用程序包名,通过context.getDir(“libs”,0)。作为dex的加载目录。



  copyright@黑月神话,转载请注明出处:vjson.com

Android防止代码注入攻击》上有1条评论

发表评论