Unicorn简单学习使用记录
0x00 介绍
Unicorn是一个轻量级, 多平台, 多架构的CPU模拟器框架,基于qemu开发,它可以代替CPU模拟代码的执行,常用于恶意代码分析,Fuzz等。
0x01 安装
官网有编译好不同平台的二进制包,直接安装就行。但是看了一下时间2017年的,qemu已经升级好几个版本了。api也比较老旧。
去github看了一下是否有在更新,发现一直有在更新,不过好像也没更新啥,只是修复一些bug,下载git源码,自己编译。目前最新1.0.2rc
1 2 3 4 5 6 7 8 9git clone https://github.com/unicorn-engine/unicorn.git cd unicorn # UNICORN_ARCHS="arm aarch64 x86" ./make.sh # 设置要编译的架构 可选 默认6种全编译 (Arm, Arm64, M68K, Mips, Sparc, & X86) ./make.sh sudo ./make.sh install # python 绑定 cd bindings/python sudo python3 setup.py install还有更多交叉编译选项参考 文档
0x02 简单使用
C :
| |

官方给了很多测试案例
python3:
| |
0x03 一些基于unicorn的项目简单使用
AndroidNativeEmu
AndroidNativeEmu 让你能够跨平台模拟Android Native库函数,比如JNI_OnLoad、Java_XXX_XX等函数
这是看雪无名侠大佬二次修改一个版本,真的太强了。
安装报错解决
安装有些坑。。
首先要求使用python3.7。之后
1 2 3 4git https://github.com/AeonLucid/AndroidNativeEmu.git pip install -r requirements.txt cd samples # 运行python example.py开始报错。。在win上先搞定
keystone-engine1git clone https://github.com/keystone-engine/keystonecd keystone/bindings/pythonpython setup.py install下载
Windows - Core enginex64解压找到
keystone.dll放到X:\location_to_python\Lib\site-packages\keystone\还有可能报
fail to load the dynamic library.下载 vcredist_x64 安装。
之后直接
python example.py继续报ModuleNotFoundError: No module named 'androidemu'加入代码
1 2import sys sys.path.append('../')又报
FileNotFoundError: [Errno 2] No such file or directory: 'samples/example_binaries/libc.so'删掉代码里的
samples/example_binaries/libc.so的samples/能跑起来但是报错
unicorn.unicorn.UcError: Invalid instruction (UC_ERR_INSN_INVALID)改成
emulator.load_library("example_binaries/libc.so", do_init=False)就成功运行

使用
| |
- samples 文件夹下几个具体的实例
unicorefuzz
合并到AFL系列总结
参考
中文文档https://github.com/kabeor/Micro-Unicorn-Engine-API-Documentation
https://app.yinxiang.com/fx/a6cc6633-a93f-4111-a06a-cccd5fa39e0f