[#] Теория и практика парсинга исходников с помощью ANTLR и Roslyn
habrabot(difrex,1) — All
2016-03-03 19:00:05


В нашем проекте [PT Application Inspector][1] реализовано несколько подходов к анализу исходного кода на различных языках программирования:

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

Наш цикл статей посвящен структуре и принципам работы модуля сигнатурного поиска (PM, pattern matching). Преимущества такого анализатора — скорость работы, простота описания шаблонов и масштабируемость на другие языки. Среди недостатков можно выделить то, что модуль не в состоянии анализировать сложные уязвимости, требующие построения высокоуровневых моделей выполнения кода. [![][2]][3] К разрабатываемому модулю были, в числе прочих, сформулированы следующие требования:

* поддержка нескольких языков программирования и простое добавление новых;
* поддержка анализа кода, содержащего синтаксические и семантические ошибки;
* возможность описания шаблонов на универсальном языке (DSL, domain specific language).

В нашем случае все шаблоны описывают какие-либо уязвимости или недостатки в исходном коде. Весь процесс анализа кода может быть разбит на следующие этапы:

1. парсинг в зависимое от языка представление (abstract syntax tree, AST);
2. преобразование AST в независимый от языка унифицированный формат;
3. непосредственное сопоставление с шаблонами, описанными на DSL.

Данная статья посвящена первому этапу, а именно: парсингу, сравнению функциональных возможностей и особенностей различных парсеров, применению теории на практике на примере грамматик Java, PHP, PLSQL, TSQL и даже C#. Остальные этапы будут рассмотрены в следующих публикациях. [Читать дальше →][4]

[1]: http://www.ptsecurity.ru/appsecurity/application-inspector/
[2]: https://habrastorage.org/files/879/56c/123/87956c123b5248f58393586831153cd4.png
[3]: https://habrahabr.ru/post/210772/
[4]: https://habrahabr.ru/post/210772/#habracut