首页
社区
课程
招聘
[原创]V8环境搭建,100%成功版
2019-7-24 21:59 26913

[原创]V8环境搭建,100%成功版

2019-7-24 21:59
26913

原文地址:https://mem2019.github.io/jekyll/update/2019/07/18/V8-Env-Config.html

0x00 前言

众所周知,V8是著名浏览器Chrome的JavaScript引擎,而Chrome又由Google开发,又因为某些不能说的原因,我们没有办法直接访问一些Google在因特网上的服务,包括当配置V8环境时所需要下载的部分资源。这导致搭建V8环境的时候,非常的痛苦。目前在网上有一些方法可以成功搭建,但是都有一些局限,而且容易失败,尤其是当我折腾的时候。我有一种超能力,就是在搭建环境的时候可以把所有的坑,不管是有人遇到过的还是没人遇到过的,不管是能解决的还是不能解决的,都特么会撞上。这里介绍的方法,就算是在我身上,都可以成功搭建。所以如果有人用这个方法搭建失败的话,我直播女装。

0x01 废话

这一小节我会讲一些废话,关于自己搭建环境的心路历程,如果只是想来看怎么搭建V8环境的话可以直接跳过。

 

最开始,我是搞了个在香港的阿里云,然后参考这个搭建的。这篇文章简单地来说就是让你在墙外的服务器上搭建编译好,然后用FTP传回来(其实scp也行)。简单暴力,我喜欢。

 

但是这有两个问题,第一个问题,编译好的V8真的是大,用tar压缩好之后都有1.8个G,然后传回来的速度有时候特慢,正常情况是100 kb/s左右,这传一次就要3个小时,这真是生动的体现了“做题5分钟,搭建3小时”。

 

第二个问题,远程编译的时候,会出错会出错会出错。远程服务器是Ubuntu的时候,执行tools/dev/v8gen.py脚本的时候,会出现异常;远程服务器是CentOS的时候,编译debug版本的时候,clang++会直接炸。上几张图感受一下。

 

什么叫做绝望1

 

什么叫做绝望2

 

然后还有一个方法,就是搭全局VPN,但是这很容易被某些不能说的东西检测到然后被ban,所以这个方法肯定也不行。

0x02 准备

环境Ubuntu 18.04,非此环境本人不负责女装,但是就算不是这个环境应该也不会出错。

 

首先我们需要一个http代理,这个用SSR就行,具体因为某些不能说的原因不详细阐述。

 

然后先配置代理,首先我们需要配置git的代理,这样在执行git命令的时候,比方说git clone,就会通过代理来下载。具体命令:

git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port

一般来讲SSR是没有用户名和密码的,所以一般这条命令会长这样:

git config --global http.proxy http://ip:port

其中ip可以是127.0.0.1也可以是192.168.xxx.xxx,取决于你的http代理在哪,port同理。

 

然后配置git的代理还不够,因为配置环境的时候也会用到curl这条命令,所以还得在环境变量设置一个代理。具体方法是在~/.bashrc最后面加上这两行命令,其中ip:port换成你的http代理:

export http_proxy="http://ip:port/"
export https_proxy=$http_proxy

然后在命令行里打bash,这样可以重新加载~/.bashrc,载入代理的环境变量。

0x03 配置

这个就简单了,跟网上其他人的资料的没啥区别。

安装depot_tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
echo 'export PATH=$PATH:"/path/to/depot_tools"' >> ~/.bashrc
# clone depot_tools,并且把depot_tools的目录加到PATH环境变量,
# /path/to/depot_tools改成depot_tools的目录
# 因为git加了代理所以第一个命令可以成功clone了

安装ninja

git clone https://github.com/ninja-build/ninja.git
cd ninja && ./configure.py --bootstrap && cd ..
# clone并且configure
echo 'export PATH=$PATH:"/path/to/ninja"' >> ~/.bashrc
# /path/to/ninja改成ninja的目录

编译v8

bash
# 重新开一个bash,这样新的环境变量才会被加载
fetch v8
# 下载v8的repo,这个也是需要git代理才能成功下载的
cd v8
git reset --hard [commit hash with vulnerability]
# 如果编译最新版的话,就不用这行命令
# 如果是要调洞的话,就要在这里切到有漏洞的那个commit
gclient sync
# gclient sync 用来下载一些其他需要的东西,
# 这个还需要curl的代理,之前也已经在环境变量配置了
tools/dev/v8gen.py x64.debug
ninja -C out.gn/x64.debug
# 编译

然后如果只是想编译d8的话(这样更快),最后一个命令后面加个d8的参数ninja -C out.gn/x64.debug d8

 

编译release版本的话,最后两行改成这个。

tools/dev/v8gen.py x64.release
ninja -C out.gn/x64.release

同理最后一个命令改成ninja -C out.gn/x64.release d8只编译d8

 

然后顺便说一下,在执行gclient sync的时候,可能会提示这个。

NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.

 

这个无所谓,似乎因为在这里要下载的东西不会被墙,如果哪天这个会导致失败的话就按照这个指示设置一下环境变量,如果可以成功本人也不负责女装。

 

具体说一下吧,首先新建一个.boto的文件,比方说放到/home/[user]/.boto(当然,user改成你的用户名),里面写

[Boto]
debug = 0
num_retries = 10

proxy = [proxy ip]
proxy_port = [proxy port]

其中IP和port改成你的http代理,跟前面的同理。

 

然后在~/.bashrc最后面加上export NO_AUTH_BOTO_CONFIG="/home/[user]/.boto",然后重启一下bash或者source ~/.bashrc加载环境变量。

0x04 启动

release

./out.gn/x64.release/d8
# 启动interactive d8 shell
./out.gn/x64.release/d8 test.js
# 运行test.js

debug

./out.gn/x64.debug/d8
# 启动interactive d8 shell
./out.gn/x64.debug/d8 test.js
# 运行test.js

0x05 Turbolizer搭建

首先,Ubuntu下默认的apt里面的nodejs不好使,必须得安装最新版的

sudo apt-get install curl python-software-properties
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install nodejs

python-software-properties 有些情况下他可能会找不到,然后会提示你安装另一个包,如果是这样的话根据提示安装那个包就好了。

 

然后安装并启动turbolizer

cd v8/tools/turbolizer
npm i
npm run-script build
python -m SimpleHTTPServer

接着用chrome浏览器访问ip:8000就能用了,这个完全加载好要等一小会,因为如果你看HTTP包的话会发现他会从cdn.rawgit.com获取了一个文件,而这个是有点慢的。不过如果开梯子的话就会快多了。

 

以后如果有空的话我会研究一下弄个docker,这样配置起来就会方便多了。

0x06 GDB插件

V8还有一个gdb插件,可以方便GDB调试。具体安装方法很简单了,在文件~/.gdbinit最后面加上这两行。

source /path/to/v8/tools/gdbinit
source /path/to/v8/tools/gdb-v8-support.py

/path/to/改成实际放置v8 repo的文件夹绝对路径。


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2019-7-30 14:43 被holing编辑 ,原因:
收藏
点赞3
打赏
分享
最新回复 (44)
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
xiaofu 8 2019-7-25 11:56
2
0
学习
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
junkboy 2019-7-25 12:04
3
2
我懂你,一般这么说的内心就是很想女装,等我去 Ubuntu 18.04 上失败给你看
雪    币: 1414
活跃值: (4163)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2019-7-25 12:21
4
0
法布里斯贝拉 大哥写的V8 引擎了解一下? a few c files
https://bellard.org/quickjs/
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2019-7-25 18:05
5
0
IamHuskar 法布里斯贝拉 大哥写的V8 引擎了解一下? a few c files https://bellard.org/quickjs/
这个已经被人挖出UAF了
雪    币: 3562
活跃值: (422)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
V1NKe 2 2019-7-25 18:17
6
0
等一个女装
雪    币: 459
活跃值: (652)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
ssarg 2019-7-25 22:32
7
0
能否分享下编译后的32位v8文件(包括lib、dll等文件),谢谢
雪    币: 6435
活跃值: (436)
能力值: ( LV12,RANK:831 )
在线值:
发帖
回帖
粉丝
Riatre 8 2019-7-29 00:09
8
0

其实可以 proxychains bash 然后该干啥干啥……
不过每个被墙/国内下载慢的服务都修电脑配一下代理的话, 迟早女装^W 迟早会嫌烦,不如弄个能跑满速的全局VPN省事

最后于 2019-7-29 00:10 被Riatre编辑 ,原因:
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2019-7-29 13:50
9
0
Riatre 其实可以 proxychains bash 然后该干啥干啥…… 不过每个被墙/国内下载慢的服务都修电脑配一下代理的话, 迟早女装^W 迟早会嫌烦,不如弄个能跑满速的全局VPN省事
VPN太容易被封了。。
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2019-7-29 14:39
10
0
ssarg 能否分享下编译后的32位v8文件(包括lib、dll等文件),谢谢
分享给你也没用,切commit之后还是得重新编,况且这一共好几个G怎么发,不要伸手
雪    币: 1176
活跃值: (1219)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
Tennn 5 2019-7-29 17:21
11
0
编译之后压缩完也就100多mb把。。。。 我有好几个版本得。。。
雪    币: 459
活跃值: (652)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
ssarg 2019-7-29 17:36
12
0
holing 分享给你也没用,切commit之后还是得重新编,况且这一共好几个G怎么发,不要伸手
1、自己编译老是出错,没办法啊。有这么大吗?最好发个新版7.xxx,次之6.xxx也行,用网盘啊,你敢发,我就敢收。
2、很是费解,为啥官方不自己编译个成品给大家用,非要自己编译。
3、你的原话有瑕疵,“ 所以如果有人用这个方法搭建失败的话,我直播女装。 ”,后半句应该是“我直播自己的女装”
最后于 2019-7-29 17:50 被ssarg编辑 ,原因:
雪    币: 459
活跃值: (652)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
ssarg 2019-7-29 17:39
13
0
Tennn 编译之后压缩完也就100多mb把。。。。 我有好几个版本得。。。
那就分享一下呗,谢谢了。最好新版7.xxx,次之6.xxx也行。
雪    币: 620
活跃值: (372)
能力值: (RANK:150 )
在线值:
发帖
回帖
粉丝
wjzid 3 2019-7-29 18:45
14
0
ssarg holing 分享给你也没用,切commit之后还是得重新编,况且这一共好几个G怎么发,不要伸手 1、自己编译老是出错,没办法啊。有这么大吗?最好发个新 ...
[+] 我不知道你是不是说的这个: https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html.
[+[ 我不确定上面的是不是你说的官方发布. 但是用于调试漏洞是可行的. 只是肯定某些方面没有自己的编译的东西工具多.... 所以你要自己迁移一下... 估计会麻烦一些...
[+] 剩下的技巧就是windbg的技巧了....
雪    币: 620
活跃值: (372)
能力值: (RANK:150 )
在线值:
发帖
回帖
粉丝
wjzid 3 2019-7-29 18:47
15
0
ssarg holing 分享给你也没用,切commit之后还是得重新编,况且这一共好几个G怎么发,不要伸手 1、自己编译老是出错,没办法啊。有这么大吗?最好发个新 ...
[+] 另外这是docker...的: https://hub.docker.com/r/dockervhf/d8
[+] 我没有尝试过docker... 所以不太i清楚有效性. 但是如果你会的话, 我猜测是有效的.
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2019-7-30 11:32
16
0
wjllz [+] 另外这是docker...的: https://hub.docker.com/r/dockervhf/d8 [+] 我没有尝试过docker... 所以不太i清楚有效性. 但是如果你会的话, ...
tql
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
malokch 2 2019-7-30 11:44
17
0
我少给点内存你就可以下单买女装了
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2019-7-30 12:20
18
0
Tennn 编译之后压缩完也就100多mb把。。。。 我有好几个版本得。。。

100M的是release版本
图片描述
图片描述
这还只是out.gn里面的文件夹,你要源码调试的话还得把整个repo打包

雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2019-7-30 12:21
19
0
malokch 我少给点内存你就可以下单买女装了
那你这个不算
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2019-7-30 12:23
20
0
ssarg holing 分享给你也没用,切commit之后还是得重新编,况且这一共好几个G怎么发,不要伸手 1、自己编译老是出错,没办法啊。有这么大吗?最好发个新 ...
因为你每次调洞,需要reset到一个特定commit,他不可能把所有commit给你编译发给你,我最多给你个最新版的编译,但是你需要的是某个commit,或者某个commit的特定patch,所以给你又有啥用?
最后于 2019-7-30 12:24 被holing编辑 ,原因:
雪    币: 620
活跃值: (372)
能力值: (RANK:150 )
在线值:
发帖
回帖
粉丝
wjzid 3 2019-7-30 12:48
21
0
师傅. 女装么. 嘤嘤嘤

Hint: You can raise verbosity (-vv) to see the output of failed commands.

Traceback (most recent call last):
  File "tools/dev/v8gen.py", line 304, in <module>
    sys.exit(gen.main())
  File "tools/dev/v8gen.py", line 298, in main
    return self._options.func()
  File "tools/dev/v8gen.py", line 166, in cmd_gen
    gn_outdir,
  File "tools/dev/v8gen.py", line 208, in _call_cmd
    stderr=subprocess.STDOUT,
  File "/usr/lib/python2.7/subprocess.py", line 223, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['/usr/bin/python', '-u', 'tools/mb/mb.py', 'gen', '-f', 'infra/mb/mb_config.pyl', '-m', 'developer_default', '-b', 'x64.debug', 'out.gn/x64.debug']' returned non-zero exit status 1
雪    币: 620
活跃值: (372)
能力值: (RANK:150 )
在线值:
发帖
回帖
粉丝
wjzid 3 2019-7-30 13:28
22
0
[+] 给师傅填个小坑.

NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.

这一句的话.

使用下面的4条命令:

> vim ~/set_proxy.boto

输入:
[Boto]
export http_proxy="http://192.168.29.1:1080"
export https_proxy=$http_proxy

> 接着设置变量: export NO_AUTH_BOTO_CONFIG=~/set_proxy.boto

> bash
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2019-7-30 13:57
23
0
wjllz 师傅. 女装么. 嘤嘤嘤 Hint: You can raise verbosity (-vv) to see the output of failed commands. Traceba ...
这个改boto可以解决,所以不算
雪    币: 230
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
雨落惊鸿 2019-7-30 15:17
24
0
谢谢楼主的分享,文章思路很清晰
雪    币: 164
活跃值: (236)
能力值: ( LV12,RANK:583 )
在线值:
发帖
回帖
粉丝
skytar 1 2019-7-30 16:36
25
0
你遇到的问题我基本也都遇到了,其中图片中给的问题是没有安装pkg-config导致,所以安装一下就行。还有clang会爆炸是因为swap空间不足,需要将swap改大点。
最后于 2019-7-30 16:36 被skytar编辑 ,原因:
游客
登录 | 注册 方可回帖
返回