Найти - Пользователи
Полная версия: Как усложнить декомпиляцию .pyc скрипта?
Начало » Python для новичков » Как усложнить декомпиляцию .pyc скрипта?
1
Camelot12
Всем привет, недавно начал изучать питон (пайтон), в итоге написал небольшой фикс для игры. Теперь хочу обфусцировать\усложнить декомпиляцию\защитить код. Т.е. чтобы через командную строку его вообще было невозможно декомпилировать, а через всякие навороченные декомпиляторы код восстанавливался со всяким мусором и в другой структуре (т.е. в дальнейшем непригодным для компиляции). Заранее спасибо за помощь.
Rodegast
Есть простенькие обфускаторы, но они не панацея. Используй cython.
Camelot12
А можно как-то зашифровать содержимое? Ну например по методу цезаря.
Alen
Camelot12
А можно как-то зашифровать содержимое? Ну например по методу цезаря.

Python поддерживает кодировку ROT-13 https://ru.wikipedia.org/wiki/ROT13.

Меняем кодировку у строки print
>>> 'print'.decode('rot-13')
u'cevag'

Делаем файл с указанием кодировки:
#!/usr/bin/env python
# -*- coding: rot-13 -*-
# print 1
cevag 1

Выполняем - работает, печатает 1.


Camelot12
Alen
Меняем кодировку у строки print
У меня нету в коде строки print.

Насколько я понимаю, то это:
>>> 'print'.decode('rot-13')
u'cevag'
нужно кинуть в мой код, а это:
#!/usr/bin/env python
# -*- coding: rot-13 -*-
# print 1
cevag 1
в отдельный файл?

Или как? Не могу понять…
PooH
Camelot12
Ну например по методу цезаря.
Шутить изволите?! При наличии компьютера в каждом доме шифр простой замены ничем не отличается от открытого текста, Тем более программный текст, где столько ключевых слов.
Camelot12
Ребята, я лишь только учусь. Я просто хочу обезопасить свои работы от декомпиляции…
PooH
Camelot12
Ребята, я лишь только учусь. Я просто хочу обезопасить свои работы от декомпиляции…
Вот сейчас вообще непонятно. Авторы django, flask, sqlalchemy, pyramid открыто держат свой код, а вы “лишь только учусь” и уже “обезопасить свои работы от декомпиляции”. Уже готовлюсь декомпилировать ваш код, я обязательно должен ознакомится с шедеврами!
Alen
Camelot12
Насколько я понимаю, то это:
>>> 'print'.decode('rot-13')
u'cevag'
нужно кинуть в мой код,

Это пример как перекодировать из кодировки latin или utf-8 в кодировку rot-13.

Camelot12
а это:
#!/usr/bin/env python
# -*- coding: rot-13 -*-
# print 1
cevag 1
в отдельный файл?

Это пример как создать исполняемую программу на python в кодировке rot-13. В данном примере 2-я строчка указывает что файл в кодировке rot-13, a строчка cevag 1 эквивалентна строчке print 1 в обычном python-файле, но записанная в кодировке rot-13.

Camelot12
У меня нету в коде строки print.

Ну вы же понимаете что это всего лишь пример. Вот например другой пример, программа которая возвращает текущий каталог (аналог pwd).
#!/usr/bin/env python
# -*- coding: rot-13 -*-
vzcbeg bf
cevag bf.trgpjq()

Это полный эквивалент такой программы:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
print os.getcwd()

PooH
Шутить изволите?! При наличии компьютера в каждом доме шифр простой замены ничем не отличается от открытого текста, Тем более программный текст, где столько ключевых слов.

Воспринимаете это просто как забаву.

Camelot12
Ребята, я лишь только учусь. Я просто хочу обезопасить свои работы от декомпиляции…

Кстати этот метод (с rot-13) от декомпиляции никак не спасет, потому как восстанавливается код из байт-кода, который имеет собственное представление о данных и кодировках.
Это всего лишь забавный факт, который можно использовать разве что для подшучивания над коллегами 1 апреля. Если вам необходимо действительно закрыть код, то самый лучший способ для этого, как вам правильно заметили, – компиляция. Для этого можно использовать пакеты Cython или Nuitka.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB