Сейчас на форуме: Rio, johnniewalker, vsv1, Magister Yoda, Kybyx (+6 невидимых) |
eXeL@B —› Крэки, обсуждения —› Java получение байт кода |
Посл.ответ | Сообщение |
|
Создано: 01 ноября 2011 14:55 · Личное сообщение · #1 Есть Java программа c зашифрованным байт кодом, никакой декомпилятор ее не берет, при запуске этот код передается на native метод для расшифровки, на выходе получаем объект типа Class<?>. Собственно вопрос как можно получить чистый байт код для последующей декомпиляции ? Используется модифицированный classloader. Кусок кода отвечающий за передачу шифрованного байт кода в native Code:
ClassTransform.defineClass3 - это тот самый native метод |
|
Создано: 02 ноября 2011 08:39 · Личное сообщение · #2 Смотри частично здесь http://exelab.ru/f/action=vthread&forum=1&topic=19192 Используя stacktrace, ставь брейк на методе defineClassCond. Когда брейк сработает, получи все параметры через $m.args - возможно скопируй параметр byte[] b (поскольку он наверняка будет большим) и protectionDomain во внешние переменные, например так byteArray=$m.args[1]; после экспортируй его для внешнего использования :export byteArray Все простые параметры можно либо также экспортировать, либо же записать на листочек и использовать позже То же самое сделай с референсом на сам класс где нужный метод расположен, то есть если метод defineClassCond расположен в классе MyClass то получить референс на класс можно через myClassRef=$m.object; после этого снова экпортируй через :export myClassRef Дальше совсем просто набираем DecryptedClass = myClassRef.defineClassCond(name, byteArray, ... все другие параметры); bc=bytecode(DecryptedClass); print(bc.data); |
|
Создано: 04 ноября 2011 18:06 · Личное сообщение · #3 |
eXeL@B —› Крэки, обсуждения —› Java получение байт кода |