
Запутывает ассемблерный код x86-64 с помощью инъекции инструкций, мусорного кода, обфускации констант и динамической дешифровки, чтобы затруднить реверс-инжиниринг и антианализ.
Продвинутый обфускатор ассемблерного кода x86-64.
Обфускатор ассемблерного кода — это мощный и универсальный инструмент, предназначенный для повышения безопасности вашего ассемблерного кода x86-64. Он защищает ваши проекты от реверс-инжиниринга и анализа, применяя широкий спектр техник обфускации и антианалитических мер.
Внедрение инструкций: Внедряет пользовательские байтовые последовательности перед каждой ассемблерной инструкцией, чтобы запутать дизассемблеры.
Рандомизация: Вносит случайность в структуру кода, делая его менее предсказуемым.
Обнаружение отладчика: Обнаруживает наличие отладчиков во время выполнения кода и применяет антиотладочные меры.
Антианалитические техники: Сбивает с толку инструменты динамического анализа с помощью условных ветвлений и проверок времени.
Динамическое дешифрование: Шифрует и динамически расшифровывает участки кода во время выполнения, повышая сложность.
Динамическая декомпрессия: Сжимает и динамически распаковывает участки кода, скрывая истинную природу кода.
Обфускация констант: Обфусцирует константы и значения данных с помощью таких техник, как XOR и манипуляции с битами.
Переименование переменных: Переименовывает переменные и регистры, делая код менее читаемым.
Вставка мусорного кода: Вставляет фрагменты мусорного кода для дальнейшего запутывания кодовой базы.
Ядро процесса обфускации заключается во внедрении пользовательских байтовых последовательностей перед каждой ассемблерной инструкцией в файле кода. Эти стратегически разработанные байтовые последовательности предназначены для того, чтобы ввести в заблуждение как дизассемблеры, так и аналитиков. Рассмотрим этот процесс подробно:
4005d2: 55 push rbp
В памяти (hex):
0x55
400665: eb 01 jmp 400668 <main+0x3>
400667: b0 55 mov al,0x55
400669: eb 01 jmp 40066c <main+0x7>
В памяти (hex):
0xEB, 0x01, 0xB0, 0x55
Вот разбор преобразования:
Исходная инструкция PUSH RBP ассемблируется в 0x55. Обфускатор вставляет перед ней байты 0xEB, 0x01, 0xB0.
В результате получается последовательность инструкций, которая при дизассемблировании может выглядеть совершенно иначе, чем исходный код. Это затрудняет понимание истинного назначения кода специалистами по реверс-инжинирингу.
Вносит элементы случайности в код. Это включает такие техники, как перестановка инструкций, замена операндов и подстановка опкодов.
Включает механизмы обнаружения наличия отладчиков во время выполнения кода. Содержит проверки во время выполнения для выявления артефактов, связанных с отладчиками, и активации антианалитических мер.
Интегрирует несколько антианалитических мер, таких как условные ветвления и проверки времени. Например, может вставлять условные переходы и циклы задержки, чтобы замедлить процесс анализа.
Применяет техники динамического дешифрования. Шифрует определённые участки кода и расшифровывает их во время выполнения с помощью секретного ключа. Этот процесс дешифрования происходит динамически во время выполнения кода.
Сжимает определённые участки кода и распаковывает их на лету при выполнении.
Использует такие техники, как XOR, манипуляции с битами и арифметические операции, для обфускации констант. Это гарантирует, что значения констант не будут легко распознаваемыми.
Инструмент переименовывает переменные и регистры, делая код менее читаемым. Процесс включает замену имён переменных на случайно сгенерированные строки или числовые идентификаторы.
Для дальнейшего запутывания кода обфускатор вставляет фрагменты мусорного кода в стратегически важных местах. Этот мусорный код состоит из нерелевантных инструкций, которые не влияют на логику программы, но служат для загромождения кодовой базы.
; Исходный код
mov eax, 1
; После вставки мусорного кода
mov ebx, 2
sub ecx, ecx
add edx, edx
В памяти (hex):
0x89, 0xD8, 0x31, 0xC9, 0x01, 0xD2
Вставленный мусорный код предназначен для отвлечения внимания и придания коду более запутанного вида.
Также включает функцию обнаружения поддельных UPX-заголовков. Он сканирует код на признаки подделки UPX-заголовков, обеспечивая целостность исполняемого файла.
До преобразования (исходный код):
section .text
global _start
_start:
; Calculate the sum of the first 10 natural numbers
mov ecx, 10 ; Initialize loop counter
mov eax, 0 ; Initialize sum to 0
loop_start:
add eax, ecx ; Add current value of ECX to EAX (sum)
loop loop_start ; Decrement ECX and loop if not zero
; Exit program
mov eax, 1 ; SYS_exit
int 0x80 ; Invoke syscall
Шестнадцатеричное представление (исходный код):
31 C9 xor ecx,ecx
B8 00 00 00 00 mov eax,0x0
EB 0E jmp 0x1c
01 C8 add eax,ecx
E2 FB loop 0x11
B8 01 00 00 00 mov eax,0x1
CD 80 int 0x80
После преобразования (обфусцированный код):
section .text
global _start
_start:
; Calculate the sum of the first 10 natural numbers
mov eax, 0x1
add eax, 0x2
add eax, 0x3
add eax, 0x4
add eax, 0x5
add eax, 0x6
add eax, 0x7
add eax, 0x8
add eax, 0x9
add eax, 0xa
; Exit program
mov eax, 0x1
int 0x80
Шестнадцатеричное представление (обфусцированный код):
B8 01 00 00 00 mov eax,0x1
83 C0 02 add eax,0x2
83 C0 03 add eax,0x3
83 C0 04 add eax,0x4
83 C0 05 add eax,0x5
83 C0 06 add eax,0x6
83 C0 07 add eax,0x7
83 C0 08 add eax,0x8
83 C0 09 add eax,0x9
83 C0 0A add eax,0xa
B8 01 00 00 00 mov eax,0x1
CD 80 int 0x80
В обфусцированном коде мы сделали исходную логику программы менее очевидной, добавив избыточные инструкции ADD и используя шестнадцатеричные значения в качестве непосредственных операндов.
Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.
Вклад приветствуется!.
По вопросам, запросам функций или общим обращениям, пожалуйста, создайте issue.
Этот инструмент предназначен для образовательных и этических целей.