ღ Miranda

Mac下调试v8漏洞的方法

v8chrome使用的javascript引擎,这里总结一下在mac下编译的方法以及如何使用xcode进行源码调试。

安装依赖和下载源码

要编译v8,首先需要depot_tools,获取方法可以在下面的页面中下载压缩包:

在想放置源代码的目录下运行fetch v8下载源代码和依赖,这一步需要翻墙,我使用的是ss,在终端中运行如下命令设置代理,具体端口号根据配置决定:

进入源码目录,运行gclient sync,生成所需依赖。

编译v8引擎

需要安装有xcode,并且安装了command line tools,安装完xcode后需要打开同意license,然后在命令行运行sudo xcode-select -s /Applications/Xcode.app

在源代码目录内运行tools/dev/v8gen.py x64.debug,然后运行ninja -C out.gn/x64.debug编译debug版,需要等待一会:

获取漏洞对应版本调试

这里以bug-800032为例,poc如下:

在官方的commit中找到对应的change id,然后可以使用git checkout [change-id]来切换版本,[change-id]change id的前十位,一个commit看起来像是这样:

那么为了调试漏洞,就要切换到parent版本对应的id上,也就是运行git checkout 4ca5a577e6,接下来需要重新获取依赖然后编译,这里也要按之前的方法配置终端代理:

接下来就可以运行poc得到崩溃:

可以使用gdb直接调试d8,下面讲一下如何使用xcode调试源码。

使用xcode源码调试

为了能够更清楚的调试漏洞,可以用xcode进行源码调试,首先使用gn命令生成对应的xcode文件,当然ide参数也可以指定为VS等其他IDE,具体参考gn gen --help的帮助:

这样,在out目录下就会有gn文件夹,里面有all.xcworkspace文件,可以直接使用xcode打开这个工作区文件,接下来要设置编译的目标,在Product->Scheme下选择d8,否则会编译出错,这样就只编译d8这个可执行程序,使用d8就可以直接调试v8的源代码。

然后直接Build,编译时间有些长,会自动生成v8的链接库,等待编译完成,在Product->EditScheme菜单中把poc文件作为运行参数,在对应文件中下好断点,直接运行就会断下来了。

发表评论

电子邮件地址不会被公开。