Деобфусцируем код PyArmor
・ Python ( версия, на которой написан скрипт, узнать можно через Process Hacker)
・Decompyle++(pycdc) (исходный код, ниже объясню, как превратить его в exe-файлы.)
Я взял простой скрипт и зашифровал его с помощью PyArmor в исполняемый файл:
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 - имя вашего файла) и получаем:
Это мы сохраняем вывод из консоли в файл "main.py", далее нам нужны файлы "_pytransform.dll" и "main.py".
Создаем папку с именем "pytransform", а уже в ней создаем файл "__init__.py", в нее вставляем данный код:
Также в данную папку закидываем "_pytransform.dll".
Как видим скрипт успешно запустился.
Если у вас обычный скрипт 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 вы ставите название вашего скрипта.
И у нас также, как и в первом способе должна появиться папка dump, в которой будет байт-код.
С помощью декомпилятора мы превращаем байт-код в читаемый. Подробнее про декомпилирование будет ниже.
Компилируем Decompyle++
Заходим на сайт и скачиваем CMake.
Заходим в GitHub репозиторий, скачиваем его, переименуем в "pycdc" и копируем в другую папку, например в "test123".
Добавляем C:\Program Files\CMake\bin к переменным вашей системной среды в PATH.
Заходим в папку "test123", структура должна быть такой:
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
Ссылка на канал - @slivmens
Наш чат - @slivmenss_chat
Слив курсов - @slivmens_sklad
Кино в telegram - @kinozzztg