简单的活着

S2E

Posted on By Mista Cai

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密码,这不方便。