Π”Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это

ДизассСмблСры, дСкомпиляторы ΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° – Ρ‚Π΅ΠΌΠ° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ – это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ срСдства, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для контроля выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π΄Π°ΠΆΠ΅, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, внСсти измСнСния Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π»Π΅Ρ‚Ρƒ Π² процСссС Π΅Π΅ выполнСния. К соТалСнию, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… дСйствий зависит ΠΎΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ соотвСтствия символов (для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ это Π½Π΅ выполняСтся). Если ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, хотя Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ приходится Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Ρ‚ΠΎΡ‡Π΅ΠΊ прСрывания вмСсто ΠΈΠΌΠ΅Π½ приходится Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ адрСса памяти.

ДСкомпилятор (ΠΈΠ»ΠΈ дизассСмблСр) – ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² исходный тСкст, написанный Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· языков программирования, Ρ‡Π°Ρ‰Π΅ всСго – ассСмблСрС. НСкоторыС дизассСмблСры ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ исходный тСкст Π½Π° простом языкС C. Π’ процСссС трансляции большая Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± исходном тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ тСряСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, поэтому дСкомпилятор пытаСтся Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходный тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Если ΠΏΡ€ΠΈ дСкомпиляции Ρ‚Π°Π±Π»ΠΈΡ†Π° соотвСтствия ΠΈΠΌΠ΅Π½ Π±Ρ‹Π»Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°, Ρ‚ΠΎ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ дСкомпилятор присваиваСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π°, составлСнныС ΠΈΠ· ΠΏΠ»ΠΎΡ…ΠΎ воспринимаСмой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ†ΠΈΡ„Ρ€ ΠΈ Π±ΡƒΠΊΠ².

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° нСсколько упрощаСтся, Ссли ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² состоянии Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ассСмблСрным ΠΊΠΎΠ΄ΠΎΠΌ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ дСкомпилятором. Π’ этом случаС дСкомпилятор особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ дСкомпилятора.

Π‘Ρ€Π΅Π΄ΠΈ коммСрчСских дСкомпиляторов для Windows Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ рСпутация Ρƒ IDA Pro ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ DataRescue (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ дСкомпилятора ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 4.1). IDA Pro ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΈΡ… процСссоров, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Java.

Рис. 4.1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ IDA Pro

Π”Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π”Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π”Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π”Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ Π”Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это

На рисункС ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния дСкомпилятора IDA Pro для дизассСмблирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ pbrush.exe (Paintbrush). IDA Pro нашСл ΡΠ΅ΠΊΡ†ΠΈΡŽ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ pbrush.exe. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСтся ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ раздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Windows ΠΈΠ»ΠΈ UNIX), Ρ‚ΠΎ ΠΎΠ½Π° содСрТит список Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ этот список прСдставлСн Π² ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ экспСртизС выполняСмого ΠΊΠΎΠ΄Π°. Для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Ρ‚Π°ΠΊΠΆΠ΅ трСбуСтся этот список, поэтому ΠΎΠ½Π° Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это позволяСт дСкомпилятору Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ список Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, сдСлав Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ понятным.

Π§Π°Ρ‰Π΅ всСго Ρ‚Π°Π±Π»ΠΈΡ†Π° соотвСтствия ΠΈΠΌΠ΅Π½ pbrush.exe нСдоступна, поэтому Π² большСй части сгСнСрированного дСкомпилятором ассСмблСрного ΠΊΠΎΠ΄Π° ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΠΌΠ΅Π½Π°.

ΠžΡ†Π΅Π½ΠΎΡ‡Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ IDA Pro, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΡƒΡŽ для ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ знакомства с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ с www.datarescue.com/idabase/ida.htm. SoftICE ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Numega – Π΄Ρ€ΡƒΠ³ΠΎΠΉ популярный ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ адрСсу www.compuware.com/products/numega/drivercentral/.

Для сравнСния Π±Ρ‹Π»Π° написана нСбольшая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° языкС C (классичСская нСбольшая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, выводящая строку Β«Hello WorldΒ»). Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ использовался ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ GNU (GDB). Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставлСн Π½ΠΈΠΆΠ΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² дизассСмблированиС

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ понятия дизассСмблирования

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ дизассСмблированиС. ДизассСмблированиС – ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° машинном языкС ΠΊ Π΅Π΅ ассСмблСрному ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ. ДСкомпиляция – ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° языка высокого уровня ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° машинном языкС ΠΈΠ»ΠΈ ассСмблСрС.

ДСкомпиляция – достаточно слоТный процСсс. Π­Ρ‚ΠΎ обусловлСно ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ:

βˆ’ ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции происходит с потСрями. Π’ машинном языкС Π½Π΅Ρ‚ ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ Π½Π°Π΄ Π½ΠΈΠΌΠΈ опСрациям. Наблюдая пСрСсылку 32-Ρ… Π±ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, трСбуСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ эти Π΄Π°Π½Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹ΠΌ числом, Π΄Ρ€ΠΎΠ±ΡŒΡŽ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ.

βˆ’ ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ это опСрация Ρ‚ΠΈΠΏΠ° мноТСство-мноТСство.ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ дСкомпиляция ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ мноТСством способов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дСкомпиляции ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ исходного ΠΊΠΎΠ΄Π°.

βˆ’ ДСкомпиляторы Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни зависимы ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ языка ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ исполняСмый Ρ„Π°ΠΉΠ», созданный компилятором Delphi, дСкомпилятором, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ для C, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ фантастичСский Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

βˆ’ НСобходимо Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ дизассСмблированиС исполняСмого Ρ„Π°ΠΉΠ»Π°. Π›ΡŽΠ±Π°Ρ ошибка ΠΈΠ»ΠΈ ΡƒΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ Π½Π° Ρ„Π°Π·Π΅ дизассСмблирования практичСски навСрняка размноТатся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅.

ΠŸΡ€ΠΎΠ³Ρ€Π΅ΡΡ срСдств дСкомпиляции происходит ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½ΠΎ Π²Π΅Ρ€Π½ΠΎ. НаиболСС слоТный Π½Π° сСгодняшний дСнь дСкомпилятор IDA, Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π½ΠΈΠΆΠ΅.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ дизассСмблированиС. ЦСль инструмСнтов дизассСмблирования Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² содСйствии исслСдованию функционирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… исходныС ΠΊΠΎΠ΄Ρ‹ Π½Π΅ доступны. НаиболСС распространСнныС Ρ†Π΅Π»ΠΈ дизассСмблирования:

βˆ’ Π°Π½Π°Π»ΠΈΠ· врСдоносного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния;

βˆ’ Π°Π½Π°Π»ΠΈΠ· уязвимостСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ;

βˆ’ Π°Π½Π°Π»ΠΈΠ· совмСстимости ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ;

βˆ’ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² процСссС ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

Листинг дизассСмблирования ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ компилятор располоТил ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² памяти. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ программистом 70-Π±Π°ΠΉΡ‚Π½Ρ‹ΠΉ массив символов ΠΏΡ€ΠΈ распрСдСлСнии памяти компилятором Π±Ρ‹Π» ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ Π² сторону 80 Π±Π°ΠΉΡ‚. Листинги дизассСмблирования Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ СдинствСнный способ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ глобально ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ПониманиС Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ располоТСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² памяти ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ эксплойтов.

Анализ совмСстимости. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π²ΠΈΠ΄Π΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², сторонним Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΊΡ€Π°ΠΉΠ½Π΅ слоТно ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π½ΠΈΠΌΠΈ своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. НапримСр, Ссли ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ прСдоставил Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ устройства, Ρ‚ΠΎ рСвСрс ΠΈΠ½ΠΆΠΈΠ½ΠΈΡ€ΠΈΠ½Π³ – практичСски СдинствСнноС срСдство для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ².

Валидация компилятора. ДизассСмблированиС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ срСдством для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ соотвСтствия Ρ€Π°Π±ΠΎΡ‚Ρ‹ компилятора Π΅Π³ΠΎ спСцификации. Π’Π°ΠΊΠΆΠ΅ исслСдоватСля ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния бСзопасности Π²Π°ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ компилятором, Π½Π΅ содСрТит Ρ‡Π΅Ρ€Π½Ρ‹Ρ… Ρ…ΠΎΠ΄ΠΎΠ².

ΠžΡ‚Π»Π°Π΄ΠΊΠ°. К соТалСнию, дизассСмблСры, встроСнныС Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ малоэффСктивны (OllyDbg ─ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅). Они нСспособны ΠΊ сСрийному Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π² состоянии ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ контроля Π½Π°Π΄ процСссом ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Π² сочСтании с Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ дизассСмблСром.

Как Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ сталкиваСтся дизассСмблСр: Π²Π·ΡΡ‚ΡŒ 100 ΠšΠ‘ ΠΈΠ· исходного Ρ„Π°ΠΉΠ»Π°, ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΊ языку ассСмблСра, ΠΈ Π³Π»Π°Π²Π½ΠΎΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ. Π’ этот список ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поТСлания, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ† Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, распознаваниС Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ услоТнит Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ. ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… листингов дизассСмблирования опрСдСляСтся свойствами Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡ… примСнСния Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации.

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ дизассСмблирования

Π¨Π°Π³ 1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом Π² процСссС дизассСмблирования являСтся идСнтификация ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ сСгмСнта. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΌΠ΅ΡˆΠ°Π½Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ дизассСмблСру Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡ… Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ.

Π¨Π°Π³ 2. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² адрСс ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, содСрТащССся ΠΏΠΎ этому адрСсу (ΠΈΠ»ΠΈ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ Π² Ρ„Π°ΠΉΠ»Π΅) ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ Π΅ΠΌΡƒ ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΡƒ языка ассСмблСра.

Π¨Π°Π³ 3. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±Ρ‹Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π°, Π΅Π΅ ассСмблСрный эквивалСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌΡƒ листингу. ПослС этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· разновидностСй синтаксиса языка ассСмблСра.

Π¨Π°Π³ 4. Π”Π°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ шаги Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° каТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ„Π°ΠΉΠ»Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ дизассСмблирована.

Алгоритм Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ состоит Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ сСгмСнта. Одним ΠΈΠ· основных нСдостатков являСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Ссли ΠΎΠ½ΠΈ совмСщСны с ΠΊΠΎΠ΄ΠΎΠΌ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· листинга, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дизассСмблирования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Π­Ρ‚Π° функция содСрТит ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ switсh. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ принял Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ switch ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ². Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, компилятор ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Π» Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ jump ΠΏΠΎ адрСсу 401250 ссылаСтся Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ адрСсов начиная с 410257. К соТалСнию, дизассСмблСр рассматриваСт Π΅Π΅ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ прСдставлСниС Π½Π° языкС ассСмблСра.

401240: 8bec movebp,esp

401242: 33 c0 xor eax,eax

401244: 8b 55 08 mov edx,DWORD PTR [ebp+8]

401247: 83 fa 0c cmp edx,0xc

40124a: 0f 87 90 00 00 00 ja 0x4012e0

401250: ff 24 95 57 12 40 00 jmp DWORD PTR [edx*4+0x401257]

401257: e0 12 loopne 0x40126b

40125a: 00 8b 12 40 00 90 add BYTE PTR [ebx-0x6fffbfee],cl

401260: 12 40 00 adc al,BYTE PTR [eax]

401263: 95 xchg ebp,eax

401264: 12 40 00 adc al,BYTE PTR [eax]

401267: 9a 12 40 00 a2 12 40 call 0x4012:0xa2004012

40126e: 00 aa 12 40 00 b2 add BYTE PTR [edx-0x4dffbfee],ch

401274: 12 40 00 adc al,BYTE PTR [eax]

401277: ba 12 40 00 c2 mov edx,0xc2004012

40127c: 12 40 00 adc al,BYTE PTR [eax]

40127f: ca 12 40 lret 0x4012

401282: 00 d2 add dl,dl

401284: 12 40 00 adc al,BYTE PTR [eax]

401287: da 12 ficom DWORD PTR [edx]

40128a: 00 8b 45 0c eb 50 add BYTE PTR [ebx+0x50eb0c45],cl

401290: 8b 45 10 mov eax,DWORD PTR [ebp+16]

401293: eb 4b jmp 0x4012e0

Алгоритм рСкурсивного спуска

Алгоритм рСкурсивного спуска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ, Π΄ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±Ρ‹Ρ‚ΡŒ дизассСмблирована ΠΏΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΡŽ Π½Π° Π½Π΅Π΅ ссылок ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄. Для понимания Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° рСкурсивного спуска, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² зависимости ΠΎΡ‚ ΠΈΡ… влияния Π½Π° счСтчик ΠΊΠΎΠΌΠ°Π½Π΄ CPU.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π΅ Π²Π»ΠΈΡΡŽΡ‰ΠΈΠ΅ Π½Π° счСтчик ΠΊΠΎΠΌΠ°Π½Π΄. ПослС выполнСния Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ нСпосрСдствСнно ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ арифмСтичСскиС, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ add; Для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ процСсс дизассСмблирования Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠ΅.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ условного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ условного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ x86 jnz, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π΅Ρ‚Π²ΠΈ исполнСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² статичСском контСкстС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ исход ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ условия, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ рСкурсивного спуска дизассСмблируСт ΠΎΠ±Π΅ Π²Π΅Ρ‚Π²ΠΈ. АдрСс Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ добавляСтся Π² список адрСсов для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ дизассСмблирования. ДизассСмблированиС продолТаСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ условиС Π±Ρ‹Π»ΠΎ Π»ΠΎΠΆΠ½ΠΎ.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ бСзусловного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°. БСзусловныС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ приводят ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ порядка исполнСния ΠΊΠΎΠΌΠ°Π½Π΄. Команда, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ послС выполнСния бСзусловного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π³ΠΎ Π½Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ расстоянии. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ листинга, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ нСпосрСдствСнно Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ бСзусловного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²ΠΎΠΎΠ±Ρ‰Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΈΡ… дизассСмблировании ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚.

Алгоритм рСкурсивного спуска пытаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ адрСс назначСния бСзусловного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈ занСсти Π΅Π³ΠΎ Π² список адрСсов для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ дизассСмблирования. К соТалСнию, Π½Π΅ всС бСзусловныС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π΄Π°Π½Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ. Когда адрСс назначСния ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° зависит ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ Π² процСссС исполнСния, Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ статичСского Π°Π½Π°Π»ΠΈΠ·Π° становится Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ сходным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ бСзусловных ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ адрСс назначСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ call eax), Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ послС выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ возвращаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π° Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ. ΠŸΡ€ΠΈ этом, ΠΊΠ°ΠΊ ΠΈ Π² случаС с условными ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°ΠΌΠΈ, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π΅ Π²Π΅Ρ‚Π²ΠΈ исполнСния. АдрСс назначСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ call добавляСтся Π² список адрСсов для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ дизассСмблирования, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π·Π° call, дизассСмблируСтся с использованиСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚ΠΊΠΈ.

Алгоритм рСкурсивного спуска ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСэффСктивным Π² случаС, Ссли ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ отклоняСтся ΠΎΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ. НапримСр, Π² ΠΊΠΎΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ рСкурсивного спуска Ρ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ. Команда Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ret x86) Π½Π΅ прСдоставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, какая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π΄Π°Π»Π΅Π΅. Если Π±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° Π½Π° самом Π΄Π΅Π»Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΏΠΎ адрСсу, располоТСнному Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка. Π£ дизассСмблСра Π½Π΅Ρ‚ возмоТности доступа ΠΊ стСку. ВмСсто этого дизассСмблированиС Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ останавливаСтся. Π’ этом случаС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ рСкурсивного спуска обращаСтся ΠΊ списку ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… адрСсов, ΠΈ процСсс дизассСмблирования возобновляСтся. Π­Ρ‚ΠΎΡ‚ рСкурсивный процСсс ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ смысл названия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Алгоритм рСкурсивного спуска прСвосходно раздСляСт ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅. Π“Π»Π°Π²Π½Ρ‹ΠΌ ΠΆΠ΅ нСдостатком Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° являСтся Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ Π²Π΅Ρ‚Π²ΠΈ, ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΊΠ°ΠΊ jump ΠΈ call, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ для адрСсации Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ поиска. НСсмотря Π½Π° это, Π² сочСтании с эвристиками для распознавания ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΊΠΎΠ΄, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ рСкурсивного спуска способСн ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² сочСтании с прСкрасным Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π”Π°Ρ‚Π° добавлСния: 2018-06-27 ; просмотров: 4156 ; ΠœΡ‹ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π² написании вашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это

Аннотация. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ даётся ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ Π·Π°Π΄Π°Ρ‡ΠΈ дСкомпиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π·Π°Π΄Π°Ρ‡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ. Π Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ возмоТности ΠΈ нСдостатки ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств дСкомпиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ настоящСС врСмя Π² комплСксном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ обСспСчСнии ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ прилоТСния, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ сторонними производитСлями. Π’ рядС случаСв Ρ‚Π°ΠΊΠΈΠ΅ прилоТСния ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π±Π΅Π· исходного ΠΊΠΎΠ΄Π° Π½Π° языкС высокого уровня, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для ΠΈΡ… Π°ΡƒΠ΄ΠΈΡ‚Π° с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ бСзопасности ΠΈΡ… использования. НСсмотря Π½Π° это, Ρ‚Π°ΠΊΠΈΠ΅ прилоТСния ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ исслСдованы для ΠΎΡ†Π΅Π½ΠΊΠΈ рисков ΠΈΡ… использования. Ни Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½ΠΈ ассСмблСрный листинг, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ дизассСмблирования, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ с ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌΠΈ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌΠΈ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ взаимосвязь элСмСнтов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ стандартныС алгоритмичСскиС конструкции. ВосстановлСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС высокого уровня Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ трудности. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ прилоТСния, прСдставлСнныС Π² Π²ΠΈΠ΄Π΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π½Π° языкС ассСмблСра, слоТны для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΡ… спСциалистами Π² области ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ бСзопасности, ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈ Ρ‚.Π΄. ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ прСдоставлСны ΠΈΠΌ для Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° Π±ΠΎΠ»Π΅Π΅ высоком ΡƒΡ€ΠΎΠ²Π½Π΅ прСдставлСния. Π’ качСствС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ уровня абстракции прСдставлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ дСкомпилятор.

Под дСкомпилятором ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ срСдство, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅Π΅ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС ассСмблСра ΠΈ Π²Ρ‹Π΄Π°ΡŽΡ‰Π΅Π΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΡƒΡŽ Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ языкС высокого уровня.

Π—Π°Π΄Π°Ρ‡Π° дСкомпиляции Π±Ρ‹Π»Π° поставлСна Π² 60-Π΅ Π³ΠΎΠ΄Ρ‹ XX Π²Π΅ΠΊΠ° сразу ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° стали ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ компиляторы с языков высокого уровня, Π½ΠΎ Π½Π΅ ΡƒΡ‚Ρ€Π°Ρ‚ΠΈΠ»Π° своСй Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΠΎ сСй дСнь [2]. Π­Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½Π° Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΈΠ·-Π·Π° наличия ряда трудностСй ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π°. Π’ частности, ΠΏΡ€ΠΈ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· языка высокого уровня Π² язык ассСмблСра Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒΒ» ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ языка высокого уровня Π² ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ языка ассСмблСра, ΠΈ, ΠΊΠ°ΠΊ слСдствиС, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ восстановлСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС высокого уровня становится Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

Π’ силу ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ автоматичСский дСкомпилятор Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ систСмы дСкомпиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²ΠΎ взаимодСйствии с Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ (Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ± ΠΈ ошибок) управляСт процСссом дСкомпиляции. Π’ Ρ…ΠΎΠ΄Π΅ дСкомпиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ: Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ структурных Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² частности, ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎΠΌ ассСмблСрном листингС, выявлСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… ΠΈΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, структурный Π°Π½Π°Π»ΠΈΠ·, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ восстановлСниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ†ΠΈΠΊΠ»ΠΎΠ², Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΈ Ρ‚. ΠΏ., восстановлСниС Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС эти Π·Π°Π΄Π°Ρ‡ΠΈ достаточно Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈ ΠΈ алгоритмичСски Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΡ‹, Π½Π° сСгодняшний дСнь Π½Π΅Ρ‚ извСстных дСкомпиляторов, Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ язык высокого уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ качСствСнно ΡΠΏΡ€Π°Π²Π»ΡΠ»ΠΈΡΡŒ Π±Ρ‹ со всСми пСрСчислСнными Π²Ρ‹ΡˆΠ΅ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ посрСдством использования дСкомпиляторов трСбуСтся Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ инструмСнта, ΠΈ для достиТСния Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, потрСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ дСкомпиляторов Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ прСдлагаСтся ΠΎΠ±Π·ΠΎΡ€ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстных дСкомпиляторов Π² язык Π‘ΠΈ ΠΈΠ· Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², рассматриваСтся Π½Π°Π±ΠΎΡ€ тСстов, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· работоспособности дСкомпиляторов, ΠΈ выполняСтся этот Π°Π½Π°Π»ΠΈΠ·.

Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² качСствС процСссорной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вСдётся дСкомпиляция, Π²Ρ‹Π±Ρ€Π°Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Intel i386, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённая Π² настоящСС врСмя. Π’ листингах Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС ассСмблСра ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синтаксис AT&T [3].

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅, ΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΡΠΌΠ΅ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ понятия дизассСмблирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ дСкомпиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, умСстно Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ различия этих Π·Π°Π΄Π°Ρ‡. Π­Ρ‚ΠΎΠΌΡƒ посвящСн Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·Π΄Π΅Π» ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ даСтся описаниС основных ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ дСкомпиляции с описаниСм Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… трудностСй ΠΏΡ€ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ. Π’ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ приводится ΠΎΠ±Π·ΠΎΡ€ языка Π‘ΠΈ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ. ΠŸΡΡ‚Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» посвящСн описанию ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… дСкомпиляторов для языка Π‘ΠΈ. Π’ пятом Ρ€Π°Π·Π΄Π΅Π»Π΅ прСдставлСны Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования дСкомпиляторов Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ тСстовых ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ сформулированы Π²Ρ‹Π²ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ направлСния Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… исслСдований.

2. ДСкомпиляция ΠΈ дизассСмблированиС

Рассмотрим нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π·Π°Π΄Π°Ρ‡Ρƒ дизассСмблирования ΠΈ Π·Π°Π΄Π°Ρ‡Ρƒ дСкомпиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Под дСкомпиляциСй понимаСтся построСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС высокого уровня, эквивалСнтной исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° языкС Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня (языкС ассСмблСра). Под дизассСмблированиСм понимаСтся построСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС ассСмблСра, эквивалСнтной исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² машинном ΠΊΠΎΠ΄Π΅. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² машинном ΠΊΠΎΠ΄Π΅ прСдставляСтся Π»ΠΈΠ±ΠΎ Π² Π²ΠΈΠ΄Π΅ исполняСмого модуля Π² стандартном для Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Win32 Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ PE [16], Π° для Linux – Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ELF [15]), Π»ΠΈΠ±ΠΎ Π² Π²ΠΈΠ΄Π΅ Π΄Π°ΠΌΠΏΠ° содСрТимого памяти, Π»ΠΈΠ±ΠΎ Π² Π²ΠΈΠ΄Π΅ трассы исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ дСкомпиляция рассматриваСтся Π² Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ смыслС, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΊΠ°ΠΊ построСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС высокого уровня ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² машинном ΠΊΠΎΠ΄Π΅. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΉ постановкС Π·Π°Π΄Π°Ρ‡Π° дСкомпиляции ΠΏΠΎΠ³Π»ΠΎΡ‰Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ дизассСмблирования. Π’Π°ΠΊΠΎΠ΅ Β«ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅Β» ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ дСкомпиляции излишнС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ дизассСмблированиС ΠΈ дСкомпиляция Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎ сути Π·Π°Π΄Π°Ρ‡ΠΈ, хотя ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ схоТиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Π² частности, построСниС Π³Ρ€Π°Ρ„Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния ΠΈ исполняСмого покрытия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹). Π’Π°ΠΊ, ΠΏΡ€ΠΈ дизассСмблировании выполняСтся трансляция исполняСмого Ρ„Π°ΠΉΠ»Π°, прСдставляСмого Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС ассСмблСра. ΠŸΡ€ΠΈ дСкомпиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с прСдставлСния Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня транслируСтся Π² прСдставлСниС высокого уровня. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠΌ этапом ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ уровня абстракции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³, посрСдством ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘ΠΈ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС Π‘ΠΈ++.

Рассмотрим Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ дСкомпиляции ΠΈ дизассСмблирования Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ. Π’Π°ΠΊ, ΠΏΡ€ΠΈ дизассСмблировании трСбуСтся Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ основныС Π·Π°Π΄Π°Ρ‡ΠΈ:

ΠŸΡ€ΠΈ дСкомпиляции Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ основныС Π·Π°Π΄Π°Ρ‡ΠΈ:

Π’ дальнСйшСм ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ дСкомпиляции Π² ΡƒΠ·ΠΊΠΎΠΉ постановкС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡Ρƒ трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, прСдставлСнной Π½Π° языкС Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, Π² частности, Π½Π° языкС ассСмблСра, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС высокого уровня, Π² частности, Π½Π° Π‘ΠΈ.

3. ΠžΠ±Π·ΠΎΡ€ основных ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ дСкомпиляции

Рассмотрим основныС Π·Π°Π΄Π°Ρ‡ΠΈ дСкомпиляции ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ.

3.1. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Одной ΠΈΠ· основных структурных Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС Π‘ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния. ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ, состоит ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° инструкций, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½ΠΈΠΊΠ°ΠΊ структурно Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, компиляторы Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠ΄ с ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈ этом Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ΄Π°, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, помСщаСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… инструкций, называСмая ΠΏΡ€ΠΎΠ»ΠΎΠ³ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π² ΠΊΠΎΠ½Π΅Ρ† ΠΊΠΎΠ΄Π° – эпилог Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. И ΠΏΡ€ΠΎΠ»ΠΎΠ³ΠΈ, ΠΈ эпилоги Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, стандартны для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ лишь Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‚ΡΡ. НапримСр, стандартный ΠΏΡ€ΠΎΠ»ΠΎΠ³ ΠΈ эпилог Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ i386 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½ΠΈΠΆΠ΅:

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ прСобразования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят ΠΊ появлСнию Π² машинном ΠΊΠΎΠ΄Π΅ конструкций, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π² языках высокого уровня. Π’Π°ΠΊΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ являСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, sibling call optimization. Если список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄Π²ΡƒΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½, ΠΈ пСрвая функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΡƒΡŽ с этими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Ρ‚ΠΎ инструкция Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ call ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π° Π² ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ бСзусловного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° jmp Π² сСрСдину Ρ‚Π΅Π»Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° «нСструктурных» ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ появлСниС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ, появлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с нСсколькими Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π° ΠΈΠ»ΠΈ нСсколькими Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌ источником «нСструктурных» конструкций Π² машинной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Π‘ΠΈ++.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, хотя Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ случаС компилятор Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ структурированный ΠΊΠΎΠ΄, ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‰ΠΈΠΉΡΡ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΡŽ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, достаточно Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΈ «нСструктурированный» ΠΊΠΎΠ΄. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² этом случаС влияниС программиста, ΠΏΠΈΡˆΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС Π‘ΠΈ, Π½Π° структуру Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ возмоТностями языка Π‘ΠΈ, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ Π±Π΅ΡΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния ΠΌΠ΅ΠΆΠ΄Ρƒ функциями ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли восстанавливаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с языка ассСмблСра, получСнная Π² Ρ€Π΅Π·Ρƒ-Π»ΡŒΡ‚Π°Ρ‚Π΅ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘ΠΈ, Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ содСрТит «нСструк-Ρ‚ΡƒΡ€Π½Ρ‹Ρ…Β» особСнностСй, описанных Π²Ρ‹ΡˆΠ΅, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

3.2. ВыявлСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π’ языках высокого уровня, Π² частности, Π‘ΠΈ поддСрТиваСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ языкС Π‘ΠΈ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ здСсь ΠΌΡ‹ рассматриваСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π² Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ здСсь Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ.

Бпособы ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ спСцифицированы ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ составной Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ABI (application binary interface). Под ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ здСсь понимаСтся, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ‚ΠΈΠΏ процСссора ΠΈ Ρ‚ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Win32/i386 ΠΈΠ»ΠΈ Linux/x86_64. Одной ΠΈΠ· Π·Π°Π΄Π°Ρ‡ ABI являСтся обСспСчСниС совмСстимости ΠΏΠΎ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, скомпилированных Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ компиляторами ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка ΠΈΠ»ΠΈ написанных Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках.

Π’Π°ΠΊ, для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ win32/i386 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько соглашСний ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². БоглашСниС ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² _cdecl ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Π‘ΠΈ ΠΈ Π‘ΠΈ++ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ особСнности [9]:

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ этот Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» – это ΠΈΠΌΠ΅Π½Π½ΠΎ соглашСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Β«Π΄ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎΒ» Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² сгСнСрированном ΠΊΠΎΠ΄Π΅. Пока Ρ€Π΅Ρ‡ΡŒ Π½Π΅ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ± интСрфСйсС с нСзависимо скомпилированными сторонними модулями, программист ΠΌΠΎΠΆΠ΅Ρ‚ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΏΡ€Π°Π²ΠΈΠ»Π°, сущСствСнно затрудняя Π·Π°Π΄Π°Ρ‡Ρƒ автоматичСского восстановлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° дСкомпилируСтся ΠΈΠ· автоматичСски ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ассСмблСрного ΠΊΠΎΠ΄Π° (Π»ΠΈΠ±ΠΎ компилятором, Π»ΠΈΠ±ΠΎ дизассСмблСром), Ρ‚ΠΎ Π² Π½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ соглашСния ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ мноТСства. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ соглашСния ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ выявлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ слСдуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ особСнности Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

Π’ случаС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ ΠΏΡ€ΠΈ статичСском Π°Π½Π°Π»ΠΈΠ·Π΅ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСизвСстСн адрСс Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ этом случаС Π½Π΅ прСдставляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ возвращаСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ соглашСния ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… Ρ‚ΠΎΠ³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎ Π½Π° Ρ„Π°Π·Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°.

Π˜Ρ‚Π°ΠΊ, Π½Π° Ρ„Π°Π·Π΅ выявлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ опрСдСляСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ способ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ дальнСйшСм эта информация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΈ восстановлСнии символичСских ΠΈΠΌΠ΅Π½ ΠΈ восстановлСнии Ρ‚ΠΈΠΏΠΎΠ².

3.3. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·

Одним ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ„Π°Π· Π°Π½Π°Π»ΠΈΠ·Π° ассСмблСрного листинга ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° инструкций ассСмблСрного листинга Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ выявлСниС Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Ρ…ΠΎΠ΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Для восстановлСния ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… конструкций сначала строится Π³Ρ€Π°Ρ„ ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. По Π³Ρ€Π°Ρ„Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния строится Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄ΠΎΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ Π΄ΡƒΠ³ΠΈ Π³Ρ€Π°Ρ„Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° «прямыС», Β«ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅Β» ΠΈ «косыС».

На основании этой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСпосрСдствСнно структурный Π°Π½Π°Π»ΠΈΠ·, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ восстановлСниС высокоуровнСвых ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… конструкций [6]. Поиском Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ Π² Π³Ρ€Π°Ρ„Π΅ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ основных структурных конструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру.

3.4. ВосстановлСниС Ρ‚ΠΈΠΏΠΎΠ²

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΆΠ΅ всС дСкомпиляторы, ΠΊΡ€ΠΎΠΌΠ΅ Hex-Rays, Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π΄Π°ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π° Π² выраТСниях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ явноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ восстановлСнныС выраТСния слоТными для понимания ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

4. Π―Π·Ρ‹ΠΊΠΈ высокого уровня с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ

Π―Π·Ρ‹ΠΊΠΈ высокого уровня ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции прСдставлСния Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, избавляя программиста ΠΎΡ‚ нСобходимости Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… дСталях. Π­Ρ‚ΠΈ языки ΡΠΎΠΏΠ΅Ρ€Π½ΠΈΡ‡Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎ простотС использования ΠΈ гибкости, Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ компиляторов ΡΠΎΠΏΠ΅Ρ€Π½ΠΈΡ‡Π°ΡŽΡ‚ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сгСнСрированного ΠΈΠΌΠΈ ΠΊΠΎΠ΄Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, имССтся большоС количСство Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… языков высокого уровня, ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… сущСствуСт мноТСство компиляторов.

ΠŸΡ€ΠΈ восстановлСнии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° языкС Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, имСя ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ прСдставлСниС ΠΎ языкС высокого уровня, Π½ΡƒΠΆΠ½ΠΎ с достаточной Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ написано Π½Π° языкС высокого уровня Π² исходном тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ восстановлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сильно зависят ΠΎΡ‚ языка высокого уровня, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»Π° написана исходная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

Π―Π·Ρ‹ΠΊ Π‘ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ считаСтся языком высокого уровня, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π½Π΅ΠΌ присутствуСт ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Ρ€Ρ‚ языка Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня. Π’ частности, Π² языкС Π‘ΠΈ поддСрТиваСтся прямой доступ ΠΊ памяти ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с указатСлями. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнтам массива Π½Π΅ контролируСтся Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ доступ ΠΊ областям памяти, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ массиву. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π² языкС Π‘ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ высокоуровнСвыС конструкции, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…: массивы, структуры, объСдинСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ Ρ‚. Π΄.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΡΠΎΠ±ΡƒΡŽ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‚ дСкомпиляторы, Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ассСмблСрный листинг Π² язык Π‘ΠΈ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанныС ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π° языкС Π‘ΠΈ, ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ язык ΠΈ Ρƒ Π½Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… особСнностСй. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, язык Π‘ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСтся Π² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΈ большоС количСство систСмных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ написано ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° языкС Π‘ΠΈ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· ассСмблСра Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ слоТнСС, Π΄Π° ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, рСализованная Π½Π° основС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ программирования, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ посрСдством Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π΅Π΅ ΠΊΠΎΠ΄Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ мноТСство рассматриваСмых дСкомпиляторов Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Π½Π° языкС Π‘ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, прСдставлСнныС Π»ΠΈΠ±ΠΎ Π½Π° языкС ассСмблСра, Π»ΠΈΠ±ΠΎ Π² Π²ΠΈΠ΄Π΅ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ².

5. ДСкомпиляторы Π² язык Π‘ΠΈ

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ даСтся ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π° сСгодняшний ΠΌΠΎΠΌΠ΅Π½Ρ‚ дСкомпилятров Π² язык Π‘ΠΈ. Π­Ρ‚ΠΎ – дСкомпиляторы Boomerang [5], DCC [8], REC [14] ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ Hex-Rays [10] ΠΊ дизассСмблСру IdaPro [11]. ВсС рассматриваСмыС дСкомпиляторы, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° Hex-Rays, Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ исполняСмый Ρ„Π°ΠΉΠ», ΠΈ Π²Ρ‹Π΄Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС Π‘ΠΈ. Π’ Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° дСкомпилятор оказываСтся Π½Π΅ Π² состоянии Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘ΠΈ, этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ сохраняСтся Π² Π²ΠΈΠ΄Π΅ ассСмблСрной вставки. Надо Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ нСбольшиС исходныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС дСкомпиляции Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ содСрТат ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ассСмблСрных вставок, Ρ‡Ρ‚ΠΎ практичСски сводит Π½Π° Π½Π΅Ρ‚ эффСкт ΠΎΡ‚ дСкомпиляции.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ этого, ΠΏΠ»Π°Π³ΠΈΠ½ Hex-Rays ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡΠ²Π»ΡΡŽΡ‰ΡƒΡŽΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ дизассСмблСра Ida Pro, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ схСму ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ассСмблСро-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ языкС программирования. Π’ качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Hex-Rays Π²Ρ‹Π΄Π°Π΅Ρ‚ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² Π²ΠΈΠ΄Π΅ схСмы Π½Π° Π‘ΠΈ-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ языкС программирования. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, для простоты ΠΌΡ‹ Π² дальнСйшСм объСдиним процСсс дизассСмблирования с использованиСм Ida Pro ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ дСкомпиляции.

5.1. Boomerang

ДСкомпилятор Boomerang [5] являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ обСспСчСниСм с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ (open source). Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° этого дСкомпилятора Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Π² 2002 Π³ΠΎΠ΄Ρƒ, Π½ΠΎ сСйчас ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ развиваСтся достаточно вяло. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ дСкомпилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ восстанавливаСт исходный ΠΊΠΎΠ΄ ΠΈΠ· исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ², Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, с использованиСм ΠΊΠ°ΠΊΠΎΠ³ΠΎ компилятора ΠΈ с ΠΊΠ°ΠΊΠΈΠΌΠΈ опциями исполняСмый Ρ„Π°ΠΉΠ» Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½. Для этого Π² качСствС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСдставлСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ со статичСскими ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌΠΈ присваиваниями (SSA). Однако, нСсмотря Π½Π° ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Ρ†Π΅Π»ΡŒ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ дСкомпилятор Π½Π΅ сильно Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ компиляторы ΠΈ чувствитСлСн ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ, Π² частности, ΠΎΠΏΡ†ΠΈΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ, Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΡΡŽΡ‰Π΅ΠΉ использованиС дСкомпилятора Boomerang, являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ Π½Π΅ поддСрТиваСтся распознаваниС стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ΠΈ.

5.2. DCC

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ этого дСкомпилятора [8] Π±Ρ‹Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π² 1991 Π³ΠΎΠ΄Ρƒ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ Π² 1994 Π³ΠΎΠ΄Ρƒ с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π³Π»Π°Π²Π½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ стСпСни PhD. Π’ качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… дСкомпилятор DCC ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 16-Π±ΠΈΡ‚Π½Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ DOS EXE. Алгоритмы дСкомпиляции, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² этом дСкомпиляторС, основаны Π½Π° Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ² (Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния). Для распознавания Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сигнатурный поиск, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° сигнатур. Однако Π½Π°Π΄ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, нСсмотря Π½Π° это, дСкомпилятор ΠΏΠ»ΠΎΡ…ΠΎ справляСтся с выявлСниСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *