Reverse Engineering är konsten att dumpning enskilda , maskin - nivå kommandon som utgör ett kompilerat program och använda den för att återskapa den ursprungliga källkoden . Medan någon kompilerat program kan bakåtkompileras , den bytekod som gör upp sammanställts Java-program behåller flera identifierande egenskaper som gör reverse engineering det mycket lättare än andra kompilerad kod . Byte Code
Java sammanställer inte direkt till maskinläsbar kod , utan snarare i vad som kallas " bytekod . " Programmeraren distribuerar denna bytekod , och när slutanvändare starta programmet , Java Virtual Machine sammanställer bytekod till plattformsspecifik maskinkod . Även om detta ger Java fördelen att tillåta en enda källkod till verket på flera maskiner , bevarar bytekod flera beskrivande funktioner i källkoden som gör det lättare för hackare att rekonstruera den ursprungliga källkoden .
reverse engineering
Hackare kan läsa ett Java-program för byte-kod direkt , med hjälp av " java.io.inputstream " bibliotek . Med detta kan man se de centrala delarna och byte kodkommandon nivå som utgör just den klassen filen . Hackare kan sedan spåra olika variabler i olika metoder för att successivt rekonstruera kontrollen flödet av programmet . När hackers gör detta , kan de upprepa programmets källkod för olika skadliga syften.
Attacks
Efter ingenjörer hacker omvänd ett visst program , det finns flera sätt han kan utnyttja detta för att få tillgång till maskiner som kör det programmet. Dessa inkluderar sårbarheter att utnyttja för att göra programmet köra skadlig kod med användarbehörighet , eller utför en " man i mitten " attacken . I det senare scenariot skulle hacker lägga sin egen skadlig kod programmets källkod , kompilera den och lägga den på Internet under täckmantel av det ursprungliga programmet . Ovetande användare sedan kan ladda ner programmet och direkt exekvera hacker kod .
Förhindra Reverse Engineering
grund av arten av Java byte-kod , är det nästan omöjligt att stoppa någon från att visa koden kärnan byte . Även metoder som kryptering kan ge ett visst skydd , desto effektivare krypteringen är , desto mindre plattformsoberoende programmet blir . Programmerare kan dock kasta omvänd ingenjörer med ett par kodning tricks . Dessa inkluderar att skriva funktioner som är irrelevanta för programmets egentliga utförandet , vilket kan kasta bort dem som försöker dekonstruera programmet .