@@ -96,4 +96,40 @@ dump memory mem.40000000 0x40000000 0x40020000
96
96
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
97
97
```
98
98
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
+
99
135
0 commit comments