Техники за обфускация на код срещу обратно инженерство

  • Обфускацията трансформира изходния код в сложна структура, за да затрудни анализа, без да променя функционалността на софтуера.
  • Използват се методи, вариращи от преименуване на променливи до използването на полиморфни и метаморфни двигатели, за да се избегне откриването.
  • Въпреки че е жизненоважен инструмент за защита на интелектуалната собственост, той не е безпогрешен и трябва да бъде интегриран в стратегия за защита в дълбочина.

Техники за обфускация на код срещу обратно инженерство

Представете си, че сте прекарали месеци в усъвършенстване на революционен алгоритъм, но когато пуснете приложението си, всеки мошеник с безплатен декомпилатор може да надникне и да открадне тайната ви. Тук се намесва обфускацията на кода , практика, която се развива от десетилетия, за да затрудни всеки, който се опитва да надникне във вътрешните механизми на дадена програма. Това не е магия, а изкуството да се превърне ясен, четлив текст в истински логически лабиринт, който, макар и напълно разбираем за компютър, би довел човек до объркване.

През 80-те и 90-те години, когато C и асемблерен език царуваха, необходимостта от защита на интелектуалната собственост тласкаше тези техники. Днес, с масовото внедряване на уеб и мобилни приложения, битката е постоянна. Важно е да се уточни, че обфускацията не е криптиране; докато криптирането изисква ключ, за да бъде полезно, обфускацията позволява на кода да продължи да работи нормално, но прави разбирането му изключително бавно и скъпо за нападателя.

В какво точно се състои обфускацията?

По същество това включва трансформиране на изходния код в криптирана версия. Целта е да се обезкуражи злонамерените лица да търсят уязвимости или да копират функционалности. При сигурното разработване това се прилага след отстраняване на грешки чрез статичен анализ, добавяйки допълнителен слой защита. По принцип целта е времето и усилията, необходими за обратно инженерство, да бъдат толкова високи, че атакуващият да се откаже.

Подробни методи и техники за обфускация

Има много начини да се усложни една програма, някои по-прости от други, но всички с една и съща цел: да се обърка анализаторът.

  • Преименуване на идентификатори: Това е хлябът и маслото на обфускацията. Състои се от промяна на описателни имена като calcularImpuesto() за безсмислени неща като a1_z9(). Това го прави невъзможно е да се определи целта на променлива или функция на пръв поглед.
  • Реорганизация на потока: Структурата на инструкциите се променя без промяна на логиката. Преместването на блокове от код или промяната на реда на операторите води до Последователното четене е хаос.
  • Инжектиране на мъртъв код: Добавят се редове, които не правят абсолютно нищо (излишни инструкции), или се добавя фалшив код, който води анализатора по грешен път. Все едно да сложите капани по пътя така че нападателят да губи време.
  • Трансформация на контролните структури: Промяна if-else Класическото изпълнение от сложен тернарен оператор или вложени структури прави потока на изпълнение много по-малко предвидимо.
  • Заместване на константи: Вместо да се въведе директно число, като например 5, се използва еквивалентен израз, като например (100 / 20)Така реалната стойност остава скрито зад операция.
  • Криптиране и кодиране на данни: Можете да скриете текстови низове, използвайки Base64 или XOR, като ги деобфускирате само в точния момент на изпълнение, така че да не се появяват в статичен анализ.
  • Манипулиране на данни и метаданни: Обръщането на знаци в низ или премахването на цялата информация за отстраняване на грешки помага кодът да бъде по-четлив. много по-загадъчно при декомпилиране.
Какво е .dex файл в Android-1
Свързана статия:
Какво е .dex файл на Android? Пълно обяснение и примери

Двойствеността на обфускацията: Защитници срещу Нападатели

Не всичко е слънчево и слънчево; обфускацията е нож с две остриета. От една страна, разработчиците я използват, за да предотвратят пиратството и да защитят лицензите си. От друга страна, създателите на зловреден софтуер я използват, за да направят вирусите си невидими за антивирусния софтуер. Тук се намесват по-напреднали концепции:

  • Полиморфен зловреден софтуер: Това променя външния си вид с всяка нова инфекция, използвайки променливи ключове за криптиране, което му позволява да няма фиксиран подпис които скенерите могат да засекат.
  • Метаморфен код: То отива още една крачка напред и пренаписва собствената си вътрешна структура във всяко поколение, което го прави всеки екземпляр е уникален.
  • Техники без файлове: Злонамереният код се изпълнява директно в RAM паметта, като избягва контакт с твърдия диск и по този начин заобикаля по-голямата част от традиционните контроли за сигурност.

Уникалното предизвикателство на JavaScript и уеба

В уеб средата проблемът е, че кодът се изпълнява на клиента, т.е. в браузъра на потребителя. Делегирането на твърде много критична логика към фронтенда е сериозен архитектурен недостатък. Атакуващите могат да използват инструменти като Chrome DevTools или JSNice, за да деобфускират кода и да намерят недостатъци във валидирането на данните. Следователно, златното правило е, че цялата критична валидация трябва да се намира на сървъра , като обфускацията се използва само като допълнение, за да се затрудни кражбата на скриптове.

За какво са .art файловете на Android Runtime-0?
Свързана статия:
Всичко за .art файловете на Android Runtime: какво представляват, за какво се използват и ключови разлики с Dalvik и ODEX.

Професионални инструменти за защита на кода

Да се ​​прави всичко това ръчно би било лудост, затова има много мощни автоматизирани инструменти. За екосистемите на Java и Android, ProGuard се откроява , докато в света на .NET, Dotfuscator е много разпространен . За тези, които работят с C или C++, LLVM Obfuscator е идеалният избор. В сферата на Python имаме PyArmor , а за JavaScript, Jscrambler предлага разширени възможности за самозащита и анти-дебъгване.

Еволюция и бъдещето на софтуерната защита

Технологията не стои неподвижна и изкуственият интелект започва да играе ключова роля. Вече се говори за обфускация, управлявана от изкуствен интелект , при която алгоритмите научават кои части от кода са най-уязвими и динамично прилагат най-ефективната техника. Появяват се и непрозрачни предикати (изрази, чиято истинност е известна по време на компилация, но е двусмислена за атакуващия) и поверителни изчисления, които позволяват обработката на криптирани данни без декриптиране. Дори се проектират методи, които да устоят на квантовите изчисления , предвиждайки процесорната мощност на бъдещите машини.

Как да се защитим от злонамерен обфускиран код

За анализаторите по сигурността, борбата с обфускацията изисква преминаване от откриване, базирано на сигнатури, към поведенчески анализ . Не е важно как изглежда кодът, а какво прави. Внедряването на цялостна инфраструктура за регистриране, извършването на анализ на паметта за откриване на инжекции и удължаването на времето за анализ на пясъчната среда (над 30 минути) са ключови стратегии за залавяне на зловреден софтуер, който се опитва да се скрие зад слоеве на сложност.

Как да декомпилирате приложение за Android-2
Свързана статия:
Как да декомпилирате приложение за Android: Разширено ръководство, инструменти и пълни стъпки

Добавяне като предпочитан източник в Google