
LLDB, GDB, VDB 및 WinDbg용 레지스터, 디스어셈블리, 스택, 메모리, 중단점 및 역추적 뷰를 제공하는 확장 가능한 디버거 UI 툴킷.
Voltron은 Python으로 작성된 확장 가능한 디버거 UI 툴킷입니다. 다양한 디버거(LLDB, GDB, VDB, WinDbg)에 유틸리티 뷰를 연결하여 디버거 호스트에서 데이터를 검색하고 표시할 수 있도록 함으로써 사용자 경험을 향상시키는 것을 목표로 합니다. 이러한 뷰를 다른 TTY에서 실행하면 필요에 맞게 맞춤형 디버거 사용자 인터페이스를 구축할 수 있습니다.
Voltron은 모든 사람을 위한 만능 도구가 아닙니다. 디버거의 CLI를 완전히 대체하는 것이 아닙니다. 대신 기존 설정을 보완하고 CLI 디버거를 원하는 만큼 확장할 수 있도록 하는 것을 목표로 합니다. 디버거 옆에 있는 창에 레지스터 내용만 표시되는 뷰를 원한다면 그렇게 할 수 있습니다. OllyDbg처럼 보이도록 최대한 꾸미고 싶다면 그렇게 할 수도 있습니다.
기본 제공 뷰는 다음과 같습니다:
저자의 설정은 대략 다음과 같습니다:
모든 디버거 명령어를 뷰로 분할하고 지정된 Pygments 렉서로 하이라이트할 수 있습니다:
더 많은 스크린샷은 여기에서 확인할 수 있습니다.
Voltron은 LLDB, GDB, VDB, WinDbg/CDB(PyKD를 통해)를 지원하며 macOS, Linux, Windows에서 실행됩니다.
WinDbg 지원은 아직 상당히 새로운 기능이므로 문제가 발생하면 이슈를 열어주세요.
다음 아키텍처가 지원됩니다:
참고: 설치 스크립트는 macOS와 Debian 계열만 완전히 지원합니다. 다른 Linux 배포판에서는 실패하지 않을 것으로 예상되지만 패키지 종속성을 설치하려고 시도하지는 않습니다. 다른 배포판을 사용하는 경우 install.sh를 살펴보고 실행하기 전에 설치해야 할 종속성을 확인하세요.
소스를 다운로드하고 설치 스크립트를 실행합니다:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
기본적으로 설치 스크립트는 사용자의 site-packages 디렉토리에 설치합니다. 시스템 site-packages에 설치하려면 -s 플래그를 사용하세요:
$ ./install.sh -s
가상 환경에 설치할 수도 있습니다(LLDB 전용). 다음과 같이:
$ ./install.sh -v /path/to/venv -b lldb
Windows에서 셸이 없거나 설치에 문제가 있거나 수동으로 설치하려는 경우 수동 설치 문서를 참조하세요.
디버거에 init 스크립트(LLDB의 경우 .lldbinit, GDB의 경우 .gdbinit)가 있는 경우 시작 시 Voltron을 로드하도록 구성합니다. entry.py 진입점 스크립트를 소싱하면 됩니다. 전체 경로는 voltron 패키지 내에 있습니다. 예를 들어 macOS에서는 /Library/Python/2.7/site-packages/voltron/entry.py일 수 있습니다. install.sh 스크립트는 GDB 또는 LLDB가 경로에 있는 경우 이를 자동으로 .gdbinit 또는 .lldbinit 파일에 추가합니다.
LLDB:
command script import /path/to/voltron/entry.py
GDB:
source /path/to/voltron/entry.py
디버거를 시작하고 필요한 경우 수동으로 Voltron을 초기화합니다.
최신 LLDB 버전에서는 수동으로 Voltron을 초기화할 필요가 없습니다:
$ lldb target_binary
이전 LLDB 버전에서는 인퍼리어를 로드한 후 voltron init을 호출해야 합니다:
$ lldb target_binary
(lldb) voltron init
github의 위키를 참조하세요.
Q. Voltron을 로드할 때 ImportError가 발생하는 이유는 무엇인가요?
A. 여러 버전의 Python이 설치되어 있고 잘못된 버전을 사용하여 Voltron을 설치했을 수 있습니다. 더 자세한 설치 지침을 참조하세요.
Q. GEF? PEDA? PwnDbg? fG의 gdbinit?
A. 이들은 모두 GDB를 위한 훌륭한 확장입니다. 이러한 도구는 주로 익스플로잇 작업을 위한 추가 명령 세트를 제공하지만, 각각 Voltron과 유사한 레지스터, 스택, 코드 등의 뷰를 제공하는 "컨텍스트" 디스플레이도 있습니다. 이 도구들은 디버거가 중지될 때마다 디버거 콘솔에 컨텍스트 디스플레이를 출력합니다. Voltron은 디버거에 RPC 서버 임플란트를 내장하고 다른 터미널(또는 웹 브라우저, 지금은 Binary Ninja와 동기화)에서 뷰를 연결할 수 있도록 하는 다른 접근 방식을 취하여 사용자가 디버거에 더 깔끔한 다중 창 인터페이스를 구축할 수 있도록 합니다. Voltron은 이러한 모든 도구와 함께 잘 작동합니다. 원하는 GDB 확장에서 컨텍스트 디스플레이를 비활성화하고 일부 Voltron 뷰를 연결하기만 하면 이러한 도구가 추가하는 유용한 명령의 이점을 계속 누릴 수 있습니다.
자세한 내용이나 이슈 제출은 github의 이슈 트래커를 참조하세요.
Voltron을 로드할 때 ImportError가 발생하는 경우 플랫폼에 맞는 설치 지침을 따랐는지 확인하세요.
이전 LLDB 버전에서는 디버그 대상을 로드한 후 voltron init 명령을 수동으로 실행해야 합니다. Voltron의 후크를 설치하려면 대상이 먼저 로드되어야 하기 때문입니다. Voltron은 이벤트 핸들러를 자동으로 등록하려고 시도하며, voltron init이 필요한 경우 사용자에게 알립니다.
WinDbg/CDB 지원에 대한 자세한 정보는 여기에 있습니다.
저자는 주로 macOS의 최신 LLDB 버전에서 Voltron을 사용합니다. 릴리스 전에 가능한 한 많은 플랫폼과 아키텍처에서 모든 것을 테스트하려고 노력하지만, LLDB/macOS/x64가 가장 자주 사용되는 조합이 될 것입니다. Voltron이 애완동물에 불을 지르지는 않기를 바라지만, 결과는 다를 수 있습니다.
LICENSE 파일을 참조하세요.
이 도구를 사용하고 싫어하지 않는다면, 컨퍼런스에서 저에게 맥주 한 잔 사주세요. 이 라이선스는 다른 기여자에게도 적용됩니다. richo는 그의 기여에 대해 확실히 몇 잔의 맥주를 받을 자격이 있습니다.
이 작업에 시간을 할애할 수 있게 해준 이전 고용주 Assurance와 Azimuth Security에게 감사드립니다.
Voltron에 기여해준 richo에게 경의를 표합니다.
fG!의 gdbinit은 이 프로젝트의 원래 영감이었습니다.
VDB 지원을 구현해준 Willi에게 감사드립니다.
Voltron은 이제 디스어셈블리를 위해 디버거 호스트의 내부 디스어셈블리 메커니즘뿐만 아니라 Capstone도 사용합니다. Capstone은 강력한 오픈 소스 다중 아키텍처 디스어셈블러로, 차세대 리버스 엔지니어링 및 디버깅 도구가 구축되고 있습니다. 확인해보세요.
지속적인 기여에 대해 grazfather에게 감사드립니다.
| lldb | gdb | vdb | windbg |
|---|
| x86 | ✓ | ✓ | ✓ | ✓ |
| x86_64 | ✓ | ✓ | ✓ | ✓ |
| arm | ✓ | ✓ | ✓ | ✗ |
| arm64 | ✓ | ✗ | ✗ | ✗ |
| powerpc | ✗ | ✓ | ✗ | ✗ |
GDB:
$ gdb target_binary
VDB:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB는 Linux 사용자 공간이 있는 Bash를 통해서만 지원됩니다. 저자는 Git Bash 및 ConEmu로 테스트합니다. PyKD와 Voltron은 디버거를 시작할 때 하나의 명령으로 로드할 수 있습니다:
$ cdb -c '.load C:\path\to\pykd.pyd ; !py --global C:\path\to\voltron\entry.py' target_binary
다른 터미널(iTerm 창을 사용합니다)에서 UI 뷰 중 하나를 시작합니다. LLDB, WinDbg 및 GDB에서는 뷰가 즉시 업데이트됩니다. VDB에서는 인퍼리어가 중지될 때(브레이크포인트, 스텝 후 등)까지 업데이트되지 않습니다:
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
브레이크포인트를 설정하고 인퍼리어를 실행합니다.
(*db) b main
(*db) run
디버거가 브레이크포인트에 도달하면 뷰가 현재 레지스터, 스택, 메모리 등의 상태를 반영하도록 업데이트됩니다. 뷰는 디버거 CLI에서 각 명령이 실행된 후 디버거의 "중지 후크" 메커니즘을 사용하여 업데이트됩니다. 따라서 스텝을 밟거나 계속 실행하다가 브레이크포인트에 도달할 때마다 뷰가 업데이트됩니다.