The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

no-code - пакет для скрытия кода на языке Python

31.10.2025 09:30

Опубликован инструментарий no-code, позволяющий скрывать код в скриптах на языке Python. Преобразованный скрипт выглядит в редакторах кода как одна строка "# coding: no" без какого-либо иного содержимого, но при этом продолжает запускаться и выполнять прежние функции. Инструментарий создан под впечатлением от шуточной философии No Code, в соответствии с которой лучшим способом написания безопасных и надёжных приложений является полное отсутствие кода. Отмечается, что данная философия хороша, но иногда требуется, чтобы программа выполняла какие-то действия. No-code решает эту проблему и позволяет распространять программы "без кода", но выполняющие действия.

Метод скрытия основан на кодировании содержимого при помощи двух Unicode-символов, имеющих нулевую длину (не приводящие к отступу пробелы 0x200B и 0x200C). Один невидимый символ отождествляется с "0", а второй с "1".


   $ cat some_code.py
   print("Hello, world!")

   $ no_code some_code.py > no_code.py

   $ cat no_code.py
   # coding: no
​‌‌‌​​​​​‌‌‌​​‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌‌​‌​​​​‌​‌​​​​​‌​​​‌​​‌​​‌​​​​‌‌​​‌​‌​‌‌​‌‌​​​‌‌​‌‌​​​‌‌​‌‌‌‌​​‌​‌‌​​​​‌​​​​​​‌‌‌​‌‌‌​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​‌‌​​​‌‌​​‌​​​​‌​​​​‌​​‌​​​​​‌‌‌‌​​​​‌​​‌‌‌‌‌‌​​‌‌​​​‌​​​​​​‌​​‌​​​‌​​​‌​‌​​‌​​​​‌​‌​
   $ python no_code.py
   Hello, world!

   $ yes_code no_code.py > some_code.py

   $ cat some_code.py
   print("Hello, world!")

Строка "# coding: no" в скрипте со скрытым кодом указывает на использование в файле кодировки с именем "no" - ключевое слово "coding:" применяется в Python для задания кодировки исходного кода. Для запуска преобразованного скрипта требуется установка Python-пакета "no_code", который включает файл "no.pth", вызываемый при использовании кодировки c именем "no" для декодирования перед обработкой парсером. Для скрытия не всего файла, а отдельных порций с кодом, проектом предоставляются функции no_code.nothing() и no_code.something().

Из похожих проектов можно отметить Perl-модуль Acme::Bleach, преобразующий код в представление из пробелов и табуляций, а также JavaScript-библиотеку INVISIBLE.js, позволяющую скрывать код через кодирование в символы с нулевой длиной.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Достижение выполнения кода при контроле над текстом комментария в Python-скрипте
  3. OpenNews: Построение полной по Тьюрингу вычислительной среды при помощи утилит GNU find и mkdir
  4. OpenNews: Уязвимость, позволяющая подставить escape-последовательности в чужие терминалы
  5. OpenNews: Трюк с определением персональных данных через SSH
  6. OpenNews: Применение невидимых unicode-символов для скрытия действий в JavaScript-коде
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64148-python
Ключевые слова: python, joke
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, хакир (?), 09:52, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Мощно! Пошел писать вирус. Встречайте на всех компьютерах самый невидимый вирус!
     
     
  • 2.5, Аноним (5), 10:07, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А можно мне тоже, чтобы письма счастья рассылали?
     
     
  • 3.34, _kp (ok), 12:36, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да!

    Помню ещё на ZX Spectrum писали так, когда часть Basic исходника скрывалась управляющими символами, и в итоге на экране отображадался один код, но выполнялось нечто иное.

    Такую фичу с юникодом сделует считать багом, и дырой в безопасности, и срочно выпускать патчи.

     
  • 2.11, Аноним (11), 10:16, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Так для запуска требуется пакет с no_code поставить
     
  • 2.12, Жироватт (ok), 10:19, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Без встроенной поддержки CORBA, DCOM+, XML, .Net, MQTT, RESTful, безопасной работы с памятью через всякие аффинажные мутные типЫ дергающих боровов, горутинов, Vue.JS+GULP и ChatGPT AI даже не приходи.
     
     
  • 3.17, Аноним (17), 10:41, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >аффинажные мутные типЫ дергающих боровов

    Приятно смотреть на волны, расходящиеся от брошенного камня. Вы выучили новое понятие, теперь осталось научится его правильно писать.

     
     
  • 4.19, Жироватт (ok), 10:59, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем? Высмеивать попытки навязать свих типОв можно и так.
     
  • 2.25, Аноним (25), 11:33, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Мощно! Пошел писать вирус.

    Не забудь потом слезно попросить пользователей поставить нужный пакет:

    "Для запуска преобразованного скрипта требуется установка Python-пакета "no_code""

     

  • 1.3, Diozan (ok), 09:59, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    В принципе, хорошая штучка, что бы никто не совал свой нос в мои коды. Но насколько замедляется при этом выполнение скриптов?
     
     
  • 2.7, Аноним (17), 10:11, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +6 +/
    До первого человека, знающего про hexdump, вот кстати я.
     
     
  • 3.28, Diozan (ok), 11:43, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Так это понятно, можно даже проще, наверняка преобразование обратимо...
     
     
  • 4.29, Аноним (29), 11:49, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Наверняка, Наверняка, Карл!
     
  • 3.35, _kp (ok), 13:05, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Как раз получить код не проблема.
    Более того, с# и Питон и из exe дизассемблируются в нормальный исходник.

    И с потереря быстродействия пренебрежима мала на фоне быстродействия Питона.
    С перерасходом дискового пространства - нехорошо.


    Проблема, в другом.
    Если в каком то _скрипте_ при просмотре МОЖЕТ отображается одно, а делает он другое, то о остальные аналогичные скрипты по умолчанию теперь считаются вирусами и троянами.

    Мне послышалось, или заиграл похоронный марш Шопена?

     
     
  • 4.37, Жироватт (ok), 13:48, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Послышалось.
    Тут это, явно нужно вытянуть модуль из pip надо
     
  • 2.45, OpenEcho (?), 18:27, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > В принципе, хорошая штучка, что бы никто не совал свой нос в мои коды.

    Подсказка, - не нужно устаналивать дополнительные пакеты чтоб мутным образом скрывать свой шедевр.

    Просто пишешь в начале

    '''
    # резервированное имя файла для будующего расширения функционала
    '''

    потом жмешь интер и ждешь секунд 30 и где-то там на строке 1000+ начинаешь писать свой "скрытый" код


    > Но насколько замедляется при этом выполнение скриптов?

    В варианте выше, вообше не замедляется ;)

     

  • 1.4, Соль земли2 (?), 10:04, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Если кодировать 0 и 1 (1 бит), как unicode-символ (2 байта), то размер кода увеличивается в...
     
     
  • 2.27, penetrator (?), 11:41, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    в 16 раз

    договаривай уже, чего ты

     
  • 2.31, Аноним (25), 11:51, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > как unicode-символ (2 байта)

    В юникодном utf-8 символ кодируется не двумя, а 1-4 байтами.

     
     
  • 3.36, Аноним (36), 13:48, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Он из мирка венды.
     
  • 3.38, Аноним (36), 13:58, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Он из мирка венды.
     
  • 3.39, trolleybus (?), 15:55, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Конкретно эти 2 символа кодируются 3 байтами каждый, поэтому в 24 раза.
     
  • 2.41, wd (?), 16:04, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    если кодировать юникодом, то там полно всяких управляющих символов нулевой ширины
     
  • 2.43, _kp (ok), 16:54, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >>unicode-символ (2 байта)

    В Windows API используют  UTF-16,
    а в текстовых файлах обычно utf-8, в котором кодирование символа  может распухать до 4х байт.

     
     
  • 3.47, wd (?), 18:40, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >может распухать до 4х байт.

    технически и больше:

    man utf-8  приводит приводит пример до 6 байт:

           0x04000000 - 0x7FFFFFFF:
                  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

    но делает оговорку:
    According to RFC 3629 no point above U+10FFFF should be used, which limits characters to four bytes.

    но завра этого станет мало и будет новый рфц

     

  • 1.6, Аноним (6), 10:08, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    И зачем авторы публикуют такую программулину, это же рассадник для всяких майнеров и прочих вирусов! Антивирус всё-равно это всё задетектит.
     
     
  • 2.8, Аноним (17), 10:13, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Это широко известная идея. Все, кому надо, про неё уже знают.
     
     
  • 3.20, Аноним (6), 11:07, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Хорошо, что пользователи такие прошаренные, что всё знают!
     
     
  • 4.26, Аноним (25), 11:34, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Пользователи вообще готовые бинари ставят. Или проспись.
     

  • 1.9, Аноним (9), 10:13, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    проще обфускатором пожать с рандомными кодировками чем через эту мандулу, хотя бы в авто режиме и всякие ии не найдут
     
  • 1.10, Жироватт (ok), 10:15, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ну, новому поколению скрипткидди зайдет
     
  • 1.13, anonymous (??), 10:30, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    И снова всё правильно делают ребята из OpenBSD, когда предоставляют в базовой системе редакторы vi и mg без поддержки многобайтных кодировок. Я так понимаю, в этих редакторах вот это вот будет видно как строка мусора и уловки скрипткидди не сработают.
     
     
  • 2.16, похнапоха. (?), 10:40, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Всё-таки большинство хотело бы видеть многобайтную кодировку в своих текстак, как ни крути vi - это текстовый редактор, а для написания кода большинство людей используют графические редакторы кода, либо полноценные IDE.
     

  • 1.18, Аноним (18), 10:42, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Как говорится, когда коту делать нечего....
     
  • 1.22, Аноним (22), 11:15, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    "coding: no"
    OS: no code = no execution.
    Abort()

    Жаль в реальности ос ещё тупее...

     
  • 1.24, Аноним (25), 11:30, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Для запуска преобразованного скрипта требуется установка Python-пакета "no_code"

    Гениально. Обфускация уровня "просчитался, но где?".

     
  • 1.30, Аноним (29), 11:51, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На сама деле реально скрыть питоновский код у меня получилось только через Nuitka.
     
     
  • 2.44, Ононем (?), 17:45, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    CPython тож нормально справляется
     

  • 1.40, wd (?), 16:02, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    переизобрели whitespace?
     
  • 1.42, Rodegast (ok), 16:48, 31/10/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Эту энергию, да в мирных целях...
     
     
  • 2.46, OpenEcho (?), 18:33, 31/10/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Эту энергию, да в мирных целях..

    Да ладно вам, кто из настоящих програмистов не играл в компьютерном "детстве" в хакера :)

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру