首页
社区
课程
招聘
[转帖]http://bbs.csdn.net/topics/391025632
发表于: 2016-8-31 17:53 3793

[转帖]http://bbs.csdn.net/topics/391025632

2016-8-31 17:53
3793
在Android 4中,可以使用libdvm.so中提供的Dalvik_dalvik_system_DexFile_openDexFile_bytearray函数实现内存中动态加载解密后的dex文件。但是在ART中就没有这样的函数了,查看了ART中关于动态加载的代码,主要就是将dex文件转成oat文件,然后再加载到内存中,其中有一步就是要将加载的oat文件,放到ClassLinker类的一个oat文件列表中,就是这个注册函数,其他过程其实都是按照它的代码来实现,但是如何加载到这个列表中,我就不知道怎么弄了。

const OatFile* ClassLinker::RegisterOatFile(const OatFile* oat_file) {
  WriterMutexLock mu(Thread::Current(), dex_lock_);
  if (kIsDebugBuild) {
    for (size_t i = 0; i < oat_files_.size(); ++i) {
      CHECK_NE(oat_file, oat_files_[i]) << oat_file->GetLocation();
    }
  }
  VLOG(class_linker) << "Registering " << oat_file->GetLocation();
  oat_files_.push_back(oat_file);
  return oat_file;
}

这段代码android5的源码中:art/runtime/class_linker.cc中,ART中给java层提供的动态加载函数,实际就是这个函数:DexFile_openDexFileNative,在art/runtime/native/dalvik_system_DexFile.cc中。跟踪这个函数,就可以大致了解art下动态加载dex文件的过程。

请教下各位大侠,android5中,如果我要实现内存中动态加载dex文件,要怎么完成上面提到的注册过程。还有没有更好的dex加固方法?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人回答,我自己顶一下。
2016-9-1 16:55
0
游客
登录 | 注册 方可回帖
返回
//