Comments (13)
from futag.
Ага... Вот оно как... Наверное это не плохой метод.
А это отражено в документации? Если нет, то надо бы отразить, а то мы всю голову себе сломали...
И отдельный вопрос, а что будет если эта эвристика ложно сработает? У нас есть шанс об этом узнать?
from futag.
Задавайте gdb=True в инициализации модуля fuzzer.
Кстати, выложу здесь причины ложных срабатываний:
from futag.
К стати, для той функции из за которой все началось по результатам переполнение оказалось совершенно по другой причине: она предполагала результирующий буфер фиксированной длинны, и падала когда передавали указатель указывающий на что-то более короткое...
Это наверное тоже в тему хинтов... Чтобы не цель выключать, а генерацию поправить...
from futag.
В коментарии приглашается @CourteousSleet....
from futag.
Поддерживаю запрос
from futag.
Согласен, это будет полезная фича!
from futag.
Я тут заметил, что похоже FUTAG умеет определять, какие должны быть аргументы?
//GEN_CSTRING1
char * rstr_salt = (char *) malloc((dyn_cstring_size[1] + 1)* sizeof(char));
memset(rstr_salt, 0, dyn_cstring_size[1] + 1);
memcpy(rstr_salt, futag_pos, dyn_cstring_size[1]);
futag_pos += dyn_cstring_size[1];
const char * str_salt = rstr_salt;
//GEN_SIZE
int sz_saltlen = (int) dyn_cstring_size[1];
В нашем случае функция принимает str_salt - buf и sz_saltlen - len. И как я проверил в дебаге, они всегда соответствовали друг другу, что понятно, раз они используют dyn_cstring_size[1]. Но в документации я не видел описание такого функционала. Если это всегда работает безотказно, то это очень удобно.
from futag.
Знаем только после генерации. Поэтому хинт - хорошее предложение.
Придется подумать как это будет. Хинт по названию переменных (buf, len, buffer, length...) или по последовательности типов.
Кстати, при аварийному завершению всегда надо проверить по какой причине. Futag умеет автоматический выгрузить крэш в GDB и генерирует трассу, записывает значения и т.д.
from futag.
А какой метод это делает?
from futag.
Придется подумать как это будет. Хинт по названию переменных (buf, len, buffer, length...) или по последовательности типов.
Тут с моей точки зрения нужно явное указание пар Функция A аргументы a1 и a2 -- пара буфер-длинна. аргументы a3 и a4 -- независимые, и их автоматическое объединение в пару надо отключить...
Раз есть автоматика находящая пары, значит должна быть возможность отключать ее для конкретных случаев, когда она не уместна...
from futag.
Ребята, я вернулся на родину, пока не могу активно заниматься Futag-ом. Попробуйте все функции, параметры Futag-а и если будет возможность, опишите пожалуйста конкретно что надо делать. Спасибо!
from futag.
Конкретно: принимать футагом перед генерацией целей некоторый hint-файл в текстовом формате (json? yaml?), который бы менял поведение futag'а при автоопределении стратегии создания оберток для аргументов.
В хинт файле указывается имя файла исходных текстов, имя функции, а дальше для каждого аргумента (или пары аргументов )можно было бы указать следующее:
- Пара аргументов char * a1, unsigned int a2, являются парой буфер, длинна, даже если не срабатывает автодетектор таких пар
- Пара аргуметнов char * str, size_t item_count не являются парой буфер длинна, даже если детектор говорит иначе
- Аргумент char * buf -- является буфером фиксированной длинны (размер буфера явно указывается в hint-файле), футаг не создает аргумент указывающий на область памяти меньшей чем указано в хинт-файле...
Возможно в будущем появятся какие-то еще кейсы. Это пока то на что мы наткнулись и что в процессе стало очевидно...
from futag.
Related Issues (20)
- При выборе типа цели AFLPLUSPLUS получаю ошибки компиляции HOT 4
- При попытке направить FUTAG на расширение для Postgres получаю следующие ошибки HOT 8
- При построении покрытия по цели FUTAG genhtml идёт по несуществующему пути. HOT 3
- Генерация обёрток для функций содержащих char*& HOT 1
- Ошибка выбора компилятора для обёрток при анализе интерпретатора LUA
- Добавить возможность подключения к сборке исходных файлов
- Ошибка при добавлении флагов. HOT 1
- Ошибка выполнения в последнем релизе HOT 1
- FUTAG и расширения для PostgreSQL
- Ошибка при сборке на Debian 11 HOT 6
- Нейминг целей. HOT 2
- Автоматическая генерация standalone примеров для передачи разработчикам HOT 5
- Расширение PostgreSQL pg_probackup и FUTAG.
- Более расширенная диагностика при отсутсвии AFL++ HOT 3
- Сборка с покрытием и без санитайзеров. HOT 1
- Управление Futag без питона HOT 2
- Таймаут генерации обёрток HOT 2
- Ошибка "[Futag]: Incorrect path to FUTAG llvm package" HOT 3
- Генерируются слишком сложные фаззинг обертки
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from futag.