Code Monkey home page Code Monkey logo

Comments (13)

thientc avatar thientc commented on July 19, 2024 1

from futag.

nataraj-hates-MS-for-stealing-github avatar nataraj-hates-MS-for-stealing-github commented on July 19, 2024 1

Ага... Вот оно как... Наверное это не плохой метод.

А это отражено в документации? Если нет, то надо бы отразить, а то мы всю голову себе сломали...

И отдельный вопрос, а что будет если эта эвристика ложно сработает? У нас есть шанс об этом узнать?

from futag.

thientc avatar thientc commented on July 19, 2024 1

Задавайте gdb=True в инициализации модуля fuzzer.

Кстати, выложу здесь причины ложных срабатываний:
image

from futag.

nataraj-hates-MS-for-stealing-github avatar nataraj-hates-MS-for-stealing-github commented on July 19, 2024 1

К стати, для той функции из за которой все началось по результатам переполнение оказалось совершенно по другой причине: она предполагала результирующий буфер фиксированной длинны, и падала когда передавали указатель указывающий на что-то более короткое...

Это наверное тоже в тему хинтов... Чтобы не цель выключать, а генерацию поправить...

from futag.

nataraj-hates-MS-for-stealing-github avatar nataraj-hates-MS-for-stealing-github commented on July 19, 2024

В коментарии приглашается @CourteousSleet....

from futag.

CourteousSleet avatar CourteousSleet commented on July 19, 2024

Поддерживаю запрос

from futag.

thientc avatar thientc commented on July 19, 2024

Согласен, это будет полезная фича!

from futag.

CourteousSleet avatar CourteousSleet commented on July 19, 2024

Я тут заметил, что похоже 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.

thientc avatar thientc commented on July 19, 2024

Знаем только после генерации. Поэтому хинт - хорошее предложение.
Придется подумать как это будет. Хинт по названию переменных (buf, len, buffer, length...) или по последовательности типов.

Кстати, при аварийному завершению всегда надо проверить по какой причине. Futag умеет автоматический выгрузить крэш в GDB и генерирует трассу, записывает значения и т.д.

from futag.

CourteousSleet avatar CourteousSleet commented on July 19, 2024

А какой метод это делает?

from futag.

nataraj-hates-MS-for-stealing-github avatar nataraj-hates-MS-for-stealing-github commented on July 19, 2024

Придется подумать как это будет. Хинт по названию переменных (buf, len, buffer, length...) или по последовательности типов.

Тут с моей точки зрения нужно явное указание пар Функция A аргументы a1 и a2 -- пара буфер-длинна. аргументы a3 и a4 -- независимые, и их автоматическое объединение в пару надо отключить...

Раз есть автоматика находящая пары, значит должна быть возможность отключать ее для конкретных случаев, когда она не уместна...

from futag.

thientc avatar thientc commented on July 19, 2024

Ребята, я вернулся на родину, пока не могу активно заниматься Futag-ом. Попробуйте все функции, параметры Futag-а и если будет возможность, опишите пожалуйста конкретно что надо делать. Спасибо!

from futag.

nataraj-hates-MS-for-stealing-github avatar nataraj-hates-MS-for-stealing-github commented on July 19, 2024

Конкретно: принимать футагом перед генерацией целей некоторый hint-файл в текстовом формате (json? yaml?), который бы менял поведение futag'а при автоопределении стратегии создания оберток для аргументов.

В хинт файле указывается имя файла исходных текстов, имя функции, а дальше для каждого аргумента (или пары аргументов )можно было бы указать следующее:

  1. Пара аргументов char * a1, unsigned int a2, являются парой буфер, длинна, даже если не срабатывает автодетектор таких пар
  2. Пара аргуметнов char * str, size_t item_count не являются парой буфер длинна, даже если детектор говорит иначе
  3. Аргумент char * buf -- является буфером фиксированной длинны (размер буфера явно указывается в hint-файле), футаг не создает аргумент указывающий на область памяти меньшей чем указано в хинт-файле...

Возможно в будущем появятся какие-то еще кейсы. Это пока то на что мы наткнулись и что в процессе стало очевидно...

from futag.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.