android 环境模拟 ,过了一遍帖子,只能说很精彩,unicorn 实现系统调用模拟和jni模拟的方法简单粗暴并有用。
https://bbs.pediy.com/thread-253868.htm#msg_header_h1_10

探究目的:

  1. 了解如何获取到jni_env 。
  2. 补环境应该就通过hook去把要使用的printf等导入函数,hook 为可供执行的函数。

拿了TTencrypt作为参考

加载的核心函数:com.github.unidbg.linux.AndroidElfLoader#loadInternal(com.github.unidbg.spi.LibraryFile, boolean)

常规解析流程,加载elf文件,加载依赖的elf文件,重定位。

尴尬的是想看jni_Onload 函数模拟,发现这个ELF文件没有jni函数。

换了一个测试用例,有了Jni_Onload 方法,

com.github.unidbg.linux.android.dvm.DalvikVM#DalvikVM

看了下JNIEnv 的实现思路,走java层实现,但是有个问题,模拟过程中要调用到的话,这个执行流如何变动,unicorn 引擎执行通过hook,再交由java执行?可能需要了解下unicorn的api和使用方法。确实C++和java配合的模拟想过更好,但是环境的兼容性复杂,不利用unicorn直接在android平台去做模拟执行会不会更好。

后期可以再熟悉下:

unicorn 的使用方法,

分类: llvm

pareto

未来什么方向不管,先做自己喜欢做的事情。

0 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注