Вопрос

У меня есть банка, в которой все классные файлы имеют свой магический номер, а тип удалены, я не очень хорошо осведомлен об этой конкретной области.Что было бы лучшим способом поступить в 0xcafebabe и обратно в каждый класс и переупаковки банку?

Редактировать: Я проверил, только волшебное число отсутствует, файлы не повреждены, если я добавлю его вручную.

Это было полезно?

Решение

Если вы хотите сделать это во время выполнения, вы можете создать свой собственный класс загрузки.Я приложил некоторый псевдо-код, который может заставить вас в пути:

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);



  }

}
.

Но я думаю, что лучше просто исправить файл JAR, используя некоторые ОС.

Другие советы

Если вы просто хотите добавить магический номер обратно в файлы классов, вы можете использовать простой скрипт оболочки для этого (при условии, что вы находитесь на Linux или Cygwin в Windows).

Сначала создайте файл только с 4 байтами заголовка (cafebabe).

Затем извлеките файлы классов из банки в какой-то каталог и запустите эту команду в корне:

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

Примечание. Приведенный выше скрипт работает в Bash, но вы сможете написать что-то подобное для любой оболочки или даже для Windows.

Но что вы подразумеваете под «их волшебным числом и тип удалены »?Если бы байткод каким-либо образом был потрясен, изменения могут быть намного сложнее исправить, если не невозможно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top