Экспорт запущенной виртуальной машины Java - PullRequest
0 голосов
/ 16 октября 2018

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

Дело в том, что я запускал приложение Java с использованием Eclipse, которое занимает несколько вычислительных дней.Программа-вымогатель зашифровывала как файлы .java, так и файлы .class в папках «src» и «bin», но приложение Java по-прежнему работает нормально, поэтому кажется, что виртуальная машина Java может иметь локальную копию двоичных файлов.Знаете ли вы, есть ли какой-нибудь способ получить файлы .class из работающей JVM?Затем я декомпилирую его, чтобы получить мои исходные файлы.

Большое спасибо заранее и с наилучшими пожеланиями!

Редактировать : Большое спасибо всем.Я извлек файлы .class и затем смог декомпилировать в очень разумные файлы .java. Решение

@ valiano сработало.Обратите внимание, что jvminspector предполагает, что ваши классы не находятся в пакете по умолчанию, в противном случае строка 67 DumpAgent.java выдает исключение (небольшое восстановление в коде необходимо для восстановления, когда lastIndexOf возвращает -1).

@ Решение StephaneM иногда работало, но в некоторых случаях запуск classdumper.jar заставляет Eclipse завершить процесс из-за EXCEPTION_ACCESS_VIOLATION.

Я также нашел еще два решения:

a) похожий проект с именем dumpclass (https://github.com/hengyunabc/dumpclass)

b) класс sun.jvm.hotspot.tools.jcore.ClassDump,Пример использования: java -cp "C: \ Program Files \ Java \ jdk1.8.0_131 \ lib \ sa-jdi.jar" -Dsun.jvm.hotspot.tools.jcore.filter = sun.jvm.hotspot.tools.jcore.PackageNameFilter -Dsun.jvm.hotspot.tools.jcore.PackageNameFilter.pkgList = sun.jvm.hotspot.tools.jcore.ClassDump

...