Build
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=`pwd`/depot_tools:"$PATH"
fetch v8
cd v8
git checkout [commit]
gclient sync
build/install-build-deps.sh # only Linux
tools/dev/gm.py x64.debug
OR
tools/dev/v8gen.py x64.debug #generate build option template
ninja -C out.gn/x64.debug #build
깔끔한 버전
pwn@ubuntu:~$ fetch v8
pwn@ubuntu:~$ cd v8
pwn@ubuntu:~/v8$ ./build/install-build-deps.sh # Assumes you're using apt
pwn@ubuntu:~/v8$ git checkout 6dc88c191f5ecc5389dc26efa3ca0907faef3598
pwn@ubuntu:~/v8$ gclient sync
pwn@ubuntu:~/v8$ git apply ../oob.diff
pwn@ubuntu:~/v8$ ./tools/dev/v8gen.py x64.release
pwn@ubuntu:~/v8$ ninja -C ./out.gn/x64.release # Release version
pwn@ubuntu:~/v8$ ./tools/dev/v8gen.py x64.debug
tools/dev/v8gen.py x64.debug -- v8_enable_slow_dchecks=false v8_enable_backtrace=true
pwn@ubuntu:~/v8$ ninja -C ./out.gn/x64.debug # Debug version
depot_tools를 git으로 받고 환경 변수 추가 후 fetch
버전에 맞게 git checkout 하고 sync해준다. (환경변수 export 한거 해제 되지 않았는지 확인)
Linux의 경우 install.sh로 dependency를 맞추어 주면 된다.
gm.py로 빌드를 바로 할 수있고 relase나 debug 를 빌드할 수 있다.
다만 build option을 주고 싶다면 v8gen.py로 빌드 해주어야한다.
build option을 주는 대표적인 경우는 DCHECK를 제거할 때인데, POC를 trigger하려고 해도 DCHECK에서 막혀 abort()가 SIGILL을 발생시키는 경우가 있다.
relase로 빌드해도 되지만 debugging function을 쓰고 싶은 경우가 있을 수 도 있으니 다음 옵션을 추가해주자.
v8_enable_slow_dchecks=false
./d8 --allow-natives-syntax
debugging function을 쓰기 위해서는 실행 옵션을 다음과 같이 주어야한다.
v8/tools에 보면 gdb-v8-support.py과 gdbinit 같은 gdb에 쓸 수 있는 모듈이 있다.
이걸 이용해야 "job" command를 쓸 수 있다.
Error
sudo apt-get install ninja-build
apt로 설치하자
참고 문헌
'0x00 공부 > Browser' 카테고리의 다른 글
Faith CTF 2019 oob-v8 (0) | 2023.03.21 |
---|---|
v8 exploit tech - addrof, fakeobj (0) | 2023.03.20 |
Web Assembly in V8 동작 및 취약점 1 (0) | 2023.03.19 |
JavaScript engine basic2 (0) | 2023.03.12 |
JavaScript engine basic1 (0) | 2023.03.12 |