Архив статей журнала
В настоящее время ключевую роль в разработке программного обеспечения играет программная инженерия, одним из критерия развитости которой является изучение ее фактологии и различных научно-практических закономерностей. Важным аспектом данной области является логика выполнения программ, оперирующая внутренними данными, и, в частности – константными значениями, выявление закономерностей в которых и актуализирует данное исследование. В качестве основных применений данной закономерности можно отметить такие, как получение фундаментальных знаний об алгоритмах, создание новых и расширение существующих метрик оценки и сравнения программного кода, развитие методов его оптимизации, применение в генетическом программировании и др.
Целью настоящей статьи получение частотного распределения константных значений в исходном коде программ на языке программирования C. Сущность представленного подхода заключается в создании метода статистического анализа текста исходных кодов программ, содержащихся в датасете ExeBench (который состоит из огромного количества исходного кода функций на языке программирования C, их ассемблерного кода для различных процессорных архитектур, ошибок компиляции и другой информации). Предложенный метод базируется на применении алгоритмов лексического и синтаксического разбора функций исходного кода, семантического определения типов констант, преобразования записи символов языка программирования в соответствующие числовые или строковые значения.
Метод имеет реализацию в виде программного средства на языке программирования Python, приведенного в виде интуитивно понятного псевдокода. Эксперименты с применением данного прототипа позволили получить искомое распределение константных значений для исходного кода программ на языке программирования C. Анализ полученных результатов позволил сделать ряд важных теоретико-практических выводов касательно наиболее часто используемых констант, соответствия полученного распределения закону Ципфа и близость к показательной функции, аномального появления ряда констант в Топ-50 и др. Научная новизна предложенного подхода заключается в том, что распределение константных значений для исходного кода программ на языке программирования C получено впервые.
Теоретическая значимость состоит в получении новых фундаментальных знаний касательно особенностей и закономерностей конструкций исходного кода, которые могут быть расширены и на другие языки программирования.
Практическая значимость заключается в применении распределения для большого спектра задач, включая авторский генетический реверс-инжиниринг, который сам по себе является качественно новым направлением.
Актуальность темы обосновывается отсутствием методологии реверс-инжиниринга программного обеспечения, необходимой для разрешения следующего научного противоречия области (как противопоставления потребности vs возможности): с одной стороны поиск уязвимостей наиболее эффективен в тех представлениях программы, в которых они были внедрены (например, исходный код, алгоритмы или архитектура); с другой стороны, для анализа имеется, как правило, лишь машинный код, слабо подходящий для выявления высокоуровневых уязвимостей (т. е. из более ранних представлений). Созданию составляющих данной методологии (концепции, модели, метода, алгоритмов, метрики, а также их реализаций) и посвящено основное авторское исследование, заключительный этап которого приводится в статье.
Целью настоящей статьи является обсуждение 25 проблемных вопросов (так называемая научная дискуссия), возникших в основном исследовании, посвященном развитию направления реверс-инжиниринга программного обеспечения на базе генетических алгоритмов. Основным применением результатов исследования является как получение представления программы, подходящего для экспертного (и иного) анализа на предмет наличия в нем уязвимостей, так и их непосредственный поиск встроенным сигнатурным методом. При этом разрешение даже части вопросов позволит существенно повысить эффективность такого генетического реверс-инжиниринга.
В работе использованы следующие методы: анализ результатов основного исследования для выделения проблемных вопросов, синтез путей их разрешения, а также систематизация и балльное сравнение вопросов с позиции путей устранения для общей оценки завершенности научной работы. Детальное изучение причин возникновения каждого из вопросов позволило определить пути их разрешения, реализуемость которых обосновывает и результаты основного исследования. В частности, проблемные вопросы базируются как на отсутствии одних теоретических инструментов, необходимых для генетического реверс-инжиниринга, так и на недостаточной практической эффективности других.
Научная новизна проблемных вопросов заключается в том, что практически каждый из них озвучен впервые.
Теоретическая значимость: развитие каждого проблемного вопроса может как открыть отдельное научное исследование (или даже направление), так и получить новые значимые результаты.
Практическая значимость заключается в возможности создания программных решений по разрешению выявленных вопросов, которые могут быть также применены и для смежных задач.