Хотели фото с супом — нате вам!

Суп гороховый:
+ Картофель
+ Горох
+ Лук
+ Мясо
плюс хлеб
4 порции
+ водочка
+ доставка
600 рублей.
Закрыто все остальное, потому и дорого так.
Днем бы рублей в 200 обошлось бы.
Хотели фото с супом — нате вам!
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/
Ну где то ли русские националисты, то ли провокация спецслужбы из трех букв, то ли оба два сразу. Напророчил, получается. Задумывал, как подражание Лесину, а вышло опять подражание Сорокину. В общем, какую партию не строй, один хуй КПСС получится.
Друг работает в УФСИН —
Мене, текел, упарсин.
На отметку прусь в УФСИН —
Мене, текел, упарсин.
Пили чистый спирт в УФСИН —
Мене, текел, упарсин.
В дверь ко мне стучит УФСИН —
Мене, текел, упарсин.
Вот скинхеды жгут УФСИН —
Мене, текел, упарсин.
ну и т.д.
Один из пользователей NSIS создал проект VPatch, который позволяет на NSIS написать автоматический патчер (после покажу пример, а может даже парочку). Но устанавливается он как-то криво, консольные утилиты, которыми генерятся данные для будущего патча устанавливаются абы куда, а не в какой-нибудь %PATH%
-каталог, что безумно бесит. Поправил. У меня все утилиты устанавливаются в %WINDIR%
.
Утилиты отдельно (RAR-архив), 468Кб
Установщик (NSIS, EXE), 666Кб
Родной пример использования VPatch (7ZIP), 475Кб
Исходник моего инсталлятора
Попросили показать самый простой пример по реверсингу. Ну ладно, сделал простейшую программу, окно где надо ввести пароль:
Ввели правильно, получаем окно одобрямса:
Ввели неверно, программа отправляет на повторный ввод с сообщением об ошибке:
Если нажать Cancel — программа просто завершится.
Сам CrackMe сделан на базе прошлого примера окна типа InputBox
(копия), не стал даже с закрытием «пароля» «звездочками» заморачиваться, говорю же, очень простой CrackMe, естественно, без всякой упаковки и навесных защит.
Вообще, пароль можно подсмотреть, открыв экзешник, например, в просмотровщике Far Manager по F3:
Прямо как в некоторых старых DOS-программах, где защита от копирования была скорее защитой от дурака, или в форках некоторых приставочных игр под DOS, где таким же образом можно было получить код от уровня.
Но мы пойдем другим путем, как завещал великий Ленин! Хотя способ будет не сильно далеким от «подсмотра», чтоб было слегка посложнее и интереснее — не будем пользоваться отладчиком, а воспользуемся дизассемблированием. В отладчике вместо одного шага (простого подсмотра пароля) будет полтора, а так все же веселее.
И задача, естественно, модифицировать программу так, чтобы подходил любой пароль.
1. Исходник CrackMe
2. Бинарный файл
3. Чтоб два раза не вставать: Разница между инструкциями test
и cmp
Копия в PDF
Оригинальным способом политолог Глеб Павловский помянул политика Бориса Немцова.
Попросили сделать на ассемблере (MASM) что-то типа окна InputBox, которое было когда-то в Visual Basic 6.0. Кстати да, удобная фича для мелких запросов к юзеру, без всякого лишнего моделирования форм. Выглядело примерно так:
Да, товарищи (даже те, которые нам совсем не товарищи), это окошко чистая выдумка создателей VB, и в диком виде подобная функция нигде более не встречается.
Т.е. в WinAPI ее нет и не ищите!
Но реализовать можно:
Сама функция InputBox
перенесена любовно в InputBox.inc
, так что можно просто воткнуть и использовать. Сделано изначально было все примерно по тем же материалам Iczelion’а (копия), я лишь немного причесал и по полочкам разложил, особо ничего не меняя. Потому расписывать детально не буду. Суть можно понять из вышеозначенных материалов и комментариев, хоть и на буржуйском, в исходниках.
Мопед изначально не мой, но ездит. Нашел на Stackoverflow, слегка переделал.
Исходник на GitHub
Скомпилированная версия
Придумал алгоритм, он не сработал как надо (определить в BASH число или строка без регулярных выражений). Удален отовсюду, с регулярками проще.
Давно искал что-то подобное, чтоб не кодить самому, до этого пользовался Лехиным ХулиОрганайзером, который, кроме заметок имел в комплекте таймер и напоминатор о заданиях, почту проверить, например.
Последнее время искал что-то новое, поскольку БД с заданиями и заметками начала глючить, и тут, ВНЕЗАПНО, за меня это нашел paperdaemon@ljr:
Поиск простой и удобной оффлайн-программы для быстрых заметок, вместо той прежней самой ламповой и удобной, написанной в свое время одним программистом для своих нужд и презентованной мне еще в середине нулевых, но уже совершенно не работающей в Windows 10, запускаемой и скрываемой по одному нажатию кнопки, столкнул меня с целым множеством каких-то чудовищных и изощренных, платно-сервисных-по-подписке заново изобретенных сумрачными гениями программазма «велосипедов», что я уже практически отчаялся найти то, что мне нужно. И если бы не мое упорство, то я бы так и остался один на один с запускаемым по нажатию трёх клавиш одновременно ярлыком, ведущим на текстовый файл с заметками.
Итак, я все же нашел то, что мне прежде всего удобно, а значит и эффективно. К тому же, новая программа обладает ранее недоступными для предыдущего шедевра достоинствами, такими как сквозной поиск и создание древовидной структуры заметок. Бэкап по расписанию тоже весьма кстати. Программа бесплатна, но можно и задонатить авторам. Ибо они этого достойны
Программа и Windows 7 поддерживает, этот пост написал изначально в ней.
Официальный сайт
Копия (инсталлятор) на mega.nz
Копия (портабельная версия) на mega.nz
Подправил ставший знаменитым роскомнадзоровский словарик:
— Отсортировано по алфавиту
— Дублирующие строки удалены
— В архиве три варианта: оригинальный, измененный в кодировке ANSI, измененный в кодировке UTF-8
ЗЫ. Один хрен, вдруг понадобится матерный фильтр делать, а тут уже все сделали.
Слава самизнаетекому!
Знакомая прислала
Не ястреб, конечно, а орлик или подорлик скорее всего.
Задана, например, такая строка:
PGSTRING='#$%@!?0'
Задача — получить из строки с паттерном случайный символ.
STRLEN=`expr length "$PGSTRING"`
Если вывести переменную STRLEN
для строки выше, будет следующее:
Len: 7
expr
есть в coreutils
, так что должен быть практически везде
Получить случайное число из заданного диапазона можно командой shuf
, например:
shuf -i x-x1 -n1
где:
x-x1
— диапазон чисел
-nX
— X
— количество цифр в числе.
Получаем случайное число:
RNUM=`shuf -i 1-$STRLEN -n1`
Вывод:
R Num: 3
Отправляем строку на консоль:
echo -e -n "$PGSTRING"
И перенаправляем команде cut
:
Для того, чтобы вырезать командой cut символ, или группу символов из строки, нужно указать первый и последний символ. Например:
cut -c1-5
Применяем все вышесказанное:
RCHAR=`echo -e -n "$PGSTRING"|cut -c$RNUM-$RNUM`
Вывод:
Char: %
getrandchar() #$1 - pattern_string { STRLEN=`expr length "$1"` RNUM=`shuf -i 1-$STRLEN -n1` RCHAR=`echo -e -n "$1"|cut -c$RNUM-$RNUM` }
Использование:
getrandchar $PGSTRING
Все пересобрано в EXE, совместимо со всеми Windows, начиная с XP
Аркады
— AC — Дави инопланетных тараканов!
— ALIEN — Инопланетянин сбегает из зоны 51. Мочи земляшек!
— ARC — Платформер, где на тебя набигают Смурфики
— BUCK — Симулятор собаки
— BUTCH — Играешь ха разумный хищный гриб, жрешь насекомых
— CANDY — Платформер, надо собирать конфетки
— CAT2 — Надо спасать котиков
— catchacrab[1] — Ловля крабов
— EscapeFromElmStreet[1] — Бродилка по мотивам «Кошмара на улице Вязов»
— EXP — Дави пешеходов автомобилем
— fixturkey[1] — Зажарь индюка!
— GAME3 — Платформер авиационный
— gladiator — Симулятор гладиатора
— HULK — Симулятор халка
— LINSE — Инопланетянин гигантской лупой сжигает город и людишек
— marspatrol — Марсианский патруль
— mofunzone-com-sinjid[1] — Играешь за самурая
— mofunzone-com-tacticscore[1] — Мини-версия «Героев меча и магии»
— monsterbash — Типа «пришиби крота» только с монстрами
— MS — Симулятор акулы
— nu_pagadi — «Ну, погоди»
— PACMAN — Пакман
— PAR — Простенький платформер с паранормальной атмосферой
— Paranormality[1] — Простенький платформер с паранормальной атмосферой (еще одна версия)
— PM — Еще один Пакман
— POL — Симулятор толстяка
— polar_rescue — Платформер за пингвина
— PREDKI — Уберись в комнате, пока родители не явились
— Ronin-SpiritOfSword[1] — Симулятор самурая
— SB — Проведи мыльный пузырь через лабиринт
— SC — Управляй НЛО
— SHEEP — Надо загнать овец в загон
— SHUTTLE — Ебанутая скорая помощь! Дави всех нахуй!!!
— SMU — Лови пирожки и прочие кондитерские изделия
— SonicLostInMarioWorld[1] — Платформер
— SSS — Управляй НЛО другая версия
— ST — Файтинг палочных человечков
— StickRPG[1] — Двумерная РПГ
— stroiteli — Кидайся шариками с водой с моста!
— teddyball — Волейбол игрушечных медведей, можно играть вдвоем или с компьютером
— TheA&DEngine[1] — AD&D с компьютером
— UltimateFlashSonic — Sonic
— war_in_iraq — Мочи Ирак!
— WirtuaLife[1] — Виртуальная жизнь
— Wolf3d[1] — Симулятор волка в 3D, от первого лица. Жри сраных коров!
— BF — Бусидо файтинг (простой файтинг)
— dronetour — Файтинг проволочных человечков
— Fight4 — Файтинг палочных человечков
— MORDA — Для снятия стресса. Набей иорду начальнику.
— NP — Ninja Power
— portalfighter — Файтинг на двоих
— SILAT — Каратэ
— ST — Набигают!
— Рыбалка
— Leshka_na_rabote — Беспредел в офисе
— SIMGIRLS — Симулятор знакомства
— tc — Tactic Core
— Bull — Быки-коровки
— HEXXAGON — Гексагон. Заполни своим цветом все поле.
— PUZZLE — Пятнашки
— ALISSA — Раздень Алису Милан
— holio1_rus[1] — Симулятор развода девушки
— Jeu_Onamis_01 — Головоломка (странная)
— slipknot[1] — хз
— Squares2 — хз
— Tactic Core
Нет описаний 🙂
Сборник составил Leha Silent
(L) tolik-punkoff.com, 2023
Отметка в паспорте прибавила уважения в коллективе, как и членство в партии, создала видимость нормы.
Из дневников маньяка Сергея Сливко
Почти то, на чем акцентирует внимание Витухновская. Она не права только в одном, как и любой маськовский «политег». Чтобы разрушить маньячество — нужно расчленить маньяка на много кусочков. До 24-го февраля еще был иной вариант решения проблемы, а сейчас этого уже не будет.
Успокойтесь, агенты и адепты маськвы. Никто вас не будет специально расчленять. «Ваш «Москвич» развалится сам по себе».