Загрузчик классов зашифрованной памяти Java - PullRequest
6 голосов
/ 22 октября 2011

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

По сути, у меня есть AES-128bit файл с зашифрованным Jar . Я хочу сделать лаунчер, чтобы я мог загрузить этот зашифрованный Jar-файл в память и запустить его (используя ключ).

У меня работает простой Class Loader, хотя, если я не расшифрую его в каталог и не запусту, он, очевидно, не будет делать то, что мне нужно (расшифровка и загрузка памяти).

TL; DR: мне нужно сделать так, чтобы AES-128bit Encrypted Jar работал в памяти.

Любая помощь очень ценится, не стесняйтесь задавать вопросы!

Ответы [ 2 ]

8 голосов
/ 22 октября 2011

Пример кода о том, как загрузить jar / класс из byte[] (что должно быть результатом, полученным после расшифровки в памяти / нет необходимости сохранять его где-либо в файловой системе), см. http://www.javaworld.com/javaworld/jw-10-1996/indepth/indepth.src.html

В основном вам нужно использовать defineClass для достижения того, что вы хотите.

НО имейте в виду, что это не обеспечивает реальной безопасности, так как все заканчивается (после дешифрования) как байт-код Java в памяти и, таким образом, может быть доступен /манипулирование / сохранение и т. д.

Немного безопасности можно было бы реализовать путем реализации пользовательской JVM и / или предварительного JIT-кода, чтобы он был "родным" ... для получения дополнительной информации см., например, Каксоздать зашифрованный файл Jar?

1 голос
/ 03 ноября 2011

Эта статья является хорошим чтением, которое хорошо иллюстрирует, почему герметичная защита вашего кода просто невозможна. Вы можете сделать это тяжелее, очень трудно, даже оставаясь как можно более низким уровнем, например, скомпилируйте ваш код до нативных инструкций, которые (чисто) не могут быть представлены с использованием конструкций обычного языка.

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

...