Domanda

Ho un barattolo in cui tutti i file di classe hanno il loro numero magico e il tipo rimosso, non sono molto ben informato su questa specifica area.Quale sarebbe il modo migliore per accedere a 0xcafebabe e il tipo di ritorno in ogni classfile e reinserire il barattolo?

Modifica: Ho controllato, manca solo il numero magico, i file sono intatti se lo aggiungo manualmente.

È stato utile?

Soluzione

Se desideri farlo in fase di esecuzione, potresti creare il tuo cardografico.Ho allegato un po 'di pseudo-codice che potrebbe farti arrivare in arrivo:

public class MyClassLoader extends SecureClassLoader {

  @Override
  protected Class<?> findClass(String name) throws ClassNotFoundException {
     ...
     FileInputStream fis = new FileInputStream(brokenClassFile);
     BufferedInputStream bis = new BufferedInputStream(fis);
     ByteArrayOutputStream bas = new ByteArrayOutputStream((int) encryptedClassFile.length());
     byte[] wrongBytes = bas.toByteArray(); 
     byte[] goodbytes = ...     
     // add  a new byte[] and put in the appropiate missing bytes for the cafebabe and magic number
     CodeSource cs = new CodeSource(jarfile.toURI().toURL(), (CodeSigner[]) null);
     return super.defineClass(name, goodbytes, 0, bytes.length, cs);



  }

}
.

Ma immagino sia meglio risolvere il file JAR utilizzando alcuni strumenti OS.

Altri suggerimenti

Se vuoi semplicemente aggiungere il numero magico ai file di classe, è possibile utilizzare un semplice script di shell per questo (supponendo che tu sia su Linux o avere cygwin su Windows).

Prima crea un file con solo i 4 byte dell'intestazione (Cafebabe).

Quindi, estrai i file di classe dal barattolo a una directory e eseguire questo comando alla radice:

find . -name "*.class" | while read file; do
    mv ${file} ${file}-old
    cat /path/to/file/with/header ${file}-old > $file
    rm ${file}-old
done
.

Nota: lo script sopra funziona in Bash, ma dovresti essere in grado di scrivere qualcosa di simile per qualsiasi shell, o anche per Windows.

Ma cosa intendi per "avere il loro numero magico e Tipo rimosso "?Se il bytecode è stato manglato in alcun modo, i cambiamenti potrebbero essere molto più difficili da risolvere se non impossibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top