Выполнение кода с оперативной памяти
Можно ли запустить код в Python, который будет сформирован в оперативной памяти? Есть зашифрованный мной python код и я не хочу чтобы любой мог увидеть реализацию, есть второй файл файл, который при вводе пароля должен расшифровать первый файл в оперативную память и запустить его. В итоге промежуточный расшифрованный файл не будет храниться на диске и при завершении работы второго файла просто "исчезнет". Можно ли такое реализовать? Другие языки не предлагать, библиотеки можно.
Ответы (3 шт):
Самый простой способ - через eval:
eval(decrypt(secret, password).decode())
Есть ещё загрузчик кода, может кто напомнит как его там. Потом можно записать свой загрузчик модулей, который примет шифрованный код.
Но самое простое прогнать через cython и шифрование не нужно будет.
Все решилось банально: Дешифруем файл в переменную и запускаем через exec. Всё.
К чему был вопрос насчёт ОС. На Юниксах (MacOSX, Linux) вместо eval и exec можно легко записать массив данных в оперативку по пути /tmp/*, а потом использовать importlib для загрузки и выполнения кода из множества взаимосвязанных нормальных Питонячих файлов, после чего их удалить. В принципе, на Винде можно сделать аналогично просто в какой-то скрытой локации на диске, от безопасности не сильно убудет: как высказывались другие участники, все упомянутые способы – такая себе защита от реальных злоумышленников и просто айтишников, но в целом варианты рабочие.