Ревнивых А.В., Велижанин А.С. —
Методика автоматизированного формирования структуры дизассемблированного листинга
// Кибернетика и программирование. – 2019. – № 2.
– С. 1 - 16.
DOI: 10.25136/2644-5522.2019.2.28272
URL: https://e-notabene.ru/kp/article_28272.html
Читать статью
Аннотация: Предмет исследования – методика разбиения дизассемблированного кода на логические блоки в автоматическом режиме, поиск уязвимостей программного обеспечения без использования исходного кода (с использованием бинарного файла либо его эквивалента, полученного реверс-инжинирингом).
Объектом исследования являются существующие анализаторы кода и особенности их функционала.
Целью исследования является рассмотреть возможность разбиения дизассемблированного кода на логические блоки в автоматическом режиме и некоторые связанные с этим возможные сложности.
Постановка проблемы. Сложность анализа больших программных продуктов на уровне машинного кода обуславливает необходимость автоматизации данного процесса. Методология исследования основана на сочетании теоретического и эмпирического подходов с применением методов статического и динамического анализа, сравнения, обобщения, алгоритмизации, моделировании, синтеза. Ключевые выводы. Разбиение кода на блоки путем последовательного в режиме «строчка за строчкой» анализа машинного кода в некоторых случаях может привести к неверной интерпретации. Кроме того, анализ кода согласно выводам функций так же не гарантирует правильности определения границ функций. Однако в целом матричный метод может быть применен для анализа зависимостей функций по выделенным таким образом блокам кода.
Научная новизна связана с определением автором перспективных векторов исследования программного кода на уязвимости, обоснованием подхода (построение матрицы переходов из целочисленных значений), который может являться начальной стадией подготовки к автоматизированному анализу дизассемблированного кода.
Abstract: The subject of the research is the method of splitting a disassembled code into logical blocks in automatic mode, searching for software vulnerabilities without using source code (using a binary file or its equivalent, obtained by reverse engineering).The object of the research is the existing code analyzers and features of their functionality.The aim of the study is to consider the possibility of splitting a disassembled code into logical blocks in automatic mode and some of the possible difficulties associated with this.Formulation of the problem. The complexity of analyzing large software products at the level of machine code necessitates the automation of this process. The research methodology is based on a combination of theoretical and empirical approaches using the methods of static and dynamic analysis, comparison, generalization, algorithmization, modeling, synthesis. Key findings. Splitting the code into blocks by sequential in line-by-line analysis of machine code in some cases can lead to misinterpretation. In addition, the analysis of the code according to the conclusions of the functions also does not guarantee the correctness of the determination of the boundaries of the functions. However, in general, the matrix method can be applied to analyze the dependencies of functions on the blocks of code thus selected.The scientific novelty is connected with the determination of promising vectors for the study of software code for vulnerability, the rationale for the approach (building the transition matrix from integer values), which may be the initial stage of preparation for the automated analysis of the disassembled code.
Ревнивых А.В., Велижанин А.С. —
Метод автоматизированного исследования структуры дизассемблированного представления программного кода с уязвимостью на переполнение буфера с использованием матричного подхода
// Кибернетика и программирование. – 2018. – № 6.
– С. 11 - 30.
DOI: 10.25136/2644-5522.2018.6.28288
URL: https://e-notabene.ru/kp/article_28288.html
Читать статью
Аннотация: Предметом исследования являются алгоритмы оптимизации автоматизированного поиска зависимостей на дизассемблированном коде. Объектом исследования выступают зависимые блоки кода на х64 архитектуре процессоров производства корпорации «Intel» и листинги, полученные в результате реверс-инжиниринга программного обеспечения компиляторами с различными настройками в Windows и Linux.
Цель исследования. Целью исследования является рассмотреть возможность использования математических матриц для построения карты машинного кода, а также сделать обзор возможных проблем для автоматического анализа, совершить поиск путей следования информационных потоков. Методы исследования. В работе использовался компилятор Visual C++. Рассматривается архитектура, в которой передача информации может быть осуществлена способами: регистр-память, память-регистр, регистр-регистр. Для анализа был избран метод формирования списка функций, вызываемых до исследуемого потенциально опасного блока кода, сформированный для каждого рассматриваемого пути к исследуемому блоку. Описываются и развиваются методы реализации матричного подхода. Новизна и ключевые выводы. Метод математических матриц может быть использован для построения карты машинного кода. Однако для определения путей достижимости отдельных блоков кода может потребоваться значительное количество ресурсов. Кроме того, машинный код может быть подвергнут воздействию упаковщиков и обфускаторов, что так же вносит дополнительные сложности. Был выделен ряд потенциально опасных функций стандартной библиотеки языка программирования С/С++.
Abstract: The subject of the research is the optimization algorithms for automated dependency search on disassembled code. The object of the research is the dependent code blocks on the x64 architecture of Intel processors manufactured by the company and listings obtained as a result of reverse engineering software by compilers with different settings in Windows and Linux.Purpose of the study. The purpose of the study is to consider the possibility of using mathematical matrices to build a machine code map, and also to review possible problems for automatic analysis, to search for the paths of information flows. Research methods. We used the Visual C ++ compiler. We consider the architecture in which the transfer of information can be carried out in the following ways: register-memory, memory-register, register-register. For the analysis, the method of forming the list of functions called up to the potentially dangerous block of code under investigation, chosen for each considered path to the block under study, was chosen. Methods for implementing the matrix approach are described and developed. Novelty and key findings. Mathematical matrix method can be used to build a machine code map. However, determining the reachability paths of individual code blocks may require a significant amount of resources. In addition, the machine code can be exposed to packers and obfuscators, which also introduces additional complexity. A number of potentially dangerous functions of the standard library of the C / C ++ programming language were identified.