[ tiranin @ 07.10.2005. 09:03 ] @
Gledam neki softver koji mi je došao podu ruku, pa da bih video kako je nešto urađeno odradim dekompilaciju. I nakon toga dekompajler, valjda ne mogavši da sve prevede, ostavi ovakav kod:

Code:

                        _type;
            JVM INSTR tableswitch 0 4: default 100
        //                       0 40
        //                       1 51
        //                       2 62
        //                       3 78
        //                       4 98;
               goto _L1 _L2 _L3 _L4 _L5 _L6
_L2:
            return _field.get(obj);
            Exception e;
            e;
            e.printStackTrace();
            return null;
.
.
.

Da li bi to moglo da se razume kao:
Code:
      switch(type){
                     case 0:
                           try{
                                    return get_field(obj);
                           }catch(Exception e){
                                   e.printStackTrace();
                                   return null;
                           }
.
.
.
              }



Gde bih mogao da nađem tekstove nao ovu temu, tj. kako da rastumačim ono što mi dekompajler ne prevede na razumljiv oblik ?
Inače isto mi se dešava sa dva dekompajlera, FrontEndPlus i DJ Java Decompiler 3.7.
[ Java Beograd @ 07.10.2005. 09:10 ] @
Kod koji ti je "došao do ruke" je obfusciran. To se ne može bolje dekompajlirati.
[ tiranin @ 07.10.2005. 10:26 ] @
Ne, nije obfuskacija u pitanju.
To zaključujem jer su sve klase u paketima "normalnog" imena, sve promenljive takođe. Pretpostavljam da JAD ima neku falinku, tj. da neke konstrukcije ne ume da prepozna do kraja. Ja sam našao na JAD home page-u objašnjenja autora o nekim drugim greškama s kojima sam se sreo, ali nisam našao za ovo što sam postovao.
Zato sam i postavio pitanje, da čujem ima li sličnih iskustava i da li sam pravilno rastumačio dekompajliran kod.
[ Damjan S. Vujnovic @ 07.10.2005. 10:45 ] @
Lepo ti covek kaze da je kod obfuskovan... Postoji vise nivoa obfuskacije, ovo je klasicna fora kada obfuskator ubacuje instrukcije JVM-a koje nemaju odgovarajuce konstrukcije u Javi.

DSV
[ Java Beograd @ 07.10.2005. 11:42 ] @
Ne može JAD da "ima falinku". Jad mali ascii fajl koji opisuju jar.
[ tiranin @ 08.10.2005. 08:57 ] @
Ok, nemam nameru da otvaram debelu polemiku. Malo mi je nelogično da u softveru od 106 klasa, samo 8 bude obfuskovano. I u tih 8 sam odradio kako sam mislio u prvom javljanju i sve je proradilo bez greške. I kod je potpuno čitljiv. Nisu promenljive poput a1, aa1, aaa1 i sl. već normalne engleske reči.
Onda je u pitanju mnogo loša obfuskacija.

Citat:
Java Beograd: Ne može JAD da "ima falinku". Jad mali ascii fajl koji opisuju jar.

A zašto ne može? JAD je softver kao i svaki drugi i može da ima falinku.
[ mucky @ 08.10.2005. 13:33 ] @
JAD fajl nije softver, ali mozhe da ima falinku koja se dodushe ne mozhe
manifestovati nikako po pitanju obfuskacije onoga shto je u .jar fajlu.

Mislim da bi trebalo da malo bolje prochitash te silne tutoriale
o J2ME na netu.

------=_Part_3356_28106294.1128774685516
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

esauth:139131:0582c5442340ce35e43f5a92ffe10d17<br>
[ Skaarj @ 08.10.2005. 13:41 ] @
.jad je fajl koji opisuje .jar arhive. Covek ovde govori o jad.exe. Fajlu koji je dekompajler Java bajt koda.

Sto se tice obfuskacije koda. Kako je ranije pomenuto postoji nekoliko nivoa. Netbeans (sa cini mi se progardom) definise cak 10 razlicitih nivoa obfuskacije. Tako da su moguce razne varijante.
[ tiranin @ 08.10.2005. 15:08 ] @
Zvanična JVM specifikacija kaže sledeće:
Code:
int chooseNear(int i) {
    switch (i) {
        case 0:  return 0;
        case 1:  return 1;
        case 2:  return 2;
        default: return -1;
    }
}

compiles to

Method int chooseNear(int)
   0    iload_1                // Push local variable 1 (argument i)
   1     tableswitch 0 to 2:         // Valid indices are 0 through 2
        0: 28            // If i is 0, continue at 28
         1: 30            // If i is 1, continue at 30
         2: 32            // If i is 2, continue at 32
        default:34        // Otherwise, continue at 34
  28     iconst_0            // i was 0; push int constant 0...
  29     ireturn                // ...and return it
  30     iconst_1            // i was 1; push int constant 1...
  31     ireturn                // ...and return it
  32     iconst_2            // i was 2; push int constant 2...
  33     ireturn                // ...and return it
  34     iconst_m1            // otherwise push int constant -1...
  35     ireturn                // ...and return it

Slagali se sa mnom ili ne. ali to je vrlo slično onome što mi je dekompajler izbacio. Ako je obfuskacija, onda je vrlo loša, i mislim da bi ovako nešto dekompajler morao da korektno prikaže, jer se sa par minuta gledanja vrlo lako rekonstruiše ispravan kod. Očigledno je JAD prepoznao da se radi o JVM instrukciji tableswitch i ispisao je offsete.

Citat:
Skaarj: .jad je fajl koji opisuje .jar arhive. Covek ovde govori o jad.exe. Fajlu koji je dekompajler Java bajt koda.

Naravno da govorim o JADu - Java decompileru, koji je engine za skore sve front-end dekompajlere koji se mogu naći. Ne znam otkuda ovde ideja da govorim o običnom ASCII fajlu, koji je rezultat dekompilacije !?
[ Taranto @ 29.05.2006. 23:54 ] @
Da li neko zna kako moze us pomoc NetBeans-a da se vrsi obfuskacija samostalno ili uz pomoc ProGuarda?

Usput, kad u JBuilder-u u;itam projekat radjen u NetBeansu i pokusam da ga kompajliram dobijam neke glupe greske, npr:
u klasi AbstractTableModel u funkciji

public Object getValueAt(int col, int row){
return 0;
}

prijavi gresku da vracam nula a ocekuje se Object ??!!

Unapred HVALA !!!