Elméleti alapozás
Kérdés - Visszafejthető-e a forráskód .class és .jar állományokból?
Az előző, Interpreter-compiler-linker-bytekód és egy kis pinjin-átírás című fejezetben beszéltünk köztes és végső, futtatható kódokról, amely Java esetében köztes (.class) és végső (.jar) kiterjesztésű állományokra bontható és amely Java-kódfajták rendszerszintű működése kissé eltér a "hagyományosnak" mondható kódfajtáktól (például C-forráskódból .exe kiterjesztésű állomány).
A tanítványi kérdés az volt, hogy visszafejthető-e a forráskód .class és .jar állományokból?
A köztes .class bytekódokból minden további nélkül, de valójában nem okoz gondot a .jar állományok gyors visszafejtése sem. Ehhez rekordgyorsaságú kereséssel találtam meg az Interneten a JD-GUI (Java Decompiler Graphical User Interface) nevű programot, amely egyaránt képes .class és .jar állományok visszafejtésére:
Ugyanis itt kell megjegyeznünk, hogy a .jar állomány voltaképpen nem olyan "tömör" fájlformátum, mint mondjuk az .exe, hanem inkább csak csomagoló jelleggel rendelkezik: voltaképpen .class bytekódok, valamint egyéb formátumú (.txt, .MF, .tld, stb.), konfigurációs és metaadatokat tartalmazó fájlok konténerformátuma:
Ennek fő oka, hogy nem a .jar állomány környezetfüggő, hanem az azt futtató JVM, a JVM tehát a futtatáshoz elsősorban körmyezetfüggetlen .class fájlokat vár.