android 环境模拟 ,过了一遍帖子,只能说很精彩,unicorn 实现系统调用模拟和jni模拟的方法简单粗暴并有用。
https://bbs.pediy.com/thread-253868.htm#msg_header_h1_10
探究目的:
- 了解如何获取到jni_env 。
- 补环境应该就通过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 的使用方法,
0 条评论