Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Автоматическая генерация standalone примеров для передачи разработчикам #87

Open
nataraj-hates-MS-for-stealing-github opened this issue Oct 23, 2023 · 5 comments

Comments

@nataraj-hates-MS-for-stealing-github

Начали прогонять FUTAG на большом объеме целей, и обнаружили такое явление: Найденный креш существует в виде сэмпла и достаточно трудночитаемого кода сгенеренного FUTAG'ом... Передавать проблему разработчикам в таком виде крайне не желательно (разработчики и так не рады тому что их отвлекают, а когда им дают непонятную фигню, так не рады будут совсем).

Для того чтобы передать срабатывание разработчикам, приходится дебагом заходить в исследуемую функцию, смотреть какие именно значения аргументов были переданы при падении, оформлять эти значения в виде констант, и вызывать все вручную.

Для функции:

void
scram_SaltedPassword(const char *password,
                     const char *salt, int saltlen, int iterations,
                     uint8 *result)

Должно поучиться что-то вроде

int main()
{
  uint8 res;
  const char[] arg1 = "12345";
  const char[] arg2 = {17, 18, 19};

  scram_SaltedPassword(arg1, arg2, 4, 9, &res);
}

Достаточно нудная и однообразная работа. С моей точки зрения это можно в определенной мере автоматизировать...
На основаниии заданного сэмпла сгенерировать обертку в которой сэмпл будет разложен по константам в явном виде.

Это уже будет не стыдно передавать разработчикам.

@nataraj-hates-MS-for-stealing-github

ping @CourteousSleet

@thientc
Copy link
Collaborator

thientc commented Oct 23, 2023

Если запускаете модуль fuzzer.fuzz() с опцией svres=True, то можно посмотреть в SVACE-анализаторе место, в котором завершает аварию и соответственно значения всех переменных в этом фрейме.
После получения файла svres нужно выгрузить в проект SVACE.
Попробуйте, если что я постараюсь делать скриншот.

@nataraj-hates-MS-for-stealing-github

Если честно, то я не работаю со savce'ом и мне эта информация ничем не поможет.

@CourteousSleet, тебе это о чем-то говорит? Мы это как-то можем использовать?

И даже если мы получим значения переменных через свейс (а у тех кто занимается фаззингом свейса считай что нет) это все равно будет требовать дальнейшей ручной работы по копированию значений. Потому что разработчикам, которым этот кейс будет передан, ничего не известно ни про свейс ни про футаг, им нужен пример демонстрирующий проблему.

При этом, с учетом того что у тебя есть уже распаршенная информация об аргументах и том как сэмпл по этим аргументам раскладывается, не вижу ничего невозможного в том, чтобы автоматически создать константы с нужными значениями...

@CourteousSleet
Copy link

@nataraj-hates-MS-for-stealing-github так как я также со Svace не работаю, то согласен с первоначальной идей без него

@thientc
Copy link
Collaborator

thientc commented Oct 23, 2023

По сути дела, все значения переменных в точке аварийного совершения записываются в xml-файле (с расширением.svres), и с помощью Свейса можно следовать трассу по коду.
Я посмотрю как лучше без Свейса, или предложите как удобно будет!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants