Всем привет, сегодня я решил вам показать способ, как можно получить исходный код скрипта на Python, который накрыт PyArmor'ом. Внимание: Данный способ не работает с версией Pyarmor 8 и выше. Что такое PyArmor? PyArmor - это инструмент для защиты Python-кода. Он позволяет защитить исходный код Python от несанкционированного копирования и использования. PyArmor использует сложную криптографическую подпись и алгоритм шифрования, чтобы защитить исходный код Python от чтения и изменения. Он также позволяет ограничивать использование вашего программного обеспечения до определенного количества компьютеров или до определенного периода времени. - Какие программы нужны? ・Process Hacker 2 ・ Python ( версия, на которой написан скрипт, узнать можно через Process Hacker) ・PyInjector ・Decompyle++(pycdc) (исходный код, ниже объясню, как превратить его в exe-файлы.) Я взял простой скрипт и зашифровал его с помощью PyArmor в исполняемый файл: res = input('Enter a password: ') if res == 'b57Gihj675vkc8cmrcimricm': input('Yes! It was the corrcet password.') else: input('Bad password:(') Python res = input('Enter a password: ') if res == 'b57Gihj675vkc8cmrcimricm': input('Yes! It was the corrcet password.') else: input('Bad password:(') Для начала необходимо скачать файлы из репозитория GitHub: клик Далее сохраняем папку methods где-то у себя, она нам позже пригодится. Исполняемый файл(exe) Если у вас exe-файл и он скомпилирован с помощью pyinstaller, то вам очень повезло. Скачиваем PyInstaller Extractor и закидываем в папку с exe-файлом. Открываем консоль. Вводим python pyinstxtractor.py main.exe , где main.exe - это имя вашего исполняемого файла и видим подобную картину: Если возникла ошибка "Missing cookie, unsupported pyinstaller version or not a pyinstaller archive", значит этот файл собран не при помощи pyinstaller. Если все успешно, можно идти дальше. В папке с файлами появилась папка "main.exe_extracted", где "main" - имя вашего исполняемого файла. Переходим в нее и ищем файл "_pytransform.dll", если он там есть, то значит скрипт защищен PyArmor'ом. Если же данной dll-ки нету, то значит скрипт не накрыт и достать код будет еще легче. Находим Байт-код программы(файл с расширением .pyc, например main.pyc). Используем декомпилятор( pycdc.exe main.pyc , где main.pyc - имя вашего файла) и получаем: Как видим, это PyArmor. Вводи команду: pycdc.exe main.pyc > main.py Это мы сохраняем вывод из консоли в файл "main.py", далее нам нужны файлы "_pytransform.dll" и "main.py". Создаем папку с именем "pytransform", а уже в ней создаем файл "__init__.py", в нее вставляем данный код: https://pastebin.com/CKDZzdKN Также в данную папку закидываем "_pytransform.dll". И опять открываем консоль: И запускаем основной скрипт: Как видим скрипт успешно запустился. Скрипт Python Если у вас обычный скрипт Python, который также может быть накрыт PyArmor'ом, то вы также сможете получить исходный код. Обычно у него такая структура: Получаем исходный код У нас есть 3 способа, с помощью которых мы можем попробовать получить исходный код. Я использовал только 2 из них, поэтому про них и напишу. Способ 1 Из папки "method 2" мы копируем файл "code.py", и закидываем в папку с основным скриптом(который накрыт PyArmor). Далее инжектим PyInjector, подробнее будет описано в спойлере "Инжектим PyInjector", который находится ниже. У нас должна появиться папка "dump", в которой появиться файл "main.pyc"(у вас может быть другое название, зависит от названия самого скрипта) С помощью декомпилятора мы превращаем байт-код в читаемый. Подробнее про декомпилирование будет ниже. Инжектим PyInjector Скачиваем PyInjector, переносим эти DLL в папку. Запускаем ваш скрипт и открываем Procces Hacker 2(от имени администратора). Находим наш процесс и инжектим DLL: Нажимаем по процессу ПКМ и ищем пункт "Miscellaneous", а в нем пункт "Inject DLL...", Находим DLL-ки PyInjector и инжектим. Способ 2 Из папки "method 3" мы копируем файл "bypass.py", и закидываем в папку с основным скриптом(который накрыт PyArmor). Далее мы запускаем скрипт этой командой: python bypass.py main.py - на место main.py вы ставите название вашего скрипта. Вводим несколько раз "yes". И у нас также, как и в первом способе должна появиться папка dump, в которой будет байт-код. С помощью декомпилятора мы превращаем байт-код в читаемый. Подробнее про декомпилирование будет ниже. Компилируем Decompyle++ Заходим на сайт и скачиваем CMake. Заходим в GitHub репозиторий, скачиваем его, переименуем в "pycdc" и копируем в другую папку, например в "test123". Добавляем C:\Program Files\CMake\bin к переменным вашей системной среды в PATH. Заходим в папку "test123", структура должна быть такой: Открываем консоль: И вводим команды по порядку: cmake pycdc cd ../ cmake --build test123 Code cmake pycdc cd ../ cmake --build test123 В папке "test123\Debug" должны появится файлы: Нам нужны только "pycdc.exe" и "pycdas.exe", они оба нам пригодятся. Вы можете добавить их в локальные переменные, чтобы легче вызвать, но можно в принципе каждый раз копировать их в папку. Вот мы и скомпилировали Decompyle++. Декомпилируем байт-код Существует несколько вариаций декомпиляторов: https://github.com/rocky/python-uncompyle6 Для Python 3.8 и ниже. https://github.com/zrax/pycdc Для всех версий Python. https://github.com/rocky/python-decompile3 Для версий Python 3.7-3.8 https://github.com/greyblue9/unpyc37-3.10 Для версий Python 3.7-3.10 Я использую Decompyle++, поэтому в статье о ней и рассказал. Если использовать этот декомпилятор, то нужно перейти в папку с ботом и прописать данную команду: pycdc.exe main.pyc , где main.pyc - это ваш файл с байт-кодом. В консоль должно вывести код. Есть минус, иногда данный декомпилятор может переводить не весь код и некоторые участки будут не расшифрованны. В данном случае можно иследовать код, который выведете команда pycdas.exe main.pyc И найти способ как обойти защиту. Данной статьёй я хотел бы показать насколько просто можно получить исходный код скрипта, который написан на Python и накрыт PyArmor'ом и даже платной ее версией. Как же можно защитить скрипты? Я не знаю Но мне кажется можно сделать из скрипта ".pyd" файл, то есть переделать его в С код и вызывать, как отдельный модуль. Ну и также можно накрыть скрипт Nuitka, он также переводит скрипт в С код, что помогает снизить шанс взлома программы, хотя от реверс-инжиниринга это наверное не поможет. Ну а на этом я бы хотел завершить эту статью, надеюсь она была вам полезна, удачи!) :newyear9:
import struct ImportError: bad magic number in 'struct': b'\xe3\x00\x00\x00' The post was merged to previous Feb 20, 2023 это выходит
держу вкурсе, в автоучастии от всеми известного спавна майнкрафт сервера LOLZTEAM идет защита от инжекта
Shemdy, при должной защите абсолютно не так. плюсы можно заточить под что угодно, питон не поддается многому
не деобфусцирует мою защиту, кому интересно, в профиле, по поводу обфускации дефолтным методом могу сказать следующее - покупайте лицензию пайармор и не ебите себе голову
Элиас_неактив2463224, Сколько скриптов встречал, у них никакой защиты от дампа не было, видимо думают что если это pyarmor, его нельзя деобфусцировать.
CMake Warning (dev) at CMakeLists.txt:1 (project): cmake_minimum_required() should be called prior to this top-level project() call. Please see the cmake-commands(7) manual for usage documentation of both commands. This warning is for project developers. Use -Wno-dev to suppress it. CMake Error at CMakeLists.txt:1 (project): Running 'nmake' '-?' failed with: Не удается найти указанный файл CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage -- Configuring incomplete, errors occurred! The post was merged to previous Mar 10, 2023 как это решить?
Traceback (most recent call last): File "C:\Users\gopni\OneDrive\Рабочий стол\Новая папка (2)\main.exe_extracted\main.py", line 4, in <module> from pytransform import pyarmor_runtime File "C:\Users\gopni\OneDrive\Рабочий стол\Новая папка (2)\main.exe_extracted\pytransform\__init__.py", line 6, in <module> import struct ImportError: bad magic number in 'struct': b'o\r\r\n' как это решить?