首页
论坛
课程
招聘
[原创]windows平台编译调试DynamoRIO和Winafl x86/x64
2020-8-8 16:30 2016

[原创]windows平台编译调试DynamoRIO和Winafl x86/x64

2020-8-8 16:30
2016

不知为什么,每次尝试去编译开源项目都要踩n个坑,应该还是太菜了吧......编译成功后把方法记下来,以后回顾的时候方便看


1.在windows系统上安装

cmake 3.18.0-rc2

Qt 5.13.0

vs2019

perl

git

everything

(这些软件的其他版本我没试过)


2.下载dynamorio项目源码,进入dynamorio文件夹并创建build_Win32和build_x64文件夹,打开cmake-gui

git clone https://github.com/DynamoRIO/dynamorio.git

cd dynamorio

mkdir build_Win32

mkdir build_x64

cmake-gui


3.编译DynamoRIO为32位

(1)打开cmake-gui,设置源码目录和build目录,之后点击Configure;


(2)选择生成器和生成平台,点击Finish,就开始build了;

(3)出现了错误,根据错误信息定位到make/cpp2asm_support.cmake第243行;

具体原因是没有指定CMAKE_ASM_COMPILER;

那就用everything搜索ml.exe,随便找一个就行了;

我用的是"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\Hostx64\x86\ml.exe"

之后填写到cmake-gui中去,点击Configure继续配置;

(4)又出错了,这次是CMakeLists.txt的第678行;

原因是没有指定CMAKE_MC_COMPILER;

同样地,用everything随便找一个mc.exe就行了;

我用的是"C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\mc.exe";

之后填写到cmake-gui中去,点击Configure继续配置;

(5)又出问题了,这次是没有指定uuid.lib;

同样地,用everything随便找一个uuid.lib;

我用的是"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x86\Uuid.Lib";


之后填写到cmake-gui中去,点击Configure继续配置;

(6)又出问题了,这次是没有指定lib.exe;

同样地,用everything随便找一个lib.exe;

我用的是"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\Hostx64\x86\lib.exe";

之后填写到cmake-gui中去,点击Configure继续配置;

(7)终于Configuring Done了,之后点击Generate,也就Generating Done了,可以关闭cmake-gui了

(8)进入build_Win32目录,用vs打开解决方案DynamoRIO.sln,共有120个项目;

(9)打开项目drgui的项目属性,将“警告视为错误”改为“否”;

修改“附加包含目录”,关于Qt的目录设置成msvc2017下的包含目录,点击“确定”;

添加“附加库目录”,点击“确定”;

修改“附加依赖项”,点击“确定”;

点击“确定”退出drgui属性页;

(10)这时点击生成解决方案,就能一次性全部编译成功了,生成在bin32目录下;


4.编译DynamoRIO为64位

由于会遇到和上面编译32位一模一样的错误,有些内容我就不详细说了(累死),有些内容我就不说明了;

(1)打开cmake-gui,设置源码目录和build目录,之后点击Configure;

(2)选择生成器和生成平台,点击Finish,就开始build了;

(3)缺少ml64.exe,我用的是"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\Hostx64\x64\ml64.exe";

之后填写到cmake-gui中去,点击Configure继续配置;

(4)缺少mc.exe,我用的是"C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\mc.exe";

之后填写到cmake-gui中去,点击Configure继续配置;

(5)缺少uulib.lib,我用的是"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\Uuid.Lib";

之后填写到cmake-gui中去,点击Configure继续配置;

(6)缺少lib.exe,我用的是"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\Hostx64\x64\lib.exe";

之后填写到cmake-gui中去,点击Configure继续配置;

(7)终于Configuring Done了,之后点击Generate,也就Generating Done了,可以关闭cmake-gui了;

(8)进入build_x64目录,用vs打开解决方案DynamoRIO.sln,共有119个项目;

(9)打开项目drgui的项目属性,将“警告视为错误”改为“否”;

修改“附加包含目录”,关于Qt的目录设置成msvc2017_64下的包含目录,点击“确定”;

添加“附加库目录”,点击“确定”;

修改“附加依赖项”,点击“确定”;

点击“确定”退出drgui属性页;

(10)这时点击生成解决方案,就能一次性全部编译成功了,生成在bin64目录下;


5.返回dynamorio文件夹所在目录,下载winafl项目源码,创建build_Win32和build_x64文件夹,直接用cmake生成vs项目并编译

(1)打开git,获取winafl源码并更新

git clone https://github.com/googleprojectzero/winafl.git

cd winafl

git submodule update --init --recursive

(2)在winafl目录下打开cmd(使用git运行cmake会失败),生成vs项目并编译

mkdir build_Win32

mkdir build_x64

A、编译winafl为32位:

cd build_Win32

cmake -G"Visual Studio 16 2019" .. -A Win32 -DDynamoRIO_DIR=D:\__workspace__\fuzz\dynamorio\build_Win32\cmake -DINTELPT=1 -DUSE_COLOR=1

cmake --build . --config Release

B、编译winafl为64位:

cd build_x64

cmake -G"Visual Studio 16 2019" .. -A x64 -DDynamoRIO_DIR=D:\__workspace__\fuzz\dynamorio\build_x64\cmake -DINTELPT=1 -DUSE_COLOR=1

cmake --build . --config Release

(3)如果想要winafl在fuzz过程的界面显示彩色以及使用IntelPT的话,则打开winafl目录下的config.h文件,添加下面两个宏定义后重新编译

#define USE_COLOR

#define INTELPT


6.调试winafl(例如想调试afl-fuzz)

(1)先右击该项目后设为启动项目;

(2)然后打开项目属性,在Debug配置下修改“调试信息格式”为“用于“编辑并继续”的程序数据库 (/ZI)”,以及禁用优化选项;

(3)之后给程序下断点才能成功断下;



《0day安全 软件漏洞分析技术(第二版)》第三次再版印刷预售开始!

最后于 2020-8-13 19:55 被昵称好麻烦编辑 ,原因:
收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 1195
活跃值: 活跃值 (407)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
昵称好麻烦 活跃值 2020-8-8 16:32
2
0
最近在玩二进制漏洞挖掘,希望能和更多朋友一起交流相关技术
雪    币: 676
活跃值: 活跃值 (666)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 活跃值 3 2020-8-8 16:38
3
0
友情提示,dynamorio请认准intel处理器。AMD的话得手动调一下最大使用线程为1,要不可能会崩溃
雪    币: 1195
活跃值: 活跃值 (407)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
昵称好麻烦 活跃值 2020-8-8 16:40
4
0
NONAME剑人 友情提示,dynamorio请认准intel处理器。AMD的话得手动调一下最大使用线程为1,要不可能会崩溃
那篇《SysWOW64的奇技淫巧》感觉老哥玩得很深啊 :-)
雪    币: 676
活跃值: 活跃值 (666)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 活跃值 3 2020-8-8 16:44
5
0
昵称好麻烦 那篇《SysWOW64的奇技淫巧》感觉老哥玩得很深啊 :-)
没有……只是从amd的这个bug开始往下de,抄了段代码和大家分享……真正的高手syswow64玩得很深的(
游客
登录 | 注册 方可回帖
返回