Декомпілятор

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

Принцип дії

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

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

Законодавство

Багато розробників власницького ПЗ явно забороняють в ліцензії декомпіляцію своїх програм, однак згідно з законом України «Про авторське право і суміжні права» в статті 24 дозволяється вільне копіювання, модифікація і декомпіляція комп'ютерних програм за необхідної умови, що особа правомірно володіє правомірно виготовленим примірником комп'ютерної програми[1]. Додаткові умови для законного права на декомпіляцію програми для отримання інформації, необхідної для досягнення її взаємодії із незалежно розробленою комп'ютерною програмою:

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

Див. також

Примітки

  1. Про авторське право і суміжні права, Верховна Рада України; Закон від 23.12.1993 № 3792-XII. Архів оригіналу за 26 травня 2015. Процитовано 21 вересня 2015.