安装
AndroidNativeEmu有什么用?
AndroidNativeEmu是基于Unicron实现的一个指令解析器, 让您能够跨平台模拟Android Native库函数,例如JNI_OnLoad,Java_XXX_XX等函数
特性模拟 JNI Invocation API so JNI_OnLoad can be called properly.
模拟 memory、malloc、memcpy
支持拦截系统调用(SVC #0)
通过符号Hook
所有 JavaVM, JNIEnv 和 hooked functions 都可以用python来处理
支持 VFP
支持文件系统(也就是说你可以模拟maps、status等文件)
安装过程
环境要求: python 3.7 (注意必须是3.7版本, 我使用3.6装keystone的时候踩了坑)
自测系统环境: win7
1.Clone 该项目git clone https://github.com/AeonLucid/AndroidNativeEmu.git
2.安装需要的支持模块pip install -r requirements.txt安装keystone-engine可能会失败(反正我是没装上)
解决方案:打开keystone\bindings文件夹安装: python setup.py install
把dll复制到python的keystone目录下: [python_path]\Lib\site-packages\keystone\
3.把androidemu文件夹复制至sample文件夹下,并删除example.py文件下的关于"samples/"的目录访问路径如
"samples/example_binaries/libc.so"
改为
"example_binaries/libc.so"
4.运行例子python example.py
5.不出意外的话就可以看到结果了
例子文件阅读example_binaries/ : 里面是需要加载的so
vfs/ : 里面是虚拟的文件系统, 有需要可以自己添加文件
androidemu/ : android虚拟机import logging
import sys
from unicorn import UC_HOOK_CODE
from unicorn.arm_const import *
from androidemu.emulator import Emulator
# 配置日志相关设置
logging.basicConfig(
stream=sys.stdout, #标准输出流
level=logging.DEBUG, #输出等级
format="%(asctime)s %(levelname)7s %(name)34s | %(message)s" #输出格式
)
logger = logging.getLogger(__name__) #实例化对象
# 实例化虚拟机
emulator = Emulator()
#加载Libc库
emulator.load_library("example_binaries/libc.so", do_init=False)
#加载要模拟器的库
lib_module = emulator.load_library("example_binaries/libnative-lib.so")
#打印已经加载的模块
logger.info("Loaded modules:")
for module in emulator.modules:
logger.info("[0x%x] %s" % (module.base, module.filename