NSIS: Получение списка файлов с MD5-хешами.

Преамбула

Как-то показывал, как в NSIS получить MD5-хэши (копия), файлов в т.ч. Решил расширить пример, а как получить список файлов в каталоге и их MD5-хэши. Мне пригодится для следующего примера по NSIS, но и народ спрашивал, ибо в вышеуказанном примере нельзя выбрать произвольный файл, или сразу несколько. Исправляемся.

Поиск файлов на 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

${Locate} "[Path]" "[Options]" "Function"

где:

"[Path]" — путь, стартовый каталог для поиска
"[Options]" — опции (см. далее)
"Function" — callback-функция (см. далее)

Опции функции Locate

/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

${Locate} "C:\SOMEDIR" "/L=F" "Userfunction"

Где мы указали каталог, с которого нужно начать поиск, указали хоть одну опцию, нужно указать хотя бы одну, и указали функцию обратного вызова, пока имя условное, но ниже объясню.

Callback-функция

Это пользовательская функция, которая должна получать данные от ${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"'

Код секции целиком

Код callback-функции

После секции организуем пользовательскую функцию:

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

Купил HIEW!

Не, ребята, это даже круче чем автограф БГ! С этой утилитой столько воспоминаний, а главное, иногда нужна по делу, хотя уже и реже, чем раньше.

Слава автору, что проект до сих пор существует, как и любимый примерно с того же детского возраста Far Manager, вот реально, счастья таким авторам! Проект если младше меня, то ненамного. А так да, еще в 12-15 лет пользовался его пиратской версией. Теперь купил лицензию (не дам).

Охрененный респект автору, лучший шестнадцатиричный редактор (с возможностью диззассемблера и редактирования кода напрямую), до сих пор лучший на этой планете.

И я его купил.

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

Официальный сайт: https://www.hiew.ru/

И инструкцию, как купить (чтобы поддержать автора, который уже больше 20 лет старается), можно там же найти.

Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2023/03/07/kupil-hiew/

В связи с недавними событиями.

Ну где то ли русские националисты, то ли провокация спецслужбы из трех букв, то ли оба два сразу. Напророчил, получается. Задумывал, как подражание Лесину, а вышло опять подражание Сорокину. В общем, какую партию не строй, один хуй КПСС получится.

Друг работает в УФСИН —
Мене, текел, упарсин.

На отметку прусь в УФСИН —
Мене, текел, упарсин.

Пили чистый спирт в УФСИН —
Мене, текел, упарсин.

В дверь ко мне стучит УФСИН —
Мене, текел, упарсин.

Вот скинхеды жгут УФСИН —
Мене, текел, упарсин.

ну и т.д.

Утилиты для создания автоматического патча на NSIS

Один из пользователей NSIS создал проект VPatch, который позволяет на NSIS написать автоматический патчер (после покажу пример, а может даже парочку). Но устанавливается он как-то криво, консольные утилиты, которыми генерятся данные для будущего патча устанавливаются абы куда, а не в какой-нибудь %PATH%-каталог, что безумно бесит. Поправил. У меня все утилиты устанавливаются в %WINDIR%.

Утилиты отдельно (RAR-архив), 468Кб
Установщик (NSIS, EXE), 666Кб
Родной пример использования VPatch (7ZIP), 475Кб
Исходник моего инсталлятора

Совсем простой CrackMe, и как его сломать.

Преамбула

Попросили показать самый простой пример по реверсингу. Ну ладно, сделал простейшую программу, окно где надо ввести пароль:

Ввели правильно, получаем окно одобрямса:

Ввели неверно, программа отправляет на повторный ввод с сообщением об ошибке:

Если нажать Cancel — программа просто завершится.

Сам CrackMe сделан на базе прошлого примера окна типа InputBox (копия), не стал даже с закрытием «пароля» «звездочками» заморачиваться, говорю же, очень простой CrackMe, естественно, без всякой упаковки и навесных защит.

Вообще, пароль можно подсмотреть, открыв экзешник, например, в просмотровщике Far Manager по F3:

Прямо как в некоторых старых DOS-программах, где защита от копирования была скорее защитой от дурака, или в форках некоторых приставочных игр под DOS, где таким же образом можно было получить код от уровня.

Но мы пойдем другим путем, как завещал великий Ленин! Хотя способ будет не сильно далеким от «подсмотра», чтоб было слегка посложнее и интереснее — не будем пользоваться отладчиком, а воспользуемся дизассемблированием. В отладчике вместо одного шага (простого подсмотра пароля) будет полтора, а так все же веселее.

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

Читать далее

Ссылки

1. Исходник CrackMe
2. Бинарный файл
3. Чтоб два раза не вставать: Разница между инструкциями test и cmp Копия в PDF

Assembler: Окно типа InputBox в MASM32

Преамбула

Попросили сделать на ассемблере (MASM) что-то типа окна InputBox, которое было когда-то в Visual Basic 6.0. Кстати да, удобная фича для мелких запросов к юзеру, без всякого лишнего моделирования форм. Выглядело примерно так:

Да, товарищи (даже те, которые нам совсем не товарищи), это окошко чистая выдумка создателей VB, и в диком виде подобная функция нигде более не встречается.

Т.е. в WinAPI ее нет и не ищите!

Окно InputBox в MASM32

Но реализовать можно:




Исходник

Сама функция InputBox перенесена любовно в InputBox.inc, так что можно просто воткнуть и использовать. Сделано изначально было все примерно по тем же материалам Iczelion’а (копия), я лишь немного причесал и по полочкам разложил, особо ничего не меняя. Потому расписывать детально не буду. Суть можно понять из вышеозначенных материалов и комментариев, хоть и на буржуйском, в исходниках.

Мопед изначально не мой, но ездит. Нашел на Stackoverflow, слегка переделал.

Исходник на GitHub
Скомпилированная версия

По мотивам

Источник вдохновения

Flashnote — прикольная программа для мелких заметок

Давно искал что-то подобное, чтоб не кодить самому, до этого пользовался Лехиным ХулиОрганайзером, который, кроме заметок имел в комплекте таймер и напоминатор о заданиях, почту проверить, например.

Последнее время искал что-то новое, поскольку БД с заданиями и заметками начала глючить, и тут, ВНЕЗАПНО, за меня это нашел [info]paperdaemon@ljr:

Поиск простой и удобной оффлайн-программы для быстрых заметок, вместо той прежней самой ламповой и удобной, написанной в свое время одним программистом для своих нужд и презентованной мне еще в середине нулевых, но уже совершенно не работающей в Windows 10, запускаемой и скрываемой по одному нажатию кнопки, столкнул меня с целым множеством каких-то чудовищных и изощренных, платно-сервисных-по-подписке заново изобретенных сумрачными гениями программазма «велосипедов», что я уже практически отчаялся найти то, что мне нужно. И если бы не мое упорство, то я бы так и остался один на один с запускаемым по нажатию трёх клавиш одновременно ярлыком, ведущим на текстовый файл с заметками.

Итак, я все же нашел то, что мне прежде всего удобно, а значит и эффективно. К тому же, новая программа обладает ранее недоступными для предыдущего шедевра достоинствами, такими как сквозной поиск и создание древовидной структуры заметок. Бэкап по расписанию тоже весьма кстати. Программа бесплатна, но можно и задонатить авторам. Ибо они этого достойны

Программа и Windows 7 поддерживает, этот пост написал изначально в ней.

Ссылки

Официальный сайт
Копия (инсталлятор) на mega.nz
Копия (портабельная версия) на mega.nz

Знаменитый роскомнадзоровский словарик

Подправил ставший знаменитым роскомнадзоровский словарик:

— Отсортировано по алфавиту
— Дублирующие строки удалены
— В архиве три варианта: оригинальный, измененный в кодировке ANSI, измененный в кодировке UTF-8

Скачать с Mega.NZ, Архив 7Z

ЗЫ. Один хрен, вдруг понадобится матерный фильтр делать, а тут уже все сделали.

Linux: bash, получить случайный символ из заранее заданной строки

Преамбула

Задана, например, такая строка:

PGSTRING='#$%@!?0'

Задача — получить из строки с паттерном случайный символ.

Bash: получаем длину строки

STRLEN=`expr length "$PGSTRING"`

Если вывести переменную STRLEN для строки выше, будет следующее:

Len: 7

expr есть в coreutils, так что должен быть практически везде

Bash: получаем случайное число из заданного диапазона

Получить случайное число из заданного диапазона можно командой shuf, например:

shuf -i x-x1 -n1

где:
x-x1 — диапазон чисел
-nXX — количество цифр в числе.

Получаем случайное число:

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

Копия функции на PasteBin

Новый сборник Flash-игр от Лехи.

Все пересобрано в 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

Игры со скримерами

Нет описаний 🙂

Скачать

С MEGA.NZ (7ZIP, 68 Mb)

Сборник составил Leha Silent

(L) tolik-punkoff.com, 2023

Сферический «русский мир» в русском мире.

Отметка в паспорте прибавила уважения в коллективе, как и членство в партии, создала видимость нормы.

Из дневников маньяка Сергея Сливко

Почти то, на чем акцентирует внимание Витухновская. Она не права только в одном, как и любой маськовский «политег». Чтобы разрушить маньячество — нужно расчленить маньяка на много кусочков. До 24-го февраля еще был иной вариант решения проблемы, а сейчас этого уже не будет.

Успокойтесь, агенты и адепты маськвы. Никто вас не будет специально расчленять. «Ваш «Москвич» развалится сам по себе».

Ода роскомнадзору и нашей блокировке.

КАЛуга-Кали-Юга заблокировала нас,
Эй, КАЛуга-Кали-Юга, на, держи
         жуй ананас!
"А на нас великая миссия возложена!"
Говорил "Ананас"*, царь один.
Но царя того расстреляли,
Как сменился глобальный админ.

Так и ты подумай, КАЛ-уга,
Стоит жить ли сейчас так тебе.
Ведь придет же потом Кали-Юга...

И потомки найдут ананас...
В твоей грязной вонючей пизде!

*Среди военных у котоубийцы Николая v 2.0 была кличка «Ананас», именно из за его фразы «А на нас возложена великая миссия…»

Наконец-то нас заблокировали в ГОРФ, это, конечно, не орден, как у Латыниной (иноагент), не погоны генеральские с аксельбантом и лампасами, как у Невзорова (уголовное дело), но все равно очень приятно. Медалька.

Надо, кстати, заказать ИРЛ и разослать всем сопречукнутым!

Перепрошивка полуокирпиченного Nokia X2 Lumia (RM-1013)

В принципе делал все по этой видеоинструкции:

Прямая ссылка

Но с некоторыми оговорками, видимо потому, что телефон был не совсем «кирпич», н наполовину, т.е. заставку Nokia показывал, но дальше фигвам:

1. Ставим драйвер из каталога Driver в архиве QPST (ссылки на софт и прошивку будут ниже)
2. Ставим сам QPST
3. Ставим Care Suite For Store
4. Качаем прошивку
5. Пытаемся перепрошить стандартным способом с помощью Care Suite (есть инструкция на 4PDA)
6. Или не получится, или на этом этапе телефон окирпичится до такого состояния, как показано на видео.
7. Делаем все по видеоинструкции.

Софт и прошивка

Поскольку, на 4PDA половина ссылок битая, а половина вообще ведут на сраный фашистский Хуяндекс, я весь набор переложил на православную Мегу:

Care Suite For Store 5.6.134.1513
QPST
Прошивка

Ссылки

Тема на 4PDA
Инструкция по перепрошивке с помощью Care Suite (копия)
Копия видеоинструкции (MKV)

Переключение кодировки вручную в новом Firefox

В прошлой заметке (копия), где я писал и о том, что дебильные менеджеры Mozilla, какого-то полового органа отключили выбор кодировки вручную, я немного ошибся, написав, что соответствующий задаче плагин пока никто не удосужился написать, аноним подсказал, что плагин таки написали:

Скриншот

Ссылка на страницу плагина

Override Text Encoding

Проверил на Firefox 109.0 x64 Windows, работает!