Abstract

A method is developed for assessing the practical persistence of obfuscating transformations of programs based on the calculation of the similarity index for the original, obfuscated and deobfuscated programs. Candidates are proposed for similarity indices, which are based on such program characteristics as the control flow graph, symbolic execution time and degree of coverage for symbolic execution. The control flow graph is considered as the basis for building other candidates for program similarity indicators. On its basis, a new candidate is proposed for the similarity index, which, when calculated, finds the Hamming distance between the adjacency matrices of control flow graphs of compared programs. A scheme for estimating (analyzing) the persistence of obfuscating transformations is constructed, according to which for the original, obfuscated and deobfuscated programs, the characteristics of these programs are calculated and compared in accordance with the chosen comparison model. The developed scheme, in particular, is suitable for comparing programs based on similarity indices. This paper develops and implements one of the key units of the constructed scheme - a block for obtaining program characteristics compiled for the x86/x86 64 architecture. The developed unit allow to find the control flow graph, the time for symbolic execution and the degree of coverage for symbolic execution. Some results of work of the constructed block are given.

Highlights

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

  • В настоящей работе для сравнения графов потока управления программ P1 и P2 предлагается использовать утилиту BinDiff, в которой реализован алгоритм сопоставления вершин из [30]

  • V., "On the Automatic Analysis of the Practical Resistance of Obfusting Transformations", Modeling and Analysis of Information Systems, 26:3 (2019), 317–331

Read more

Summary

Обфускация в программной инженерии

В настоящее время исследование в области обфускации ведется по двум направлениям: 1) применение обфускации в криптографии и 2) обфускация в программной инженерии и компьютерной безопасности [5]. Можно выделить следующие уровни обфускации программного кода: уровень исходного кода (C/C++/Java/JavaScript и т.п.), уровень промежуточного кода (бит код LLVM) и уровень целевого исполняемого кода (байт-код Java и WebAssembly, машинный код для архитектуры Intel x86/x86_64 и т.п.). Здесь и далее под уровнем целевого исполняемого кода понимается уровень, на котором непосредственно выполняются инструкции кода; в качестве интерпретатора на таком уровне могут выступать, например, процессор архитектуры Intel x86/x86_64 или виртуальная Java-машина. На каждом из этих уровней могут применяться как специфичные для каждого уровня способы обфускации (например, шифрование константных строк, замена имен переменных, добавление избыточных инструкций, добавление непрозрачных предикатов, перестановка базовых блоков), так и общие для всех уровней способы (например, замена набора инструкций эквивалентным по функциональности набором инструкций, вставка мертвого кода)

Автоматическая деобфускация
Информационно-аналитическая модель
Способ оценки стойкости
Похожесть графов потока управления
Похожесть при символьном исполнении
О построении новых показателей похожести
Схема на основе сравнения характеристик
Нахождение характеристик символьного исполнения
Full Text
Paper version not known

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call

Disclaimer: All third-party content on this website/platform is and will remain the property of their respective owners and is provided on "as is" basis without any warranties, express or implied. Use of third-party content does not indicate any affiliation, sponsorship with or endorsement by them. Any references to third-party content is to identify the corresponding services and shall be considered fair use under The CopyrightLaw.