Если весь байт-код, который скомпилирован из источников java, может быть декомпилирован в источники java?

Я вижу, что некоторые декомпиляторы java могут декомпилировать байт-код в читаемые источники java, мне интересно, можно ли снова декомпилировать весь байт-код, который поступает из java (а не из другого языка JVM)?


обновление

извините, позвольте мне сделать вопрос более ясным.

просто поговорите о нормальном Java-коде на JVM (нет Android, нет байт-кода, нет AOP, нет обфускации), и я действительно надеюсь, что байт-код может быть декомпилирован. но я не знаю, есть ли формы java-кода, которые скомпилированы в байт-код, никогда не смогут быть декомпилированы в читаемые источники java.

4 ответов


интересно, можно ли снова декомпилировать весь байт-код, который поступает из java (а не из другого языка JVM), в источники java?

ответа нет.

декомпиляторы не гарантированно работают для всех байт-кодов Java:

  • типичный обфускатор намеренно переставит байт-коды таким образом, что общие декомпиляторы не будут производить читабельный исходный код ... и вероятно не произведет действительный исходный код.

  • многие декомпиляторы там имеют проблемы, связанные с более новыми конструкциями Java.

  • многие декомпиляторы имеют проблемы с байт-кодами, скомпилированными из "сложного" исходного кода.

  • даже если они генерируют компилируемый код,гарантия что код будет правильно.

суть в том, что декомпилятор только так хорош как ум и трудолюбие его автора могут это сделать. Я никогда не слышал об идеальном.


Java byctecode можно декомпилировать обратно в исходный код java. Декомпилированный источник, как правило, не будет выглядеть точно так же, но будет иметь ту же функциональность. Если вы обеспокоены тем, что кто-то может декомпилировать ваш источник, вы можете использовать обфускаторы (например,ProGuard), чтобы помочь.


Да, это (в общем) возможно (для этого существует несколько инструментов). См.: Как "декомпилировать" файлы классов Java?

однако вы можете попытаться защитить свои файлы от этого, см.:как заблокировать скомпилированные классы Java, чтобы предотвратить декомпиляцию?


У меня была возможность декомпилировать несколько кодов java и всегда управлять с помощью доступных инструментов, чтобы думать, что байтовый код генерируется компилятором, этот процесс нужно только отменить, чтобы получить исходный код. Я знаю способ избежать этого.

Я использовал этот инструмент.

java.decompiler.free.fr