This post is also available in: Английский
После месяца разработки доступны следующие важные новые возможности:
- Восстановление прототипов функций из бинарного кода без какой-либо дополнительной информации;
- Создание SDK для написание тестов для бинарного модуля;
- Загрузка тестов в адресное пространство изучаемой программы и ее запуск ( после этого программа продолжает работу в обычном режиме ).
Таким образом, версия Dataflow-0.2.0 может использоваться для организации in memory fuzzing.
Скачать утилиту, посмотреть экранные снимки и историю изменений можно на странице проекта, частью которого утилита и является. Для тех кто скачал, но не знает с чего начать (даже после прочтения readme) есть Пример использования dataflow. Более продвинутые новые особенности описаны в Пример использования dataflow. Часть 2. Любые пожелания, критика и багрепорты приветствуются.
>> 1.Восстановление прототипов функций из бинарного кода без какой-либо дополнительной информации;
Какие ограничения на прототип функции?
Т.е. возможно ли, например, восстановление прототипа функции с переменным количеством аргументов?
P.S. При отправке ответа (комментария) в этом блоге: «Имя (_r_обязательно)»
Ограничения разумеется есть. Они следующие:
1. Типы параметров не восстанавливаются. Т.е. фактически восстанавливается их количество и способ вызова функции. Все параметры считаются int, что на низком уровне верно — значения, указатели на структуры и т.д. передаются двойное слово.
2. Еще есть не то что бы ограничение, скорее недочет. Существует случаи, когда параметр определяется, если он передается через регистр и этот регистр используется не сразу, а сначала помещается на стек и через некоторое время изымается и используется.
Та часть функции, которая имеет переменное количество параметров будет рассматриваться как один параметр.
>> P.S. При отправке ответа (комментария) в этом блоге: «Имя (_r_обязательно)»
Если честно, не понял о чем Вы 😉
>>Если честно, не понял о чем Вы
Я о том, что вместо обязательно, написано «rобязательно» — английская буква «r» дописана перед словом
Спасибо. Поправлю.
И еще — а если параметр — число с плавающей запятой — он может быть больше размера int…