Обратно инженерство

от Уикипедия, свободната енциклопедия

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

Средства[редактиране | редактиране на кода]

Използват се най-разнообразни средства, но може би най-известният е HexRays IDA(Interactive Disassembler), това е мощен интерактивен дебъгер/деасемблер, който включва в арсенала си и декомпилатор, който преобразува машинен код, в псевдоC/C++ код, в повечето случаи. IDA е с платен лиценз. IDA Има възможност освен x86/x64, да деасемблира и много голям набор от архитектури. Използва се често от експерти по компютърната сигурност за обратно инженерство на зловредни програми.

Безплатни инструменти:

  • OllyDBG 1.10/2.01 – няма декомпилатор, работи само с x86 архитектура. Работи само под Microsoft Windows базирани операционни системи.
  • x64_dbg – няма декомпилатор, но поддържа x86 и x64. Емулира интерфейса на OllyDBG.
  • radare2 – мултиплаформен.
  • medusa – мултиплаформен, интерактивен дебъгер/деасемблер в начален стадий на разработка.

Техники против обратно инженерство[редактиране | редактиране на кода]

С напредването на обратното инженерството, се създават и техники против него и/или с цел забавяне/затрудняване на този процес.

Виртуализация[редактиране | редактиране на кода]

Виртуализацията в контекста на обратното инженерство, е емулирането на машинен код в специална софтуерна среда. Зависи от имплементацията дали тя ще емулира x86, или ще създаде собствена архитектура. Така работата на „инженера“ значително се затруднява.

Откраднати байтове[редактиране | редактиране на кода]

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

Стек[редактиране | редактиране на кода]

Това е трик, който често се използва в x86/x64 архитектурата за да се разбере дали някои използва single step функцията на един дебъгер, от което се подразбира, че програмата работи под контрола на дебъгер.

push ss;
pop ss;
pushf;
pop eax;
and ah, 1;
JNZ badboy;

@badboy
int 3;

При изпълнение на pop ss инструкцията, за момента на изпълняване, всички interrupt-и биват прекъснати, заради което инструкцията pushf ще се изпълни, но дебъгера няма да спре на нея, тогава един специфичен флаг на процесора, наречен Trap Flag, няма да бъден премахнат(това се прави от дебъгера), след това се проверява дали този флаг(бит) е 1 чрез инструкцията and ah, 1, в случай, че е, се преминава на badboy.