Подтвердить что ты не робот

Как сложно перепроектировать файлы .pyd?

После чтения Как защитить код Python?, я решил попробовать действительно простой модуль расширения в Windows. Ранее я составлял свой собственный модуль расширения в Linux, но это первый раз, когда я скомпилировал его в Windows. Я ожидал получить файл .dll, но вместо этого получил файл .pyd. Docs говорит, что они такие же, но он должен иметь функцию init[insert-module-name]().

Можно ли предположить, что их сложно перепроектировать как файлы dll. Если нет, то какова их твердость в обратном проектировании в масштабе от .pyc файла до DLL файлов?

4b9b3361

Ответ 1

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

Однако требуемая структура и знание того, что многие функции будут обрабатывать PyObject * и другие четко определенные типы CPython, могут иметь некоторый эффект. На самом деле это не поможет при сопоставлении кода сборки с C (если что-нибудь, это становится сложнее из-за макросов, специфичных для CPython). Код, который в основном взаимодействует с типами Python, будет сильно отличаться от кода, управляющего C-структурами (и сравнительно раздутыми). Это может сделать еще труднее понять, или он может отдать код, который ничего не делает, и позволяет обратному инженеру пропустить его и донести до ваших торговых секретов раньше.

Ни одна из этих проблем не относится к частям кода, которые являются чистым C-кодом (т.е. не взаимодействуют с Python). И у вас, наверное, много таких. Поэтому в конце концов это не должно вносить существенного изменения.

Ответ 2

Они - в основном собственный код. Но поскольку у каждой функции есть забавные списки аргументов, может быть труднее увидеть, что делает каждая функция. Я бы сказал, что они сложнее dll, если не сложнее.