Skip to content

Commit d57b50a

Browse files
authored
UEFI: about coverage show (#55)
1 parent 5e379c3 commit d57b50a

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed
Binary file not shown.

Examples/Crusher/Linux/UEFI/DualEmuInterMod/README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,40 @@ dump memory mem.40000000 0x40000000 0x40020000
9696
rm -rf out; /path/to/crusher/bin_x86-64/fuzz_manager --start 4 --eat-cores 1 --dse-cores 1 -i ./in -o ./out -I dualemu -T dualemu -t 5000 -- ./script.py
9797
```
9898

99+
### Просмотр покрытия кода
100+
101+
Покрытие кода, достигнутое в результате фаззинга, можно посмотреть наглядно.
102+
Инструмент генерирует отчёты о покрытии в формате Lighthouse,
103+
которые можно посмотреть, например, в дизассемблере Ghidra.
104+
105+
Сначала нужно скачать необходимые файлы:
106+
* Дизассемблер Ghidra (версия 11.0.2): https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_11.0.2_build/ghidra_11.0.2_PUBLIC_20240326.zip
107+
* Соответствующий плагин для отображения покрытия: https://github.com/nccgroup/Cartographer/releases/download/v1.0.1/ghidra_11.0.2_Cartographer.zip
108+
109+
Для запуска нужна подходящая версия Java:
110+
```
111+
sudo apt install openjdk-17-jdk openjdk-17-jre
112+
```
113+
114+
Чтобы запустить Ghidra, нужно распаковать архив и запустить `./ghidraRun`.
115+
Чтобы установить плагин, нужно в стартовом окне использовать `File > Install Extensions`
116+
и подать скачанный zip-файл плагина.
117+
118+
Нужно создать проект и импортировать исследуемый бинарный файл (`Shell.debug`).
119+
120+
После работы фаззера отчёты о покрытии находятся в папке `out`:
121+
например, файл `out/EAT_OUT/results/queue/000000/lighthouse`
122+
описывает покрытие при запуске на образце входных данных номер `000000`.
123+
Можно собрать все эти файлы покрытия в одну папку (например, `dir_cov`)
124+
и запустить скрипт для слияния этих файлов в один отчёт:
125+
126+
```
127+
./crusher/bin_x86-64/python-2.7/bin/python ./LighthouseSum.pyc --input ./dir_cov --out ./file.cov --system Linux --select-region 0x48cf5000-0x48d65000 --rename-module Shell.debug --enum-module-table
128+
```
129+
130+
В команде указан диапазон адресов, где в памяти расположен код целевого UEFI-модуля ("Shell").
131+
После этого полученный файл `file.cov` можно загрузить в Ghidra
132+
(в окне дизассемблера: `Tools > Code Coverage > Load Code Coverage File(s)...`).
133+
В результате покрытые фрагменты кода будут раскрашены цветом.
134+
99135

Binary file not shown.

0 commit comments

Comments
 (0)