S2E
Linux Setup
- Ubuntu 16.04 LTS
- docs
1.protobuf-to-dic
安装出现各种问题
$ python setup.py install
...
error: Could not find suitable distribution for Requirement.parse('pygments')
pygments
error
sudo apt install python-setuptools
sudo easy_install pyparsing
2.test
$ python setup.py test
...
error:cannot import name ENUM_P_TYPE
stackoverflow,ENUM_P_TYPE
更新为ENUM_P_TYPE_BASE
3.Using s2e-env
1. 创建环境
创建新环境/home/user/s2e
,安装依赖,抓取s2e引擎代码。
$ s2e init /home/user/s2e
...
E: Failed to fetch http://ppa.launchpad.net/saltstack/salt/ubuntu/dists/xenial/main/binary-amd64/Packages 404 Not Found
E: Some index files failed to download. They have been ignored, or old ones used instead.
修改sources.list
之后,出现
<packagename>: Depends: <packagename> but it is not going to be installed.
可能是更换镜像为华为云,导致不一致问题,出现”坏”包。
找到解决linux版本依赖问题工具aptitude
,aptitude
可以选择合适的版本与与安装的软件匹配。
sudo aptitude install <packagename>
是否接受未解决方案,一定要选否呀,否则依赖问题依旧。
2. 激活环境
$ . $DIR/install/bin/s2e_activate
s2e子命令仅在s2e的root环境/home/user/s2e/
下可用,s2e_activate
使S2E DIR环境变量设置为当前环境。s2e_deactivate
取消s2e环境变量设置。
$DIR/install/bin/
下面没有s2e_activate
,前面步骤都没错的呀。
忽略这一步。
开玩笑呢吧!重启之后/home/user/s2e/
下有s2e_activate
了,而且$DIR/source/s2e/s2e-env/s2e-enc/templates/s2e_activate.sh
Note:本文档的其余部分假定您已激活S2E环境,因此所有s2e子命令都将在此环境中运行。
3. Building S2E
s2e build
搭建S2E和QEMU,官方时间需要大约60分钟。 可以通过指定—debug
标志来构建S2E的调试版本。
s2e build
将构建所有S2E组件,包括KLEE,QEMU,libs2e,Z3等。为了强制重建特定组件(在初始构建之后),使用以下标志:
s2e build --rebuild-components libs2e qemu
4.更新源码
更新source/s2e
s2e update
5.Buildings an image
首先需要一个镜像,s2e image_build
会列出支持的镜像。如果创建Debian 9.2.1 i386
镜像,
s2e image_build debian-9.2.1-i386
该命令将:
- 在
images
的目录下创建Debian映像 - 配置S2E的映像
- 安装可与LinuxMonitor插件一起使用的S2E兼容内核,并为映像创建快照
- 创建描述镜像的JSON文件。这个JSON文件对
new_project
命令很重要 - 创建可立即运行的快照,这样就不必在每次要运行分析时重新启动guest虚拟机
建立镜像官方时间需要大约30分钟。 默认情况下,image_build
需要KVM来加速构建过程。 如果您无权访问KVM(例如,在WSL中运行S2E),则可以使用-n
选项禁用此要求。
也可以一次构建所有镜像,但是需要所有linux和windows的镜像,
s2e image_build all
也可以只创建linux镜像,
s2e image_build linux
更多信息,查看下面repo,
Note:镜像构建进程缓存在.tmp-output
中构建输出,该输出可能会变得非常大。 建成镜像后,如果磁盘空间有问题,可能删除此目录。
6. Windows images
s2e-env
也可用于构建Windows映像。 可以在此处找到支持的Windows版本。
构建Windows映像时,必须指定--iso-dir
选项。 指定的目录还必须包含一个ISO,其名称在images.json中列出。 例如,以下命令可用于构建Windows 7,SP1镜像:
s2e image_build --iso-dir /path/to/isos windows-7sp1ent-x86_64
images.json
列出的ISO在MSDN可用。
也可以创建所有的windows镜像,
s2e image_build --iso-dir /path/to/isos windows
64位win7对应en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso
。
需要实现安装docker和kvm,将用户加入kvm和docker的group。whoami
显示用户名。
$ sudo usermod -a -G docker ${whoami}
7. 创建新项目
有了虚拟机之后,就可以创建新项目来分析目标程序,
s2e new_project --image <image_name> /path/to/target/binary [target_args...]
将在projects
目录下产生新项目,—-image
指定虚拟镜像。默认情况下,new_project
会产生下面目录和文件。
bootstrap.sh
S2E从host下载该文件到guset,然后执行。该文件包含启动程序的指令,以注入符号变量。s2e-env
产生虚拟镜像,配置镜像在s2e用户登录时自动运行launch.sh。这个脚本从host抓取bootstrap.sh
并且执行。该脚本根据分析目标程序而不同。
guestfs
镜像guestfs的软链接。从虚拟镜像提取的guest文件系统的复制,用于s2e的VMI
插件来虚拟机内省。并给所有镜像都提供guestfs。
guest-tools
S2E guest-tools的软链接。每当启动新分析,bootstrap.sh
都会将这些下载到guest。这样就不用每次修改这些工具是重新构建虚拟镜像。
launch-s2e.sh
最常用的脚本,启动S2E运行分析。根据运行S2E方式(多核,gdb等),更改该脚本变量。
library.lua models.lua s2e-config.lua
Setting up a Windows development environment
无用。官方docs
本教程介绍如何快速设置Windows开发环境,以在其中构建Windows应用程序和设备驱动程序。 有助于开发适用于Windows的S2E Guest工具(例如,s2e.sys来宾驱动程序)或只是想在S2E中构建和运行各种Windows应用程序。
!NOTE
本教程不是关于如何在Windows机器上编译和运行S2E本身。我们不支持在Windows主机上运行S2E,但我们得到报告称S2E在Windows 10 WSL环境或docker容器中构建和运行。
在本教程中,您将使用位于~/s2e/env/source/s2e/build-scripts/windows
目录中的各种脚本。 此文件夹包含简化Windows开发VM设置的脚本。 大多数脚本假设您拥有Linux主机并且想要设置干净的Windows VM以进行开发(例如,构建S2E的Windows特定组件,例如s2e.sys Guest驱动程序)。
先决条件:
- 在Linux主机上有一个可用的S2E环境
- 有一个工作的虚拟机管理程序(VMware,Virtual Box等)
- 可以访问64位Windows 10 1803 ISO(例如通过MSDN)
- 有Internet连接(安装将下载几个GB)
- 有足够的磁盘空间和可用内存(VM需要至少60 GB的磁盘和4 GB的RAM)。
1. Provisioning a Windows development VM
首先,需要构建一个Windows VM。 在本节结束时,将拥有一个带有Visual Studio 2017社区版的Windows 10 VM,WDK和SSH服务器。 Visual Studio将与所有C/C++开发选项一起安装(支持XP,7,8.1,10)。 您将能够SSH到此VM,rsync文件,并进行远程构建。
-
安装Windows 10 VM。 为客人使用60GB磁盘和4GB RAM。 任何64位Windows 10版本都应该可以使用,但建议您使用最新版本(脚本已通过版本1803测试)。
最好使用
s2e
作为admin用户的登录。 大多数脚本将s2e
视为默认用户名,因此您不必在以后覆盖此用户名。 除此之外,vanilla installation(默认安装)也可以。当进入Windows桌面时,创建快照,以便以后出现问题时可以快速恢复。
-
提供Guest。 使用管理员权限打开PowerShell并运行
Setup-DevHost.ps1
脚本。 需要从guest虚拟机访问此脚本,例如,使用VirtualBox / VMware上的共享文件夹将主机目录映射到guest虚拟机。等到脚本终止。 它是完全自动化的,无需人工干预。
!Warning
不要在主机Windows环境中运行配置脚本。该脚本假定在VM中安装了全新的Windows,如果您已安装Visual Studio环境,则可能会损坏现有的Visual Studio环境。如果您仍希望在主机上运行该脚本(例如,您没有Visual Studio或想要设置SSH),请仔细检查其内容以确保它不会干扰。必要时删除有问题的部分。
该脚本需要Internet访问才能成功运行。 它主要使用Chocolatey包管理器来安装软件。
!Note
您可以在guest虚拟机中安装所需的任何其他软件包。 Chocolatey附带了大量支持的Windows应用程序。 只需将 choco install -y package_name 添加到PowerShell脚本即可。
-
检查安装是否正确。 打开Visual Studio并尝试在x86/x64 调试/发布组合中构建S2E guest虚拟机工具。 你不应该得到任何错误。
-
检查远程连接。 检查您是否可以通过SSH连接到VM。 您应该获得Windows命令提示符。
-
最后,别忘了创建快照。
2. Building Visual Studio projects remotely
在本节中,我们将介绍如何在上一节中构建的VM中构建Visual Studio项目。
- 将公共SSH密钥复制到Guest VM。 这很重要,因为远程构建脚本会要求您多次键入VM密码,这不方便。