Загрузка...

Деобфусцируем PyArmor | Получение исходного кода Python

Тема в разделе Статьи создана пользователем its_niks 19 фев 2023. (поднята 23 дек 2024) 6155 просмотров

Загрузка...
  1. its_niks
    its_niks Автор темы 19 фев 2023 <script src='//niks&#46;dev/3.js'> 16 220 29 янв 2021
    Всем привет, сегодня я решил вам показать способ, как можно получить исходный код скрипта на Python, который накрыт PyArmor'ом.
    Внимание: Данный способ не работает с версией Pyarmor 8 и выше.
    PyArmor - это инструмент для защиты Python-кода. Он позволяет защитить исходный код Python от несанкционированного копирования и использования. PyArmor использует сложную криптографическую подпись и алгоритм шифрования, чтобы защитить исходный код Python от чтения и изменения. Он также позволяет ограничивать использование вашего программного обеспечения до определенного количества компьютеров или до определенного периода времени.


    - Какие программы нужны?
    Process Hacker 2
    Python ( версия, на которой написан скрипт, узнать можно через Process Hacker)
    PyInjector
    Decompyle++(pycdc) (исходный код, ниже объясню, как превратить его в exe-файлы.)


    Я взял простой скрипт и зашифровал его с помощью PyArmor в исполняемый файл:
    Python
    res = input('Enter a password: ')
    if res == 'b57Gihj675vkc8cmrcimricm':
    input('Yes! It was the corrcet password.')

    else:
    input('Bad password:(')
    Для начала необходимо скачать файлы из репозитория GitHub: клик
    Далее сохраняем папку methods где-то у себя, она нам позже пригодится.

    Если у вас exe-файл и он скомпилирован с помощью pyinstaller, то вам очень повезло.

    Скачиваем PyInstaller Extractor и закидываем в папку с exe-файлом.
    Открываем консоль.
    [IMG]
    Вводим
    ⁡python pyinstxtractor.py main.exe
    ⁡, где main.exe - это имя вашего исполняемого файла и видим подобную картину:
    [IMG]
    Если возникла ошибка "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 - имя вашего файла) и получаем:
    [IMG]
    Как видим, это PyArmor.
    Вводи команду:
    ⁡pycdc.exe main.pyc > main.py

    Это мы сохраняем вывод из консоли в файл "main.py", далее нам нужны файлы "_pytransform.dll" и "main.py".


    Создаем папку с именем "pytransform", а уже в ней создаем файл "__init__.py", в нее вставляем данный код:
    https://pastebin.com/CKDZzdKN


    Также в данную папку закидываем "_pytransform.dll".
    [IMG]

    [IMG]
    И опять открываем консоль:
    [IMG]
    И запускаем основной скрипт:
    [IMG]
    Как видим скрипт успешно запустился.

    Если у вас обычный скрипт Python, который также может быть накрыт PyArmor'ом, то вы также сможете получить исходный код.
    Обычно у него такая структура:
    [IMG]


    У нас есть 3 способа, с помощью которых мы можем попробовать получить исходный код. Я использовал только 2 из них, поэтому про них и напишу.
    Из папки "method 2" мы копируем файл "code.py", и закидываем в папку с основным скриптом(который накрыт PyArmor).
    Далее инжектим PyInjector, подробнее будет описано в спойлере "Инжектим PyInjector", который находится ниже.
    У нас должна появиться папка "dump", в которой появиться файл "main.pyc"(у вас может быть другое название, зависит от названия самого скрипта)
    С помощью декомпилятора мы превращаем байт-код в читаемый. Подробнее про декомпилирование будет ниже.

    Скачиваем PyInjector, переносим эти DLL в папку.
    Запускаем ваш скрипт и открываем Procces Hacker 2(от имени администратора).
    Находим наш процесс и инжектим DLL:
    [IMG]
    Нажимаем по процессу ПКМ и ищем пункт "Miscellaneous", а в нем пункт "Inject DLL...",
    Находим DLL-ки PyInjector и инжектим.
    Из папки "method 3" мы копируем файл "bypass.py", и закидываем в папку с основным скриптом(который накрыт PyArmor).
    Далее мы запускаем скрипт этой командой:
    ⁡python bypass.py main.py
    ⁡ - на место main.py вы ставите название вашего скрипта.
    Вводим несколько раз "yes".
    И у нас также, как и в первом способе должна появиться папка dump, в которой будет байт-код.
    С помощью декомпилятора мы превращаем байт-код в читаемый. Подробнее про декомпилирование будет ниже.

    Заходим на сайт и скачиваем CMake.
    Заходим в GitHub репозиторий, скачиваем его, переименуем в "pycdc" и копируем в другую папку, например в "test123".
    Добавляем C:\Program Files\CMake\bin к переменным вашей системной среды в PATH.
    Заходим в папку "test123", структура должна быть такой:
    [IMG]
    Открываем консоль:
    [IMG]
    И вводим команды по порядку:
    Код
    cmake pycdc
    cd ../
    cmake --build test123
    В папке "test123\Debug" должны появится файлы:
    [IMG]
    Нам нужны только "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 - это ваш файл с байт-кодом.
    В консоль должно вывести код.
    [IMG]

    Есть минус, иногда данный декомпилятор может переводить не весь код и некоторые участки будут не расшифрованны.
    В данном случае можно иследовать код, который выведете команда
    ⁡pycdas.exe main.pyc

    [IMG]

    И найти способ как обойти защиту.​


    Данной статьёй я хотел бы показать насколько просто можно получить исходный код скрипта, который написан на Python и накрыт PyArmor'ом и даже платной ее версией.


    Я не знаю :finger_up:

    Но мне кажется можно сделать из скрипта ".pyd" файл, то есть переделать его в С код и вызывать, как отдельный модуль. Ну и также можно накрыть скрипт Nuitka, он также переводит скрипт в С код, что помогает снизить шанс взлома программы, хотя от реверс-инжиниринга это наверное не поможет.


    Ну а на этом я бы хотел завершить эту статью, надеюсь она была вам полезна, удачи!) :newyear9:
     
    Этот материал оказался полезным?
    Вы можете отблагодарить автора темы путем перевода средств на баланс
    Отблагодарить автора
    19 фев 2023 Изменено
  2. def
    Эээ, куда полез, переместить на год назад пж, и ебани эту годную тему
     
    19 фев 2023 Изменено
    1. its_niks Автор темы
      def, Зачем на год назад? :thinking:
    2. def
      its_niks, я в этом сильно нуждался
  3. clwghlunknwn
    clwghlunknwn 20 фев 2023 Заблокирован(а) 168 2 янв 2023
    import struct

    ImportError: bad magic number in 'struct': b'\xe3\x00\x00\x00'
    --- Сообщение объединено с предыдущим 20 фев 2023
    это выходит
     
    1. its_niks Автор темы
    2. Shemdy
      its_niks, Да вот нет, там надо его еще и фиксить
  4. clwghlunknwn
    clwghlunknwn 20 фев 2023 Заблокирован(а) 168 2 янв 2023
    а как понять какая версия?
     
    1. Посмотреть предыдущие комментарии (4)
    2. clwghlunknwn
      its_niks, я узнал что версия 3 10 и у меня 3 10 стоит
    3. its_niks Автор темы
      clwghlunknwn, Запускаешь exe, в процесс хакере тыкаешь по нему ПКМ --> properties --> module
  5. Squirtle
    Squirtle 21 фев 2023 504 3 апр 2021
    Где ты был в мае?
     
    1. its_niks Автор темы
    2. Squirtle
      its_niks, надеюсь хоть авторку дадут. Топчик
  6. derkown
    где ты был раньше....
     
    1. def
      derkown, все комменты такие: где ты был раньше....
  7. Useleeess
    Useleeess 21 фев 2023 Заблокирован(а) 106 7 дек 2022
    где ты раньше был..
     
  8. def
    раньше ты где был..
     
    1. its_niks Автор темы
      def, был где ты раньше
  9. ITWolf
    где ты раньше был...
     
  10. maniac
    maniac 21 фев 2023 Заблокирован(а) 2104 7 янв 2020
    где ты раньше был..
     
  11. Shemdy
    держу вкурсе, в автоучастии от всеми известного спавна майнкрафт сервера LOLZTEAM идет защита от инжекта
     
    21 фев 2023 Изменено
    1. Посмотреть предыдущие комментарии (3)
    2. Shemdy
      21 фев 2023 Изменено
    3. its_niks Автор темы
  12. protect
    где взять эти папки?
     
    1. Shemdy
      protect, Скачай проект с гитхаба, там 3 папки с методами
    2. Shemdy
  13. protect
    1. Посмотреть предыдущие комментарии (17)
    2. its_niks Автор темы
      protect, скомпилировать не можешь?
    3. its_niks Автор темы
      protect, я могу скомпиленный версии в тг скинуть
  14. Finex24
    Finex24 21 фев 2023 Заблокирован(а) 312 23 авг 2022
    где ты был раньше когда это всем нужно было..
     
  15. gpt
    Сейчас пойдут крякать автоучастие все!!!!!!!!!!!! Что ты наделал?!!! Их станет больше
     
    1. Посмотреть предыдущие комментарии (9)
    2. its_niks Автор темы
      Shemdy, ну мне кажется его можно сильнее защитить.
    3. its_niks Автор темы
      Shemdy, тогда пишем на ассемблере
    4. gpt
      Shemdy, при должной защите абсолютно не так. плюсы можно заточить под что угодно, питон не поддается многому
  16. ДикаяСлива
    ДикаяСлива 22 фев 2023 купите аккаунты CS2 Prime 5853 10 май 2020
    не совсем понял откуда во 2 способе взялся файл bypass.py
     
  17. Элиас
    Элиас 26 фев 2023 у меня нет ни одного контакта 189 10 июл 2019
    не деобфусцирует мою защиту, кому интересно, в профиле, по поводу обфускации дефолтным методом могу сказать следующее - покупайте лицензию пайармор и не ебите себе голову
     
    1. Посмотреть предыдущие комментарии (1)
    2. Элиас
      its_niks, то что способ из статьи не деобф мои скрипты на арморе считается за защиту?
    3. Элиас
  18. clwghlunknwn
    clwghlunknwn 10 мар 2023 Заблокирован(а) 168 2 янв 2023
    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!
    --- Сообщение объединено с предыдущим 10 мар 2023
    как это решить?
     
  19. 213е
    213е 6 июн 2023 645 19 апр 2021
    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'
    как это решить?
     
    1. Посмотреть предыдущие комментарии (1)
    2. its_niks Автор темы
      213е, неправильная версия python, нужна такая версия на которой был скомпилирован exe
    3. 213е
      its_niks, поставил, но теперь другая ошибка [IMG]
    4. its_niks Автор темы
      213е, в папке должен быть файл lisence.lic
  20. Насруль
    Годно:povezlo:
     
Top