Большие (14×21)
Выдрал из старых часов под DOS:


Кодировки: DOS (OEM 855+866), KOI-8 R/U, UTF
Большие (14×21)
Выдрал из старых часов под DOS:


Кодировки: DOS (OEM 855+866), KOI-8 R/U, UTF
Маленький размер (6×8)

DOS (OEM 855+866), KOI-8 R/U, UTF
Трехлинейная алгебра.

Решил скинуть кусочек кода другу, включаю выделение, смотрю, а консоль-то недвусмысленно намекает.
Ей хорошо, она железная. Ее даже в ГОРФ не посадят, хотя уничтожить попробовать могут.
Поиграл ради разнообразия сегодня со старыми и новыми друзьями. Как обычно, ничего из этого по итогу не получится (один хрен, к песне надо сначала сочинять текст и драм), так, наиграл чуть-чуть.
Но пусть остается, один хрен, запись некопирайтная, кому вдруг приглянется, можно использовать без проблем. Хотя, лет 10 даже акустику в руки не брал, так что получилось немного похоже на Электропартизан. Ща вот и проверю, насерет Ютуб в запись или нет.
В общем, была картинка в голове, косяк, гитара и «черный песок Марса» (это коктейль такой). Так что если плагиат — только случайный.
Нате вам (ц) Маяковский.
На беса-пилотника тоже насобирали. Второе Леша в основном и анонимно. В следующем месяце поделимся донатами со всеми сопречукнутыми.
Весна ожидается жаркая, тьфу, не сглазить.
— DES 100 — консольная утилита, реализующая алгоритм DES
— FC32 — алгоритмы перечислены на скриншоте

— FIGA201R — самописная шифровалка с самописным алгоритмом (криптостойкость не проверялась), описание формата файла и алгоритма в комплекте.
— WinCrypt — алгоритм LOKI
Мелкому другу срочно понадобилась программа, создающая графики по формулам, а Excel не подошел, бо до сих пор не умеет рисовать нормальные синусоиды, если задать интервал, например, от -10 до +10. Во всяком случае, препод сказал, что его графики из Excel не устраивают. А курсовая на носу у парня.
Слава Великим Древним и Ктулху лично, я компьютерный Плюшкин, и моего препода тоже не устраивали графики из Майкрософт Пуксель. Так что откопал такую вот программу.
+ Строить графики по формулам с нужным шагом и интервалом.
+ На одной координатной оси можно размещать несколько графиков
+ Импортировать результат в BMP/GIF
+ Дофига всякого-разного, что никогда не надо было, но вдруг кому-то понадобится (графики в полярных координатах, какие-то производные и прочий страшный матан). Мы электрики — нам красиво синусоиду нарисовать хватает (тьфу-тьфу-тьфу, как бы не сглазить).
Заходим в меню: Построение —> Добавить график
Попадаем в окошко построения:

Вбиваем формулу, выбираем основные параметры графика (цвет, толщина линии и т.д.).
Переключаемся на вкладку Доп. свойства:

Вбиваем диапазон и/или параметры построения (количество шагов, максимальный разрыв между значениями).
График можно отредактировать. Для этого нужно нажать F4 или перейти в меню Построение —> Список графиков:

Нужный график можно удалить, нажав по графику в окне Список графиков правой кнопкой мыши, и выбрав пункт Удал. из контекстного меню, либо отредактировать его (поменять формулу, цвет, прочие параметры) дважды кликнув мышью по соответствующей строке.
Программа сохраняет данные в своем собственном бинарном формате. Не расковыривал его.
Программа может экспортировать изображение в формат BMP или GIF, а поскольку, внутри программа таки растровая, размер экспортируемого изображения может быть любой. Пример:

Скачать оригинальный BMP (1024×768)
На картинке представлена демонстрация возможностей. Три графика:
+ sin(x)^2 — красный
+ -sin(x)^2 — фиолетовый
+ (sin (x^2)^2)*10 — серый
Windows 98 SE — Windows 10 (Windows 11 не подтверждена)
Бесплатно для граждан ГОРФ. Для активации бесплатности нужно в установщике выбрать русский язык и подтвердить дополнение к лицензии. Не ломал, ибо само работает.
Advancend Grapher 1.5 build 3 с MEGA.NZ (SFX ZIP Wrapper+Original Installer)
Все-таки пост от склероза.
Некоторые движки (LJ/LJR) такой код режут, но в самописном движке или WordPress должно работать.
Чтобы текст, заключенный, например в теги <pre></pre> не порвал дизайн страницы, его можно положить в div с прокруткой.
Без div’а это будет выглядеть так:

А с div’ом вот так
Если текст изначально размещается внутри div’а, заданного, например, шаблоном, то можно воспользоваться масштабированием с процентами:
<div style="max-width: 100%; max-height: 100%; overflow: auto;">
В других случаях размер можно задать пикселями:
<div style="max-width: 700px; max-height: 1000px; overflow: auto;">
Делается с помощью плагина nsProcess.
1. Качаем архив
2. Распаковываем содержимое архива по соответствующим каталогам NSIS
NsProcess.zip\Example --> C:\Program Files (x86)\NSIS\Examples\nsProcess
NsProcess.zip\Include --> C:\Program Files (x86)\NSIS\Include\
NsProcess.zip\Plugin\nsProcess.dll --> C:\Program Files (x86)\NSIS\Plugins\x86-ansi\nsProcess.dll
NsProcess.zip\Plugin\nsProcessW.dll --> C:\Program Files (x86)\NSIS\Plugins\x86-unicode\nsProcess.dll
Начало:
Unicode true
!include LogicLib.nsh
Name "KillProcessExample"
OutFile "KillProcessExample.exe"
ShowInstDetails show
RequestExecutionLevel User
Немного дополнил пример из официального мануала, вставив макрос для расширенного вывода сообщений об ошибках:
!macro PrintProcError ErrCode
Код разлапистый, потому на PasteBin: !macro PrintProcError ErrCode
Код внутри секции:
1. Запускаем тестовую программу (calc.exe, которая обычно есть в любой винде и лежит она обычно в $SYSDIR, т.е. в C:\Windows\System32\) и ждем 500 миллисекунд:
DetailPrint "Start calc.exe..."
Exec "$SYSDIR\calc.exe"
Sleep 500
2. Спрашиваем у пользователя, будем ли убивать процесс. Если нет — идем на завершение:
MessageBox MB_YESNO|MB_ICONQUESTION "Kill process calc.exe?" IDYES 0 IDNO "EndProg"
3. Ищем процесс(ы) по имени экзешника:
DetailPrint "Find process calc.exe..."
nsProcess::_FindProcess "calc.exe"
Да, можно хоть 10 калькуляторов назапускать.
4. Вытаскиваем из стека результат функции _FindProcess:
Pop $R0
5. Выводим на псевдоконсоль расшифровку кодов возврата:
!insertmacro PrintProcError $R0
6. Если код возврата = 0, значит, процесс найден, пытаемся его убить, выводим расшифровку кодов возврата, и опять подождем 500 миллисекунд:
${If} $R0 = 0
DetailPrint "Process calc.exe found. Kill it..."
nsProcess::_KillProcess "calc.exe"
!insertmacro PrintProcError $R0
Sleep 500
${EndIf}

— Официальная справка плагина (на буржуйском)
— Перевод от Leha Silent (копия)
Проценты:
После прочтения 126 заголовков, созданных генератором новостей, сбежавший из зоопарка кенгуру лишил гражданства, ограбил, изнасиловал, утопил, расстрелял, распял, сжег, сварил и съел председателя ЦИК В. Чурова Предвкушающий встречу с В.И. Новодворской патриарх Кирилл усыновил уличенного в педофилии главного государственного санитарного врача Г. Онищенко Внося законопроект о запрете пропаганды гомосексуализма среди пенсионеров, телеведущий Дмитрий Киселев унижал честь и достоинство своего телохранителя Вскоре после принятия иудаизма бендеровец Яценюк внес в Думу законопроект о запрете усыновления американцами внебрачных детей о. Всеволода Чаплина После празднования своего дня рождения в кафе "Четыре курицы" уссурийский тигр жег покрышки и поливал "коктейлем Молотова" министра обороны Шойгу Измученный острым приступом хронического бармазита покойный президент Венесуэлы Уго Чавес пообещал не в вводить войска в биолога Ричарда Докинза В городе на Неве в ходе празднования Дня пограничника бендеровец Тягнибок объявил народным мэром Пекина оппозиционера Алексея Навального Углубившись в чтение последнего послания В.В. Путина, Сильвио Берлускони бросил "коктейль Молотова" в окно директора ЦРУ Дэвида Петрэуса Выступая на заседании Совета безопасности ООН, пляшущий в голом виде Никита Джигурда продемонстрировал мировому сообществу трусы начальника СКП А. Бастрыкина После прочтения 126 заголовков, созданных генератором новостей, лидер Антимиайдана Залдостанов намекнул на отношения Ирины Родниной и своего брата
Пиксели:
После прочтения 126 заголовков, созданных генератором новостей, сбежавший из зоопарка кенгуру лишил гражданства, ограбил, изнасиловал, утопил, расстрелял, распял, сжег, сварил и съел председателя ЦИК В. Чурова Предвкушающий встречу с В.И. Новодворской патриарх Кирилл усыновил уличенного в педофилии главного государственного санитарного врача Г. Онищенко Внося законопроект о запрете пропаганды гомосексуализма среди пенсионеров, телеведущий Дмитрий Киселев унижал честь и достоинство своего телохранителя Вскоре после принятия иудаизма бендеровец Яценюк внес в Думу законопроект о запрете усыновления американцами внебрачных детей о. Всеволода Чаплина После празднования своего дня рождения в кафе "Четыре курицы" уссурийский тигр жег покрышки и поливал "коктейлем Молотова" министра обороны Шойгу Измученный острым приступом хронического бармазита покойный президент Венесуэлы Уго Чавес пообещал не в вводить войска в биолога Ричарда Докинза В городе на Неве в ходе празднования Дня пограничника бендеровец Тягнибок объявил народным мэром Пекина оппозиционера Алексея Навального Углубившись в чтение последнего послания В.В. Путина, Сильвио Берлускони бросил "коктейль Молотова" в окно директора ЦРУ Дэвида Петрэуса Выступая на заседании Совета безопасности ООН, пляшущий в голом виде Никита Джигурда продемонстрировал мировому сообществу трусы начальника СКП А. Бастрыкина После прочтения 126 заголовков, созданных генератором новостей, лидер Антимиайдана Залдостанов намекнул на отношения Ирины Родниной и своего брата
Версия 1.5:
— nsProcess.zip (25 KB)
Версия 1.6 (поддержка NSIS UNICODE от brainsucker, переименуйте библиотеку nsProcessW.dll):
— nsProcess.zip (14 KB)
— Зеркало: nsProcess_1_6.7z
Обсуждение:
На форуме
Возможности:
— Поиск процесса по имени.
— Завершение всех процессов с указанным именем (все найденные экземпляры).
— Закрытие всех процессов с указанным именем. Сначала происходит попытка закрыть все окна процессов, ожидание 3 секунд для завершения процессов. Если процесс(ы) все еще активны, используйте функцию _CloseProcess.
— Имя процесса нечувствительно к регистру
— Поддерживаемые ОС: Win95/98/ME/NT/2000/XP/Win7
— Поиск процессов других пользователей при запуске с правами администратора или при переключении на другого пользователя.
— Маленький размер плагина (4 Кб)
— Поддержка Unicode (просто переименуйте nsProcessW.dll в nsProcess.dll)
!include "LogicLib.nsh"
Section ""
StrCpy $1 "YOURAPP.exe"
nsProcess::_FindProcess "$1"
Pop $R0
${If} $R0 = 0
nsProcess::_KillProcess "$1"
Pop $R0
Sleep 500
${EndIf}
SectionEnd
Обычно _FindProcess возвращает:
— 0 если процесс найден
— 603 если процесс(ы) не найдены
// Коды возврата: // 0 = успех // 601 = Нет разрешения на завершение процесса // 602 = Не все процессы завершились успешно // 603 = Процесс в данный момент не запущен // 604 = Невозможно определить тип ОС // 605 = ОС не поддерживается // 606 = Невозможно загрузить NTDLL.DLL // 607 = Не удалось получить адрес процедуры из NTDLL.DLL // 608 = ошибка NtQuerySystemInformation // 609 = Невозможно загрузить KERNEL32.DLL // 610 = Не удалось получить адрес процедуры из KERNEL32.DLL // 611 = Ошибка CreateToolhelp32Snapshot
Ravi Kochhar (исходная функция FIND_PROC_BY_NAME на основе его кода)
iceman_k (Find Process By Name) и DITMan (KillProcDLL Manual).
Перевел Leha Silent специально для tolik-punkoff.com
Блин, нашел у друга на компе старую шифровалку файлов (судя по внутренней справке, алгоритм Blowfish)
Уж не знаю, там че за криптостойкость, но за уникальность стоит эту утилиту забэкапить.
— Адекватно работает только на Windows 3.1-3.11
— Генерирует самораскрывающиеся (SFX) шифрованные архивы, которые запускаются в DOS.
— Формат выходного экзешника MZ (DOS), так что выше Windows ME его будет нельзя открыть без эмулятора.



На самом деле, многими реверсерскими командами создана куча генераторов автопатчеров, подсовываешь ему оригинальный и измененный экзешник, и тебе генерируется автопатчер, даже с красивой картинкой и восьмибитной музыкой. Но «есть проблема» (ц) Патриарх Кирилл:
— Не на все автопатчеры хорошо реагируют антивирусы
— Автопатчеры нестандартны, кто в лес, кто по дрова.
Неплохо бы сделать так, чтоб и антивирусы не ругались, и оно хоть как-то относительно стандартно выглядело. И такое решение есть — модуль VPatch для системы установки NSIS. Далее расскажу, как этим модулем воспользоваться, чтобы пропатчить уже установленную программу, а также, немного расширю пример, покажу как в патч «зашить» еще и отмену патча. Естественно, чтобы все повторить, у вас должен быть установлен NSIS хотя бы в минимальной комплектации.
Устанавливаем модуль VPatch, лучше воспользоваться ссылкой на установщик, потом скачать родной пример и попытаться его скомпилировать. Если все сработало — модуль установился правильно, можно работать дальше.
Для генерации данных для патча, VPatch использует свои утилиты командной строки, которые в комплекте идут, но устанавливаются криво, так что качаем утилиты отдельно и устанавливаем их (установятся в %WINDIR%).
Теперь нужна лабораторная крыса, т.е. программа, которую будем патчить, возьмем оригинальный CrackMe из предыдущего примера (копия) и напишем ему стандартный инсталлятор:
Исходник инсталлятора
Готовый инсталлятор тестовой программы
Исходник CarckMe
Устанавливаем ее.
Для патча нужен оригинальный экзешник
Патч:

Восстановление:

— VPatch — Free Patch Generator
— VPatch plug-in
— Документация и исходники оригинального примера
— NSIS: контрольная сумма (MD5), сравнение файлов. (копия)
— NSIS: Получение списка файлов с MD5-хешами. (копия)
— NSIS: Получение даты и времени. (копия)
Хотели фото с супом — нате вам!

600 рублей.
Закрыто все остальное, потому и дорого так.
Днем бы рублей в 200 обошлось бы.
Иногда бывает нужно получить в скрипте установки локальную дату и время, или дату и время, связанную с файлом (модификации, создания или последнего доступа к файлу). В NSIS это делает одна стандартная функция, точнее, макрос ${GetTime}.
Для того, чтобы использовать GetTime, необходимо подключить заголовочный файл FileFunc.nsh (должен идти в стандартной поставке) и сам макрос GetTime:
!include "FileFunc.nsh"
!insertmacro GetTime
Вот начало инсталляционного скрипта:
Unicode true
!include "FileFunc.nsh"
!insertmacro GetTime
Name "GetLocalTime"
OutFile "GetLocalTime.exe"
ShowInstDetails show
RequestExecutionLevel User
;Далее будет тестовая секция
${GetTime} "[File]" "[Option]" $var1 $var2 $var3 $var4 $var5 $var6 $var7
где:
— "[File]" — файл (параметр игнорируется при использовании опций "L" или "LS")
— "[Option]" — опции (см. далее)
— $var1 — День
— $var2 — Месяц
— $var3 — Год
— $var4 — День недели (наименование на английском языке)
— $var5 — Час
— $var6 — Минута
— $var7 — Секунда
Опции:
L — локальное время компьютера
A — время последнего доступа к файлу
C — время создания файла
M — время последнего изменения файла
LS — системное время (то же самое, что и L, только используется часовой пояс UTC)
AS — время последнего доступа к файлу (UTC)
CS — время создания файла (UTC)
MS — время последнего изменения файла (UTC)
Section "Test"
; Получаем время компьютера
${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6
; Выводим его в окошко лога инсталлятора
DetailPrint "Local date and time:"
DetailPrint "$2/$1/$0 ($3) $4:$5:$6"
; Можно преобразовать время в строку
; чтоб добавить к имени файла
DetailPrint "String to add time in filename:"
StrCpy $0 "$2-$1-$0-$4-$5-$6"
; и вывести ее
DetailPrint "$0"
SectionEnd

— Пример на GitHub
— how to get the date and time?
— E.1.6 GetTime

Разбирая жесткий диск клиента, нашел старую игрушку в дурака. Фришная, подвенду, не Flash.
Совместимость — Windows 95+(Windows 3.11 с поддержкой EXE PE-формата) — Windows 11
Реально, вечный экзешник. Установки не требует.
Произведено неким Усковым Иваном в 1997 году.
Как-то показывал, как в NSIS получить MD5-хэши (копия), файлов в т.ч. Решил расширить пример, а как получить список файлов в каталоге и их MD5-хэши. Мне пригодится для следующего примера по NSIS, но и народ спрашивал, ибо в вышеуказанном примере нельзя выбрать произвольный файл, или сразу несколько. Исправляемся.
Перед тем, как обработать какие-то файлы, надо их сначала найти и как-то передать в инсталлятор. В NSIS есть для этого несколько способов:
— Использовать стандартные функции FindFirst/FindNext, которые работают почти также, как соответствующие функции в WinAPI и требуют городить довольно неудобочитаемый цикл, постоянно проверять ошибки.
— Рекомендуемый разработчиками NSIS способ: использовать плагин Locate, работа с которым тоже отличается довольно неудобочитаемым кодом, и работает он в некоторых случаях не совсем стабильно.
— Функция Locate, которую вообще-то должен был заменить вышеуказанный плагин, но, как по мне, заменил ее криво. Ей проще воспользоваться, во всяком случае, для такой небольшой задачи. Далее будем работать именно с функцией Locate.
1. Создаем файл Locate.nsi в каталоге проекта, помещаем в него код функции, который можно взять их официальной Wiki NSIS. Раздел Function Code. (копия на PasteBin копия на GitHub)
2. Создаем основной файл (MD5List.nsi), формируем «болванку» проекта:
Unicode true
!include "Locate.nsi"
Name "MD5List"
OutFile "MD5List.exe"
ShowInstDetails show
RequestExecutionLevel User
InstallDir "$EXEDIR\"
DirText "Choose the folder to get list files and MD5 checksums."
Section "List"
SectionEnd
Не забываем подключить файл с кодом функции Locate (Locate.nsi): !include "Locate.nsi"
${Locate} "[Path]" "[Options]" "Function"
где:
"[Path]" — путь, стартовый каталог для поиска
"[Options]" — опции (см. далее)
"Function" — callback-функция (см. далее)
/L=[FD|F|D|DE|FDE] — что искать:
/L=FD - Найти файлы и каталоги (по умолчанию)
/L=F - Найти только файлы
/L=D - Найти только каталоги
/L=DE - Найти только пустые каталоги
/L=FDE - Найти файлы и пустые каталоги
/M=[маска_файла].
По умолчанию /M=*.* (все файлы)
Можно изменить, например на /M=*.txt (текстовые файлы), и т.д.
/S=
Размер файла. Не буду заострять на этом внимание, синтаксис этой опции можно посмотреть оригинальной документации. По умолчанию размер файла игнорироуется.
/G=[1|0] — поиск с подкаталогами:
/G=1 — включить поиск с подкаталогами (включен по умолчанию)
/G=0 — поиск только в текущем каталоге
${Locate} "C:\SOMEDIR" "/L=F" "Userfunction"
Где мы указали каталог, с которого нужно начать поиск, указали хоть одну опцию, нужно указать хотя бы одну, и указали функцию обратного вызова, пока имя условное, но ниже объясню.
Это пользовательская функция, которая должна получать данные от ${Locate}, а далее уж сама их обрабатывать.
${Locate} передает в функцию следующие стандартные переменные:
$R9 — полный путь к файлу
$R8 — путь без имени файла
$R7 — имя файла
$R6 — размер (для каталога $R6==0)
Остальные глобальные переменные можно использовать для своих целей внутри функции.
Внимание: callback-функция для ${Locate} обязательно должна заканчиваться командой push <переменная>.
Чтобы завершить функцию нормально, необходимо положить любое значение в стек:
push $0
Всегда помещайте что-либо в стек (даже если вы не собираетесь останавливать поиск), иначе произойдет непредвиденное!
Чтобы прервать поиск до того, как он завершится сам, в стек надо поместить значение StopLocate:
StrCpy $0 StopLocate
Push $0
Внимание! Внутри callback-функции почему-то не работает DetailPrint.
Теперь, зная все вышеозначенное, можно писать основной код.
Полученные данные будем писать во временный файл, раз уж DetailPrint нельзя воспользоваться. Получаем имя для временного файла и открываем его для записи:
GetTempFileName $R0
FileOpen $R1 $R0 w
Начинаем поиск:
DetailPrint "Starting search files and get MD5..."
${Locate} "$INSTDIR" "/L=F /M=*.*" "GetMD5"
$INSTDIR — каталог, который выберет пользователь при запуске примера.
"/L=F /M=*.*" - /L=F — ищем только файлы /M=*.* — все файлы.
"GetMD5" — имя callback-функции (см. ниже)
По окончанию поиска закрываем файл:
FileClose $R1
И проверяем, не случилось ли ошибок. Если случилось, выводим окно с надписью Error, если не случилось — открываем полученный файл в Блокноие:
IfErrors 0 +2
MessageBox MB_OK "Error" IDOK +2
Exec '"notepad.exe" "$R0"'
После секции организуем пользовательскую функцию:
Function GetMD5 ; скармливаем MD5-плагину полное имя файла ; про MD5-плагин написано по ссылке выше md5dll::GetMD5File "$R9" Pop $1 ; достаем из стека MD5 ; Записываем во временный файл (дескриптор в $R1) ; имя найденного файла с путем: $R9 ; через табуляцию $\t MD5-хэш ($1) ; и перевод строки $\r$\n FileWrite $R1 "$R9:$\t $1 $\r$\n" ; завершаем функцию, помещая в стек ; пустую переменную Push $0 FunctionEnd
Скормим программе ее же каталог.

В Блокноте откроется временный файл со следующим содержимым:
E:\Test\Locate.nsi: a8fb937f9509d7fc21f476b2ff59aaa3 E:\Test\MD5List.exe: 34edf2e42835380b7278e89315ec1a83 E:\Test\MD5List.nsi: fb531c0dfa3bae4febe0b7cfbe7d4a88
— NSIS: контрольная сумма (MD5), сравнение файлов. (копия)
— Locate на NSIS Wiki
— Пример на GitHub

Не, ребята, это даже круче чем автограф БГ! С этой утилитой столько воспоминаний, а главное, иногда нужна по делу, хотя уже и реже, чем раньше.
Слава автору, что проект до сих пор существует, как и любимый примерно с того же детского возраста Far Manager, вот реально, счастья таким авторам! Проект если младше меня, то ненамного. А так да, еще в 12-15 лет пользовался его пиратской версией. Теперь купил лицензию (не дам).
Охрененный респект автору, лучший шестнадцатиричный редактор (с возможностью диззассемблера и редактирования кода напрямую), до сих пор лучший на этой планете.
И я его купил.
Это мой личный отзыв, никакого отношения к коммерческой рекламе он не имеет. Это просто радость, от того что могу поддержать автора.
Официальный сайт: https://www.hiew.ru/
И инструкцию, как купить (чтобы поддержать автора, который уже больше 20 лет старается), можно там же найти.
Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2023/03/07/kupil-hiew/
Ну где то ли русские националисты, то ли провокация спецслужбы из трех букв, то ли оба два сразу. Напророчил, получается. Задумывал, как подражание Лесину, а вышло опять подражание Сорокину. В общем, какую партию не строй, один хуй КПСС получится.
Друг работает в УФСИН —
Мене, текел, упарсин.
На отметку прусь в УФСИН —
Мене, текел, упарсин.
Пили чистый спирт в УФСИН —
Мене, текел, упарсин.
В дверь ко мне стучит УФСИН —
Мене, текел, упарсин.
Вот скинхеды жгут УФСИН —
Мене, текел, упарсин.
ну и т.д.