0 .论文(先敬大佬)
Cao C, Guan L, Ming J, et al. Device-agnostic firmware execution is possible: A concolic execution approach for peripheral emulation[C]//Proceedings of the 36th Annual Computer Security Applications Conference. 2020: 746-759.
关键点:符号执行优化、工具集成完整、concolic混合执行
1 .Laelaps部署
1.1 Docker安装(github也提供VM文件)
安装在VM虚拟机中,使用的是Ubuntu 18.04版本
sudo docker pull guanleustc/laelaps:1.0 Sudo docker run -it guanleustc/laelaps:1.0 /bin/bash |
若无docker,可以通过sudo snap install docker进行安装
进入系统中
sudo docker run -it guanleustc/laelaps:1.0 /bin/bash
1.2 源码安装
1.2.1 安装 Python virtualenvwrapper
链接:https://virtualenvwrapper.readthedocs.io/en/latest/
安装virtualenvwrapper可以建立一个隔离的环境,将环境所需的依赖进行单独存储,而不污染本地依赖环境。
Virtualenvwrapper的使用教程链接:https://zhuanlan.zhihu.com/p/70389886
以下所有步骤都在此虚拟环境中操作。因此,请先执行此命令。
workon laelaps |
1.2.2 构建 qemu-3.0.0
sudo apt-get build-dep -y qemu mkdir ./build && cd ./build ../qemu-3.0.0/configure --python=python3 --target-list="arm-softmmu" --disable-vnc --disable-curses --disable-sdl --disable-hax --disable-rdma --enable-debug make |
可以在以下路径中找到PATH.qemu-system-armarm-softmmu/qemu-system-armqemu-system-arm
1.2.3 下载 ARM GCC 工具链
链接:
解压缩并将目录放在PATH.BIN
1.2.4 安装 angr
tar xf angr-8.19.2.4.tar.gz cd angr-8.19.2.4 pip install -e ./ |
CD 到 angr 的根目录,并使用以下命令对其进行操作。
patch -p1 < $(root_of_this_repo)/p.patch |
1.2.5 安装 avatar2
cd avatar2 pip install -e ./ |
1.2.6 安装 concolic
cd concolic pip install -e ./ |
此时手动源码安装完成
2 测试STM32100E-EVAL MCU_RTOS
测试采用的是docker部署模式进行演示,若使用是源码编译,唯一不同的是就是需要输入workon laelaps,进入virtualenvwrapper 虚拟环境。
2.1 固件文件
固件文件存储在项目PATH的proj/proj_stm_stm32100e_eval_rtos_readWrite中
2.2 测试过程
- 运行内部的driver.py脚本启动仿真
./driver.py
- Read操作过程
- Write操作过程
- 处理完所以的read和write请求后,系统进行等待状态,程序进入中断
- 在另一个终端输入
./scratch/kill.sh |
即可停止仿真程序
注:若出现无法找到Killall命令
执行命令,安装所需依赖即可
apt-get install psmisc |
2.3 测试结束
仿真结束后会在相应的文件夹中生成logfiles和myavatar日志文件夹,如下图
2.3.1 Logfiles 路径检索结果
Debug.txt文件是程序在执行中的输出结果,例如程序执行中输出hello world ,此时输入的结果会被debug保留在debug.txt文件中
Laelaps.txt中存储着程序执行过程,和终端输出相同
Real_path.txt记录的是外设路径检索的结果,即外设仿真模拟路径的最终结果
2.3.2 Myavatar 仿真结果
此结果是在Avatar2的结果上进行的改进
其中qemuTarget0.log是qemu执行的日志,即路径选择后,程序执行的报告
QemuTarget0_err.txt 记录了程序内部函数跳转过程,表示方式和IDA中的反编译窗口一样
最后记录了程序错误点
QemuTarget0_out.txt 记录了程序的中断过程
标签:1.2,--,qemu,Laelaps,固件,txt,安装,docker,外设 From: https://blog.csdn.net/gromatic/article/details/143944730