В Java class
файл представляет из себя файл с байт-кодом. Для его изменения достаточно внести изменение в исходный код, а затем скомпилировать его. Это можно сделать в среде разработки, нажав на зеленый треугольник, или вручную, запустив приложение-компилятор.
// Компилируем измененный файл с исходным кодом javac Main.java
Появится файл с именем Main.class . Этот файл представляет из себя байт-код, сгенерированный компилятором. Запускаем этот файл, т.е. нашу программу, внутри JVM .
java Main
Редактирование .class файлов
Есть JAR файл. Необходимо декомпилировать один из его классов, отредактировать одно значение и закомпилировать обратно.
Отслеживать
11.5k 8 8 золотых знаков 42 42 серебряных знака 69 69 бронзовых знаков
задан 14 сен 2011 в 19:52
451 1 1 золотой знак 7 7 серебряных знаков 24 24 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Если хотите сделать это одноразово, то попробуйте JAD. Но учтите, что декомпиляторы не всегда могут получить исходник из .class-файла. Предположим, вы сумели его декомпилировать верно. После этого, его надо собрать обратно. Чтобы это сделать, надо воспользоваться компилятором.
javac -cp исходный.jar:библиотеки.jar исправленный.класс.java
(если под виндой, то библиотеки надо разделять точкой с запятой вместо двоеточия)
Ну а потом запаковать с помощью утилиты jar или какого-нибудь winrar
Если JAD не выдаёт плохой исходник, то можно попробовать другие варианты декомпиляторов. В худшем случае, вам придётся после декомпиляции разбираться в байткоде и руками править неверно декомпилированный код.
UPD
Также есть возможность вскрыть .class-файл и править его с помощью Apache BCEL. С его помощь можно подгрузить класс, модифицировать его, а потом обратно записать. Правда Apache BCEL - программное средство, а не тула, так что вам придётся написать программу, которая бы патчила класс нужным образом.
Как редактировать class файлы java
Редактирование .class файлов напрямую не является обычной задачей в Java . .class файлы представляют байт-код, который генерируется компилятором Java из исходного кода и который затем выполняется на виртуальной машине Java ( JVM ).
Если вам необходимо изменить функциональность существующего класса, обычно рекомендуется изменить исходный код Java и скомпилировать его снова в .class файл. Если у вас нет доступа к исходному коду, вы можете использовать декомпилятор Java для получения Java-кода из существующего .class файла, изменить его и затем скомпилировать его обратно в .class файл.
Также существуют инструменты, которые позволяют редактировать .class файлы напрямую. Например, такими инструментами являются Java Class Editor или JBE . Однако, редактирование .class файлов напрямую может привести к нежелательным побочным эффектам и ошибкам, поэтому перед использованием таких инструментов следует оценить возможные риски и преимущества.
Редактирование class файлов
Редактирование class файлов – «больная» для большинства модмейкеров тема, ведь что бы достигнуть определенного результат в этом деле нужно не только иметь начальные знания программирования, а еще и терпение и усидчивость, ибо большинство параметров определяется «методом тыка».
На данный момент модмейкеров, которые умеют и любят редактировать class файлы, почти не осталось, поэтому я и решил написать данный урок.
Процесс редактирования класс файлов моим методом можно условно поделить на четыре этапа:
I. Дешифровка class файла
II. Редактирование class файла
III. Шифрование class файла
IV. Оптимизация class файла для выполнения на устройствах (научно выражаясь, преверификация)
Для начала нам нужно скачать KEmulator любой версии(ну я надеюсь он есть у всех) и пак программ, ссылку на который я напишу в конце статьи. Скачали ? Ну тогда начинаем.
Для удобства мы начнем с создания каталогов, которые просто необходимые в данной ситуации, ибо если все бросать в одну папку, то рано или поздно можно запутаться и потерять отредактированный class файл. Для этого проходим по пути …\KEmulator\file\root\ , если вдруг папки file нет, то берем и создаем её. После того, как открыли папку root, создаем в ней папки со следующими названиями:
• сlass – эта папка будет содержать в себе оригинальные class файлы
• j – эта папка будет содержать дешифрированные class файлы
• nclass – эта будет содержать отредактированные class файлы
• ver – эта будет содержать преверифицированные class файлы
т.е. в конечном итоге у вас должно получится что-то похожее
конечный результат
После создания каталогов мы можем приступать к редактированию class файлов. Для начала копируем необходимый class файл и запускаем программу d2j.jar в kemulator’e. Сразу же, без всяких церемоний, мы видим окно с двумя полями для ввода адресов
В первом поле мы вводим адрес class файла т.е. «\root\class\*.class», где *- название класса
Во втором поле мы вводим адрес папки, в которой будет сохранен дешифрированный class, в нашем случае это «\root\j\»
После ввода путей, нажимаем кнопочку, которая находится в правом нижнем углу или клавишу F2. После пары секунд раздумий, программа выдаст нам желаемый результат
На этом с дешифрацией class файла покончено.
После того, как мы выполнили дешифрацию класс файла, в папке j появится файл с названием *.j, где * - название класс файла. Файлы формата .j можно открывать стандартным блокнотом Windows, хотя я рекомендую использовать WordPad, так как он поддерживает форматирование текста, из чего следует повышение вашего комфорта.
Описывать куда, что и как нужно изменить в class’е для получения результата, я не буду, так как на эту тему написан не один десяток статей и для каждой игры свои особенности их редактирования. После внесения изменений не забываем сохраниться.
Шифрование, как вы уже должны были догадаться, этот процесс обратный дешифрованию, поэтому на вход мы дадим файл формата .j, а на выходе получим заветный . class.
Для начала мы запускаем j.jar в kemulator’е и видим подобное окно с двумя полями для ввода адресов
В первом поле мы указываем адрес к .j файлу т.е. к тому, который мы открывали и редактировали в WordPad’e. В нашем случае путь будет выглядеть так «\root\j\*.j» где * - название .j файла
Во втором поле мы указываем адрес к папке, в которой будет храниться новый class файл. В нашем случае адрес будет выглядеть так «\root\nclass\».
После ввода путей нажимаем кнопку в правом нижнем углу или клавишу F2. В результате у Вас должно выскочить подобное уведомление.
После получения class файла в 3ем пункте, нам необходимо выполнить преверификацию. Это необходимо для оптимизации class файла, что бы мод мог спокойно работать на мобильных телефонах, т.е. для внутренних тестов на kemulator’e её можно не выполнять.
Что бы выполнить преверификацию , мы запускаем preverifier.jar в kemulator’e и видим такое окно с двумя полями для ввода адресов.
В первом поле мы указываем адрес к папке с новым class файлом, в нашем случае это «\root\nclass\»
Во втором указываем путь к папке, в которой будут хранится преверифицированные class файлы. В нашем случае это «\root\ver\»
После ввода путей нажимаем кнопку в правом нижнем углу или клавишу F2. В результате у Вас должно выскочить подобное уведомление.
Хочу обратить Ваше внимание на то, что на выходе мы получим class с добавленной в название приставкой в виде названия папки. В нашем случае это выглядит так *class>ver*.class. Разумеется перед возвращением файла на его законное место, эту приставку нужно убрать.
Итог
В данной статье я попытался подробно расписать один из методов редактирования class файлов. Разумеется, имеются и другие, более простые методы редактирования, но зачастую они просты лишь снаружи и не дают возможности воплотить все мысли модмейкера или просто не до конца выполняют свою работу, например, не производят преверификацию class файла.
Категория: Уроки по модификации java | Добавил: Eagle |
Просмотров: 12556 | Комментарии: 5 | Рейтинг: 5.0 / 4 |