LINUX.ORG.RU

Сохранение чистых классов


0

1

Добрый день Ув.пользователи портала. Прошу помощи в следующем. Есть модуль который при компиляции менят байт код в каждом классе, что делает библиотеку jar не восприимчивой к декомпиляции, так же есть дектриптор, который подключается при загрузке(используется свой загрузчик) и классы в оперативную память передаются уже в чистом виде.

Вопрос, как считать эти классы из памяти? В какое направление копать?

декомпилировать декриптор и взяв его алгоритм восстановить классы. а вообще за такой вопрос могут и забанить

_________

//wfrr

anonymous ()
Ответ на: комментарий от anonymous

Про декриптор я написал чтоб было понятно, и про взять алгоритм тоже ясно, тут проблема что ключ может менятся. И поэтому лучше считывать информацию из памяти, поэтому и прощу помощи.

byldas ()
Ответ на: комментарий от baverman

проще тупо подцепиться на вызов метода классловадера и сковырять оттуда байтики.

_________

//wfrr

anonymous ()
Ответ на: комментарий от anonymous

проще тупо подцепиться на вызов метода классловадера

А можно? Разве AOP либы могут переколбашивать уже загруженные классы? Или есть другие инструменты? Поделись, интересно.

baverman ★★★ ()
Ответ на: комментарий от baverman

дык а кто мешает переколбасить rt.jar ? можно еще попробовать отладчиком подцепиться. Есть еще http://www.csg.is.titech.ac.jp/~chiba/javassist/ но я боюсь жабамашина не даст сделать финту ушами со святаясвятых - класслоадером.

_________

//wfrr

anonymous ()
Ответ на: комментарий от anonymous

А если создать отдельный подключаемый jar в котором в ClassLoader.java

в методе

protected final Class<?> defineClass(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain) throws ClassFormatError { return defineClassCond(name, b, off, len, protectionDomain, true); }

// Private method w/ an extra argument for skipping class verification private final Class<?> defineClassCond(String name, byte[] b, int off, int len, ProtectionDomain protectionDomain, boolean verify) throws ClassFormatError { protectionDomain = preDefineClass(name, protectionDomain);

Class c = null; String source = defineClassSourceLocation(protectionDomain);

try { c = ClassTransform.defineClass3(this,name, b, off, len, protectionDomain, source, verify); } catch (ClassFormatError cfe) { c = defineTransformedClass(name, b, off, len, protectionDomain, cfe, source, verify); }

postDefineClass(c, protectionDomain); return c; }

и сделать сохранение в файл? Сильно не пинайте.

byldas ()

Ув.

и это нормально?

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

Deleted ()
Ответ на: комментарий от byldas

А если создать отдельный подключаемый jar в котором в ClassLoader.java

И кто его загрузит?

baverman ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.