25900 авторів і 91 редактор відповіли на 98952 питання,
розмістивши 129771 посилання на 81900 сайтів, приєднуйтесь!

Реклама партнерів:

На що спрямований процес оптимізації програмного коду?

РедагуватиУ обранеДрук

Обфускація - заплутування коду програми, тобто приведення вихідного тексту до виду, що зберігає функціональність програми, але утрудняє аналіз, розуміння алгоритмів роботи і модифікацію. Чи процес зворотний обфускаціі, який дозволив би зловмиснику повернути найбільш схожий первісний код програми, тобто код до обфускаціі? На це питання важко дати однозначну відповідь, але такий процес існує і носить він назву деобфускація.

З одного боку, до процесу деобфускаціі можна віднести процес оптимізації програмного коду, так як вони обидва, в тій чи іншій мірі, протилежні процесу обфускаціі. У процесі обфускаціі в програмний код часто проводиться додавання зайвих операцій, вони зазвичай жодним чином не впливають на результати роботи самої програми і призначені для збиття з пантелику і ускладнення процесу вивчення коду програми сторонніми особами.

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

Більшість компіляторів в процесі компіляції вихідного коду, автоматично здійснюють процес оптимізації, тому якщо обфускація здійснюється над вихідним кодом програми (обфускація високого рівня), виникає певна ймовірність, того, що її ефективність після, компіляції знизитися. Якщо ж такий вихідний код буде оброблятися інтерпретатором (тобто не буде схильний компіляції), ефективність здійсненого процесу обфускаціі не зміниться.

До процесу деобфускаціі також можна віднести і процес декомпіляцію, який дозволяє, маючи двійковий код програми, отримати найбільш схоже початкове уявлення цього коду на мові високого рівня, який більш зрозумілий людині, це дозволить спростити процес реверсивної інженерії.



Зразок класифікації методів процесу деобфускаціі:

  • знаходження і оцінка непрозорих конструкцій (предикатів), статичний аналіз яких дуже складний;
  • зіставлення зі зразком. Здійснюється різними способами, найбільш розповсюджені два з них. Перший, коли береться кілька одних і тих же програм, що пройшли процес обфускаціі (так як процес обфускаціі в більшості випадків унікальний, то їх код також буде різний, хоча вони і будуть виконувати ідентичні дії) і проводиться порівняння фрагментів їх коду, для виявлення вставленого в процесі здійснення обфускаціі зайвого коду, який згодом просто забирається. Другий спосіб зіставлення із зразком здійснюється шляхом пошуку в коді програми найбільш поширених конструкцій, що застосовуються в процесі обфускаціі. Такі конструкції можуть, наприклад, зберігатися і оновлюватися у відповідній базі даних або бути отримані шляхом вивчення роботи самого обфуськатор;
  • виділення в програмі фрагментів коду, які жодним чином не пов'язані з основними завданнями, які повинна виконувати програма, тобто виявлення непотрібних (зайвих) ділянок коду;
  • статистичний аналіз полягає в динамічному аналізі коду програми;
  • аналіз потоку даних ґрунтується на вивченні того, як в процесі роботи програми змінюються в ній дані (змінні, масиви).

Cтатіческій аналіз - це сімейство технологій аналізування програм, де анализируемую програму фактично не потрібне запускати, при цьому необхідну інформацію про неї отримують за допомогою спеціальних програм. Наприклад, статичний аналіз програм, представлених у двійковому вигляді, можна здійснити, використовуючи декомпілятор, а представлених в початковому вигляді, використовуючи будь-якої текстовий редактор. Технології статичного аналізу відрізняються від більшості існуючих, її основна якість полягає в тому, що вона є більш комплексною і базується на семантиці (визначає смислове значення пропозицій алгоритмічної мови) самого коду програми. Статичний аналіз дозволяє досліджувати програму і виявити деякі причини її можливої поведінки під час її роботи, тобто результати статичного аналізу можна вважати абсолютно точними.

В свою чергу динамічний аналіз полягає в аналізі / тестуванні програми під час її виконання. Він вважається точним, так як він досліджує фактичне поведінка програми під час її роботи.

Динамічний аналіз зазвичай здійснюється швидше, ніж статичний, так як час його виконання найчастіше залежить від швидкості виконання аналізованої програми. Статичний же аналіз зазвичай вимагає багато обчислень і є тривалим, особливо коли аналізуються великі програми. Недолік динамічного аналізу полягає в тому, що отримані результати можуть не відповідати результатам, одержуваних при наступних запусках однієї і тієї ж програми.

Джерела инфомации:

Реклама партнерів:

РедагуватиУ обранеДрук


«На що спрямований процес оптимізації програмного коду?»

В інших пошукових системах:

GoogleЯndexRamblerВікіпедія

» » На що спрямований процес оптимізації програмного коду?