Dekompilācijas nozīme un lietojums

click fraud protection

Vienkārši runājot, dekompilācija ir kompilācijas apgrieztā puse: izpildāmā faila tulkošana augstākā līmeņa valodā.

Pieņemsim, ka jūs pazaudējat Delphi projekta avotu un jums ir tikai izpildāmais fails: reversā inženierija (dekompilācija) ir noderīga, ja sākotnējie avoti nav pieejami.

Hm, "avoti nav pieejami", vai tas nozīmē, ka mēs varam dekompilēt citu cilvēku Delphi projektus? Nu, jā un nē ...

Vai ir iespējama patiesa dekompilācija?

Nē, protams nē. Pilnībā automatizēta dekompilācija nav iespējama - neviens dekompilētājs nevarēja precīzi reproducēt sākotnējo avota kodu.

Kad Delphi projekts tiek sastādīts un sasaistīts, lai izveidotu patstāvīgu izpildāmu failu, lielākā daļa programmā izmantoto vārdu tiek konvertēti uz adresēm. Šis vārdu zudums nozīmē, ka dekompilātoram būs jāizveido unikāli nosaukumi visām konstantēm, mainīgajiem, funkcijām un procedūrām. Pat ja tiek sasniegti zināmi panākumi, ģenerētajam "avota kodam" trūkst nozīmīgu mainīgo un funkciju nosaukumu.
Acīmredzot avota valodas sintakse izpildāmajā failā vairs nepastāv. Dekompilētājam būtu ļoti grūti interpretēt mašīnvalodas (ASM) sērijas, kas pastāv izpildāmajā failā, un izlemt, kas bija sākotnējā avota instrukcija.

instagram viewer

Kāpēc un kad lietot dekompilāciju

Reverso inženieriju var izmantot vairāku iemeslu dēļ, no kuriem daži ir:

  • Pazaudēta avota koda atkopšana
  • Lietojumprogrammu migrācija uz jaunu aparatūras platformu
  • Vīrusu vai ļaunprātīga koda esamības noteikšana programmā
  • Kļūdas labojums, ja lietojumprogrammas īpašnieks nav pieejams labošanai.
  • Kāda cita avota koda atkopšana (piemēram, lai noteiktu algoritmu).

Vai tas ir likumīgi?

Reversā inženierija NAV plaisāšana, lai gan dažreiz ir grūti novilkt precīzu līniju starp šiem diviem. Datorprogrammas aizsargā autortiesību un preču zīmju likumi. Dažādās valstīs ir atšķirīgi izņēmumi no autortiesību īpašnieku tiesībām. Visizplatītākie apgalvo, ka ir grūti dekompilēt: interpretējamības nolūkos, ja interfeisa specifikācija nav bijusi pieejama, kļūdu labošanas mērķi, ja autortiesību īpašnieks nav pieejams labošanai, lai noteiktu programmas daļas, kuras neaizsargā autortiesības. Protams, jums jābūt ļoti uzmanīgam / sazinieties ar savu advokātu, ja rodas šaubas par to, vai jums ir atļauts izjaukt kādas programmas exe failu.

Piezīme: ja jūs meklējat Delphi plaisas, atslēgu ģeneratorus vai tikai sērijas numurus: jūs atrodaties nepareizā vietnē. Lūdzu, ņemiet vērā, ka viss, kas šeit atrodams, ir uzrakstīts / pasniegts tikai izpētes / izglītības mērķiem.

Pagaidām Borlands nepiedāvā nevienu produktu, kas varētu dekompilēt izpildāmo (.exe) failu vai "Delphi apkopoto vienību" (.dcu) atpakaļ uz sākotnējo avota kodu (.pas).

Delphi apkopotā vienība (DCU)

Kad Delphi projekts ir sastādīts vai palaists, tiek izveidots apkopots vienības (.pas) fails. Pēc noklusējuma katras vienības apkopotā versija tiek glabāta atsevišķā binārā formāta failā ar tādu pašu nosaukumu kā vienības failam, bet ar paplašinājumu .DCU. Piemēram, unit1.dcu satur kodu un datus, kas deklarēti failā unit1.pas.

Tas nozīmē, ka, piemēram, ja jums ir kāds, tad komponents sastādīts avots, kas jums jādara, ir to mainīt un saņemt kodu. Nepareizi. DCU faila formāts nav dokumentēts (patentēts formāts), un tas var mainīties no versijas uz versiju.

Pēc kompilatora: Delphi Reverse Engineering

Ja vēlaties mēģināt dekompilēt Delphi izpildāmo failu, šīs ir dažas lietas, kas jums jāzina:

Delphi programmu avota faili parasti tiek glabāti divu veidu failos: ASCII koda failos (.pas, .dpr) un resursu failos (.res, .rc, .dfm, .dcr). DFM failos ir ietverta veidlapā ietverto objektu informācija (rekvizīti). Veidojot exe, Delphi kopē informāciju .dfm failos gatavajā .exe koda failā. Veidlapas faili apraksta katru jūsu formas sastāvdaļu, ieskaitot visu noturīgo īpašību vērtības. Katru reizi, kad mainām veidlapas pozīciju, pogas parakstu vai kādai sastāvdaļai Delphi piešķir notikuma procedūru raksta šīs modifikācijas DFM failā (nevis pasākuma procedūras kodu - tas tiek saglabāts pas / dcu fails). Lai iegūtu "dfm" no izpildāmā faila, mums jāsaprot, kāda veida resursi tiek glabāti Win32 izpildāmā failā.

Visām Delphi sastādītajām programmām ir šādas sadaļas: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. No dekompilēšanas viedokļa vissvarīgākās ir sadaļas CODE un .rsrc. Iekš "Funkcionalitātes pievienošana Delphi programmai"rakstā ir parādīti daži interesanti fakti par Delphi izpildāmu formātu, klases informāciju un DFM resursiem: kā pārdalīt notikumus, lai tos apstrādātu citi notikumu apstrādātāji, kas definēti tajā pašā formā. Pat vairāk: kā pievienot savu notikumu apstrādātāju, pievienojot kodu izpildāmajam, tas mainīs pogas parakstu.

Starp daudziem resursiem, kas tiek glabāti exe failā, RT_RCDATA vai lietojumprogrammas definēts resurss (neapstrādāti dati) satur informāciju, kas bija DFM failā pirms kompilācijas. Lai iegūtu DFM datus no exe faila, mēs varam piezvanīt EnumResourceNames API funkcija... Papildinformāciju par DFM iegūšanu no izpildāmās lapas skatiet: Kodē Delphi DFM pētnieku raksts.

Reversās inženierijas māksla tradicionāli ir bijusi tehnisko burvju zeme, kas pārzina montāžas valodu un atkļūdotājus. Ir parādījušies vairāki Delphi dekompilatori, kas ļauj ikvienam, pat ar ierobežotām tehniskām zināšanām, mainīt lielāko daļu Delphi izpildāmo failu.

Ja jūs interesē Delphi reversās inženierijas programmas, iesaku jums apskatīt šādus dažus "dekompilātorus":

Izpildāmo failu (EXE) un dinamiskās bibliotēkas (DLL), uzrakstīts Delfos un izpildīts Windows32 vidē. Galīgais projekta mērķis ir programmas izstrāde, kas spēj atjaunot lielāko daļu sākotnējā Delphi avotu kodi no apkopotā faila, bet IDR, kā arī citi Delphi dekompilētāji to vēl nevar izdarīt. Tomēr IDR ir ievērojamā stāvoklī, lai atvieglotu šādu procesu. Salīdzinājumā ar citiem labi zināmiem Delphi dekompiliatoriem IDR analīzes rezultātam ir vislielākā pilnība un ticamība.

Revendepro atrod gandrīz visas programmas struktūras (klases, tipus, procedūras utt.) Un ģenerē paskālo attēlojumu, procedūras tiks uzrakstītas montētājā. Dažu ierobežojumu dēļ montētājā ģenerēto izvadi nevar pārkompilēt. Šī dekompilētāja avots ir brīvi pieejams. Diemžēl tas ir vienīgais dekompilācijas līdzeklis, kuru es nevarēju izmantot - tas liek ar izņēmumu mēģināt dekompilēt kādu Delphi izpildāmo failu.

EMS Source Rescuer ir ērti lietojama vedņu programma, kas var palīdzēt atjaunot zaudēto avota kodu. Ja pazaudējat Delphi vai C ++ Builder projekta avotus, bet jums ir izpildāms fails, tad šis rīks var glābt daļu no zaudētajiem avotiem. Glābējs ražo visas projekta formas un datu moduļus ar visiem piešķirtajiem īpašumiem un notikumiem. Izgatavotajām pasākumu procedūrām nav pamatteksta (tas nav dekompilētājs), bet izpildāmajā failā tām ir koda adrese. Vairumā gadījumu glābējs ietaupa 50–90% sava laika projekta atjaunošanai.

DeDe ir ļoti ātra programma, kas var analizēt izpildāmās programmas, kas apkopotas ar Delphi. Pēc dekompilācijas DeDe jums sniedz sekojošo:

  • Visi mērķa DSM faili. Jūs tos varēsit atvērt un rediģēt, izmantojot Delphi.
  • Visas publicētās metodes labi komentētā ASM kodā ar atsaucēm uz virknēm, importētajiem funkciju izsaukumiem, klases metožu zvaniem, vienības komponentiem, bloķē izmēģināt, izņemot un mēģināt. Pēc noklusējuma DeDe iegūst tikai publicētos metožu avotus, taču jūs varat arī apstrādāt citu procedūru izpildāmajā failā, ja zināt RVA nobīdi, izmantojot rīkus | Izjaukt izvēlni Proc.
  • Daudz papildu informācijas.
  • Jūs varat izveidot Delphi projekta mapi ar visiem dfm, pas, dpr failiem. Piezīme: pas faili satur iepriekš minēto labi komentēto ASM kodu. Tos nevar pārkompilēt!
instagram story viewer