A decompiler-ek (vagy kódvisszafejtő programok)
olyan programok, melyek a fordÃtóprogramokkal ellentétes műveletet hajtanak végre.
Azaz az alacsony absztrakciós szintű (gépi kódú) futtatható programokat fejtik vissza (amelyek számÃtógépek által értelmezhetÅ‘ formában vannak) magasabb absztrakciós szintű kóddá, (amelyet emberek által olvasható formában jelenÃtenek meg).
Bevezetés
A "decompiler" kifejezést leginkább olyan programoknál használják, amelyek futtatható programokat (a fordÃtóprogramok kimenetét) visszafejtik egy (viszonylag) magas szintű nyelvben Ãrott forráskóddá. Ha ezt a visszafejtett kódot ismét lefordÃtjuk (egy fordÃtóprogram segÃtségével), akkor a létrejövÅ‘ program működése megegyezik az eredeti programéval.
Ezzel szemben a disassembler-ek a futtatható programot assembly nyelvre fejtik vissza (amit valamilyen assembler segÃtségével lehet újra lefordÃtani futtatható programmá).
A kódvisszafejtés (decompilation) az a folyamat, melynek során egy ilyen programot használunk. Az angol decompilation jelentheti magát a visszafejtett kódot is.
Ezt a folyamatot használhatjuk abban az esetben, ha elveszett a forráskód, vagy hibajavÃtásra, biztonsági rendszerekben, vagy interoperability-ben.[1]
A kódvisszafejtés sikere azon múlik, hogy mennyi információ található a visszafejtendÅ‘ kódban és azon is hogy az elvégzett kód-analÃzis mennyire kifinomult.
A bytecode formátumok, melyet a virtuális gépek használnak (pl. a Java Virtual Machine) gyakran jelentÅ‘s mennyiségű metaadatot tartalmaznak valamint olyan magasabb szintű adatokat, melyek jelentÅ‘sen megkönnyÃthetik a kódvisszafejtést. A gépi kód ezzel szemben alig tartalmaz metaadatot, ezért sokkal nehezebb visszafejteni.
Egyes fordÃtóprogramok vagy fordÃtás után futtatott programok obfuscated code-ot (összezavart kód) képeznek (abból a célból, hogy megnehezÃtsék a kódvisszafejtést).
Ezt a módszert a reverse engineering megnehezÃtésére találták ki.
Fázisok
A decompilerek felfoghatók úgy is mint programok sorozatai, melyek mindegyike a teljes visszafejtési folyamat egyes fázisait hajtja végre.
Betöltő (Loader)
Parancsokra bontás (Disassembly)
Idiómák
ProgramanalÃzis
TÃpusanalÃzis
Strukturálás
Kódgenerálás
Jogállás
Jegyzetek
Lásd még
Decompiler-ek
Java
- jdec: java decompiler A jdec egy szabad forrású java decompiler, rengeteg hasznos lehetőséggel rendelkezik. Pillanatnyilag a SourceForge szállásolja. Java osztály fájlok visszafejtésén, szétszedésén valamint részletes információk kinyerésén felül támogatja még a jar fájlok visszafejtését is és Swing felhasználói felülettel is rendelkezik.
- Jad – the fast JAva Decompiler – A Jad egy teljesen C++-ban Ãródott program, ezért sokszorta gyorsabb a Java-ban Ãrt visszafejtÅ‘knél. Az 1.5.6 verziótól kezdve üzleti felhasználásra nem ingyenes, de otthoni felhasználásra továbbra is szabadon használható. Sok grafikus kezelÅ‘felület létezik hozzá, például a Jadclipse, egy bÅ‘vÃtmény az Eclipse fejlesztÅ‘i környezethez.
.NET
- .Net Reflector egy ingyenes segédprogram, melyben van Osztály böngésző (Class Browser), Static analysis és kódvisszafejtő.
- Dis# – .NET decompiler használatával szerkesztheted a lokális változókat valamint további neveket a visszafejtett kódban és a változásokat project fájlokba mentheted.
- jsc – .NET decompiler ezen programmal a megÃrt c# programodat php, java vagy javascript programmá, kóddá tudod átfordÃtani.
Gépi kód
- The Boomerang Decompiler egy nyÃlt forráskódú próbálkozás egy újratervezett gépi kódbontóban. Jelenleg képes kicsiny bináris fájlok (Pentium, SPARC és PowerPC) lebontására a C nyelvre. A Boomerang BSD-szerű licenc alatt érhetÅ‘ el, és különbözÅ‘ Unix és Windows platformokon futtatható.
- REC – Reverse Engineering Compiler :Giampiero Caprino. A REC egy hordozható fordÃtott mérnöki fordÃtó vagy dekompilátor. A gépkód-fájlt az egyik architektúra egyikére olvassa, és megpróbálja létrehozni a kód és a C-szerű ábrázolásokat a futtatható fájl felépÃtéséhez. A REC több verziója letölthetÅ‘ ingyen.
- dcc – Dos C Decompiler decompiles .exe fájlokat a (i286, DOS) platformról C programokra.