webForumDet fria alternativet

Läsa kod i class-filer

6 svar · 850 visningar · startad av Blårand

BlårandMedlem sedan jan. 20032 356 inlägg
#1

Hejsan!

Har gjort ett program i J2ME.
Packade ned "koden" i en jar-fil, med hjälp av en obfuscator som förts gick igenom koden. Den jar-fil som sedan skapades var minimal till storleken. Är nu nyfiken på att se vad obfuscatorn har gjort med koden, och undrar om det finns något sätt att läsa class-filerna i jar-filen, så att man kan se hur koden ser ut?

Har packat upp jar-filen med winzip, och har nu en del ".class"-filer jag skulle vilja se koden i. Går det att får tag på java-koden i "-class"-filerna, så att man kan läsa dessa och se hur koden ser ut?

spangoMedlem sedan juni 20008 205 inlägg
BlårandMedlem sedan jan. 20032 356 inlägg
#3

Den var 110% :)

Programmet gjorde om koden ganska så rejält, och det är studntals svårt att se vad som händer och sker i koden, även om man gjort programmet själv. Men det är ju så det ska vara, och en vanlig omvandling räcker nog långt för att förvilla de som ser koden, så någon kryptering eller extra "fantasikod" lär nog inte behövas.

Men all den kod som nu byggts om, ser i mina ögon väldigt rörig och lite omständig ut. Finns det inte risk för att detta påverkar prestandan på applikationen? Kanske lite dum fråga, men har svårt att se att den nu omvandlade koden skulle vara optimal på något sätt?

Bland annat ser koden lite märkligt ut ibland, se koden nedan. Raderna med "MISSING_BLOCK_LABEL_..." som dyker upp lite varstans i koden, ska jag tolka det som att något är fel i koden, eller är det något form av internkommando?

public final int b()
    {
        int i;
        i = 0;
        e();
        i = a.getNumRecords();
        if(a != null)
            f();
       break MISSING_BLOCK_LABEL_85;
        RecordStoreException recordstoreexception;
        recordstoreexception;
        System.err.println("Felhantering: " + recordstoreexception.getMessage());
        if(a != null)
            f();
       break MISSING_BLOCK_LABEL_85;
        Exception exception;
        exception;
        if(a != null)
            f();
        throw exception;
        return i;
    }
spangoMedlem sedan juni 20008 205 inlägg
#4

Blårand skrev:

Programmet gjorde om koden ganska så rejält, och det är studntals svårt att se vad som händer och sker i koden, även om man gjort programmet själv. Men det är ju så det ska vara, och en vanlig omvandling räcker nog långt för att förvilla de som ser koden, så någon kryptering eller extra "fantasikod" lär nog inte behövas.

Om inte den som dekompilerar vet vad refactoring är, såklart :p

BlårandMedlem sedan jan. 20032 356 inlägg
#5

Enda sättet att distrubiera applikationen utan att någon kan kika och se hur koden ser ut, är väl att de hämtar "jad-filen" på nätet via mobilen, och att filen sedan installerar programmet på mobilen, då från "jar-filen" som ligger i samma katalog. Då kan de ju omöjligt kunna ta del av källkoden?

Känns lite trist om man inte ska kunna distrubiera en applikation på ett bra sätt, utan att andra utvecklare ska kunna ta del av koden.

spangoMedlem sedan juni 20008 205 inlägg
#6

Det går alltid att reverse engineera program, oavsett språk, miljö och plattform. Som bekant.

red. Insåg att jag aldrig svarade på frågan om obfuscatorn orsakade att programmen gick långsammare. Svaret är att det beror på vad den gör, det är möjligt men inte nödvändigt att det blir så. Enklaste sättet att ta reda på det är att köra koden i någon form av stresstest, en uppsättning tester för vanlig kod, en för obfuskerad (måste älska det ordet...) kod.

LimeMedlem sedan sep. 2001961 inlägg
#7

Eftersom jag ibland jobbar lite åt företag där skyddandet av koden är riktigt viktig så kör vi obfuskerare rätt friskt.

Min uppfattning av dessa är att i C++ är det i princip omätbar skillnad och i .NET och Java är den mätbara skillnaden mellan 0.1 och 0.5%. Försummbar med andra ord.

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
132 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)