考虑复现一下该工作

环境

  • Ubuntu 20.04
  • docker

Docker环境

使用清华源安装docker即可
设置docker build时的代理:

1
docker build -t greenhouse --network host .

修改Dockerfile内容:

1
2
3
4
5
6
7
FROM m.daocloud.io/docker.io/library/ubuntu:20.04

ENV ALL_PROXY="http://127.0.0.1:7890"
...
# 注释掉该行,因为仓库里没有该文件
# COPY ubuntu.tar /ubuntu.tar
...

Docker Build

进行编译,发现卡死在选择时区界面:

Dockerfile开头添加以下内容:

1
2
3
4
5
RUN export DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
&& apt-get install -y tzdata \
&& ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& dpkg-reconfigure --frontend noninteractive tzdata

继续运行,发现报错:

1
2
3
135.9 INFO: pip is looking at multiple versions of archinfo to determine which version is compatible with other requirements. This could take a while.
136.5 ERROR: Package 'archinfo' requires a different Python: 3.8.10 not in '>=3.10'
136.6 [!!] 17:50:41 pip failure (--no-build-isolation -e archinfo).

issue说明了为archinfo更新,导致ubuntu20.04版本过低,先暂时注释掉该部分,后续build好后再补充

ChromeDriver下载错误,应该是以下命令拼接DRIVERVERSION失败,CHROMEVERSION修改为101.0.5112即可

angr环境配置

使用命令docker run -itd greenhouse创建容器,进入容器安装angr
将本地下载好的文件例如archinfo, pyvex, cle...等仓库(v9.2.55版本)复制到/angr-dev目录,然后运行之前注释的命令。

1
2
3
4
# $REPO: archinfo, pyvex, cle, claripy, ailment, angr, angr-doc, binaries
git clone https://github.com/angr/$REPO && cd $REPO
git fetch --tags
git checkout tags/v9.2.55 -b 9.2.55

注意一下capstone版本:

1
pip3 install capstone==5.0.1

后面还有一个pyelftools,本地源码安装好后注释掉即可
至此环境搭建完成(不过后来发现其实提供了docker image的XD)

greenhouse复现

我们这里选择的手动运行Greenhouse,参考MANUAL.md
对应Artifact下载链接
也有相关的复现链接
运行以下命令导入image:

1
2
3
4
5
6
#只执行一次:
docker load -i greenhouse-ae.tar
# 每次启动容器都要执行:
docker run -itd --privileged -v /dev:/host/dev greenhouse:usenix-eval-jul2023 bash
/gh/docker_init.sh
/gh/test.sh

过程中可能遇到无法访问docker daemon的报错, 需要在容器中执行 usermod -aG docker root命令并重新启动容器.

这里参考文章里的华硕的固件模拟FirmAE在模拟时会出现卡死的问题。这里我又选择了之前提取过的一个信号放大器的固件,该固件内容比较简单。用来尝试验证效果。
似乎也会卡死。。。

参考链接