Profile

coolwolf0: (Default)
coolwolf0

June 2025

S M T W T F S
1234 567
891011121314
15161718192021
22232425262728
2930     

Custom Text

В стародавние советские времена у нас старшеклассников был такой предмет как "УПК", то есть учебное производство. По сути нас натаскивали точно также, как на уроках труда, только в условиях максимально близких к реальному цеху, заводу и т.п. Формально был УПК и по программированию, но в расписание нашей школы он не вписался, поэтому мне досталась специальность слесаря механосборочных работ. В принципе, это не так страшно, как звучит, ведь мне всегда нравилось что-то починять, мастерить, улучшать. Кстати, слово "слесарь" происходит от немецкого "Шлоссер" - то есть специалист по замкам и ключам. Это была так, присказка.

А теперь сама история... В свой законный день официального отпуска я прибирался в доме, что-то подклеивал, что-то подкрашивал, а под конец пошёл относить материалы в подвал. Дверь в наш подвал вечно глючила, поэтому я привычно приложил дополнительное усилие при повороте ключа и он вдруг как-то подозрительно легко провернулся. Не чуя подвоха поворачиваю ручку двери - она не открывается! Дёргаю ключ и внезапно понимаю, что у меня в руке только "ствол", а "язычок" остался внутри замка. Ситуация мягко говоря странная: я не могу попасть к себе в подвал, и при этом непонятно что тут можно сделать. Запасного ключа к такому примитивному замку не предусмотрено, а вызывать мастера для вскрытия столь ничтожного препятствия - как-то стрёмно. Бегу быстренько наверх и приношу из дома набор набер ван: отвёртки, молоток, плоскогубцы, очки (для ближнего боя) и складную табуреточку. По результатам первой схватки мне удаётся снять декоративную защиту скважины и расковырять вход в замок плоскогубцами. После этого я поддел отвёртками засов изнутри и отодвинул его в положение "открыто". Между делом немного попсиховав расковырял косяк и саму дверь в месте соединения (несильно), но это так, ерунда. Короче, доступ внутрь обеспечен, но что же делать с замком? Пытаюсь вытащить эту заржавевшую дрянь и внезапно обнаруживаю, что всё прекрасно разбирается, кроме дверной ручки, которая намертво клинит извлечение замка. Ручка зашплинтована насквозь ржавым гвоздём и гвоздь этот крошится, ломается, но ручку не отпускает. Бегу наверх и приношу набор намбер ту: ножовку по металлу. План таков: спилить нафиг незафиксированную часть ручки (поскольку она всего-навсего дюралюминиевая) и просто отковырять осовободившуюся часть гвоздя. Высверлить эту дрянь я не решался из-за близкого нахождения отвертия к самой двери, так можно запросто сломать сверло. Пилил я эту чёртову ручку долго и безуспешно - дойти до состояния отделения от фиксированной части не удавалось. И тогда я решился на отчаянный шаг намбер три: сбегал за удлиннителем и дрелью. Толстым сверлом под углом я тупо высверлил всё что можно в том месте, где был треклятый гвоздь, добрался до оси и выбил из неё остатки, мешавшие разобрать замок. Ну а дальше уже всё пошло по накатанной: сбегал в фирменный магазин, где по предъявлении замка-"пенсионера" мне выдали аналогичный новый, в комплекте с ручками. Чуть подправив долотом место посадки замка я сходу зафиксировал его на месте старого и вуаля - подвал вернулся в первоначальное состояние. Хотя нет, новый-то замок уже не клинит и (надеюсь) ещё меня переживёт.

Так что помимо компьютерного взлома, мне оказался по плечу и взлом чисто физических замков!
Я тут потихоньку ваяю код для полноценного аггрегатора RSS, чтоб базировался на вебе, с мордой от Bootstrap. Мой древний самопал бежит строго на локальной машине, а это бардак и каменный век с точки зрения доступа. Про внешнее оформление в стиле Веб-1.0 вообще молчу.
Уже сейчас имеется подкачка RSS-лент с сайтов по списку и умное хранение обновлений в базе, постраничное отображение статей, отметка прочитанного, редактирование кое-каких деталей имеющихся лент, поддержка клавиатурных шорткатов, плюс адаптивный дизайн под десктоп и смартфон.

Помимо всяких заморочек с базой данных, жабаскриптом и пе-ха-пе, приходится кое-где и велосипеды изобретать.
В частности, задумал я накатать свой алгоритм для шифрования и передачи пароля (как нового, так и при логине).
Сразу предупреждаю: мой проект не будет хранить никаких супер-пупер секретных или интимных личных данных.
Просто мне надо разграничить доступ между пользователями, ну и предотвратить возможный вандализм с угоном аккаунта, порчей или замусориванием данных, вот это всё... Код хотелось бы сделать открытым (но не содержимое базы данных, естественно).

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

Вторая задача состоит в том чтобы передать пароль зарегистрированного пользователя (с учётом того, что на этот раз хакеры точно смогут прослушивать траффик). Решение выглядит так: сначала клиентская часть отправляет в систему запрос "пользователь такой-то хочет передать пароль". Система генерирует временный кусок "соли" и пересылает его клиенту обратно. После этого клиентский жабаскрипт считает чексумму пароля, на неё накладывает кусок "соли", и полученный результат возвращает в систему. Система убеждается, что это та самая сессия, накладывает свою "соль" на свою сохранённую чексумму пароля и сравнивает её с полученным от клиента кодом.

Если хакер перехватит сообщения в обоих направлениях, то всё равно повторить запрос на авторизацию он не сможет - та сессия уже стёрта, значит новая временная соль не даст тот же результат, что и у законного пользователя, ведь у него не будет из чего изготовить первую чексумму. Увы, менять пароль при этом не получится, потому что новый текст придётся передавать по тому же незащищённому каналу.

Фактически, я разрубил гордиев узел несекьюрного канала при помощи вспомогательного канала (мейл).
Насколько мой сценарий опасен с точки зрения реальной жизни? Есть какие идеи?
У меня относительно новый рабочий лептоп. Как только получил его, сразу обрадовался - все приложения запускались с невиданной скоростью, система просто "летала".
Однако, вам знакомо это чувство, когда в определённый момент времени родное "железо" вдруг начинает тормозить по абсолютно надуманным причинам: открытие контекстного меню, вызов ассоциированного приложения, загрузка или сохранение файла... Мы уже подспудно воспринимает эту ситуацию как "старение" системы - пора апгрейдиться, лошадка уже "не тянет".

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

Короче, не хотелось влачить жребий терпилы, и я стал бороться. Для начала погуглил на предмет того, насколько это явление массовое. Понятное дело, тормозить система может по разным причинам, в том числе и из-за реальных проблем в конкретном сочетании софта и железа. На всякий случай провёл рекомендуемое тестирование и "восстановление" системных файлов. Увы, это ничего не дало, ибо откуда файлам портиться-то? Тогда я пошёл дальше - отменил службу индексации файлов, встроенную в винду. И после перезагрузки произошло чудо: система словно помолодела на год! Никаких тормозов! Контекстное меню открывается через мгновение после клика, приложения запускаются, файлы читаются - без малейшей задержки! Ну как тут не вознести молитву, а лучше - анафему тем, кто изобрёл столь тормозную "фичу"...
По образованию и по специальности я - автоматизатор. Это значит, что всякие повторяющиеся ручные процессы бросают мне вызов не только в личном, но и в профессиональном плане.

Недавно жена приобрела у какого-то новомодного специалиста онлайн-тренинг по уходу за лицом - всякие упражнения, лекции, консультации. Формально за этот материал уплачено и она может им пользоваться, но только в течение года. А хотелось бы иметь все эти тренинги на компьютере, в телефоне и на телевизоре без ограничения времени.

Сначала я просто брал текст очередного урока в браузере, выделял нужную часть, правый клик и выбирал "печать в файл". Но уроки-то содержат ещё и видео... Я уже описывал в этом блоге, как можно сграбить видео с несильно защищённого сайта: находим ссылку на видеофайл в логе браузера и тупо скачиваем его. Но это был чисто "детский" пример. А вот в данном случае движок оказался чуть более продвинутый: проигрыватель работает с некой ссылкой типа *.m3u8 внутри которой имеется несколько ссылок на разные разрешения и ... всё. Скачать такой файл можно, но он представляет из себя какие-то линки на закодированные фрагменты видеопотока. Штирлиц призадумался и ... набрал в гугле "как скачать видео из файла типа NNN". Как ни странно, мой старый знакомый VLC player оказался первым кандидатом - у него есть режим записи потокового вещания (а m3u8 это как раз оно). Появилась первая надежда: скачав ссылку я скармливал её VLC и он честно гнал на выходе видос. Но это же куча ручной работы!

И вот тут на сцену выходит автоматизация. Для начала я написал bat-файл, который тупо скачивал основную ссылку, дабы получить второй файл. Попытался автоматически извлечь видео самого высокого разрешения и ... столкнулся с проблемой. Оказывается язык сценариев BAT в мелкомягкой среде сочиняли инопланетяне-дислектики. Для того, чтобы извлечь из файла последнюю строку там надо накатать какое-то нагромождение букв и символов, скорее напоминающее последнюю волю египетского фараона, а не "tail -1", как в юникс-шелле. Не буду тут цитировать сие страшное заклинание, дабы не пострадала психика читающих этот блог женщин и детей. Значит лежала моя дорога в казённый дом - скачал комплект юникс-утилит под винду, вставил знакомый "tail -1" в bat-файл и всё заработало: из первоначальной ссылки получался файл описания потокового видео. Но какая же это морока перетаскивать файлы в окошко, что-то там выбирать, сохранять, переименовывать, стирать... Короче говоря, у меня в чулане нашлась классная утилита ffmpeg, которой я в своё время что-то там перекодировал (по-моему FLAC в MP3). Так вот, она прекрасно подошла для автоматического сграбливания видеопотока! Всё, задача решена - землекопа полтора можно скачать видео, указав адрес потока из HTML сорса плейера и имя конечного видеофайла. Всё само скачивается, промежуточные файлы удаляются, благорастворение воздухов в облацех!

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

Итак, начнём по порядку. Утро выходного дня, обычная просьба "подойди, что-то у меня комп завис". Анамнез: домашний комп внезапно перестал реагировать на что-то и показывал черный экран. Поменял батарейки на беспроводных мышке/клаве - ноль. Перезагрузился, комп зависает на переходе в виндовый гуй (и при этом субъективно значительно медленнее бутится). Пробую несколько перезагрузок, пока не попадаю в меню винды "у вас что-то не грузится операционка, давайте попробуем исправить". Ну Ок, говорю, давай, работай. Прошу откатиться на предыдущую сохранённую версию. Винда радостно крутит колёсики, считает прОценты, вежливо просит не мешать ... и загружается. Ура, думаю я, но накатив очередное обновление получаю тот же черный зависший экран. Ладно, очевидно консервативное лечение не помогло и проблема переходит в область хирургии - открываю корпусок, вроде никаких затыков нет: вентиляторы работают, радиаторы не раскалены. Тем не менее - черный экран при подъёме винды. Начинаю грешить на новый монитор - подключаю его через кабель SVGA - та же пестня. Беру "донорский" монитор - на нём почему-то всё пашет (через SVGA, ибо донору - в обед сто лет). Меняю кабели - стабильности нет. Плюнул, достал бутыль водки, извлёк видеокарточку и протёр контакты. Ура, мануальная терапия помогла: система поднялась! Заодно выяснил, что кабель вставлялся чуток с натяжением вбок, поэтому гнездо HDMI "дребезжало". Короче, первая часть марлезонского балета окончена - система стабильно бутится и не виснет, монитор оправдан по всем статьям, а видеокарточка радостно пашет, исполняя пьяные частушки.

Read more... )

Кто о чём, а я о файлообменниках. Публиковал я тут рецепт обхода рекламных окон, открывающихся по каждому клику - в окне отладки F12 выбрать Elements => Event Listeners и удалить всё, что связано с кликами и мышью.
Так вот, сегодня я "на дурочку" сделал правый клик на кнопке "скачать бесплатно" и ... просто открылось желаемое окно. Решил капчу, кликнул на "продолжить" и ... никакой рекламы не появилось. Под конец правый клик на ссылке для скачивания - открылось окно для скачивания.
Или это какое-то продвинутое обновление Хрома, или ребята поняли, что их бизнес-модель слишком агрессивная.

Кстати, спросил вчера у дочки, ты как, видела этот богомерзкий "Бинг". Она аж скривилась: "бяка какая-то". Майкрософт старался-старался, но "не шмогла".
Увы, моя работа изо дня в день связана с офисным мусором, который поддерживается рабочим лептопом. Помимо того, что там аутлук, мессенджеры, звонилка, и т.п. самое главное приложение для работы - это VNC Viewer, через который я и попадаю в свою вселенную линуксов. За 5 лет работы я могу по пальцам одной руки сосчитать количество перезагрузок линуксового десктопа, да и то по внешним причинам (ну не складывается иногда что-то в сети или у хайпервайзорного железа). А лептоп постоянно живёт своей жизнью - накатывает обновления, активно что-то архивирует-дезархивирует, требует немедленной перезагрузки или просто отказывается работать, намекая, что без ребута дальнейшее сотрудничество проблематично. Естественно, открытые окна при этом пропадают, архивация тормозит все процессы, а перезагрузка занимает по 15 минут драгоценного рабочего времени.

А недавно винда вообще впала в детство. Давно уже я не видел ситуации, когда менюшка правого клика какого-нибудь приложения оставляла бы за собой на десктопе неудаляемую "висящую" строчку текста. И вот опять это вернулось. Сначала я наивно попытался позакрывать все окна - не помогло. Перезагрузился, немного поработал, правый клик и опять такая же фигня. Причем поверх VNC! Работать невозможно. Попробовал перезапустить Explorer - убил в списке процессов и запустил заново. Результат тот же. Но тут мне пришла в голову шальная мысль - а если просто вырубить тот десктоп? Включил-выключил монитор, лептоп недовольно перещелкнул видео туда-сюда и ... мерзкая строчка пропала! Ура, на хитрую жопу нашелся хитрый болт с левой резьбой. Майкрософт может продолжать своё мерзкое дело, он нам не страшен.
Формальное объяснение на языке вейсманистов-морганистов:
https://www.cyberciti.biz/faq/understanding-bash-fork-bomb/

Остальным расскажу "на пальцах". Итак, в шелле можно не только "who mom likes" писать, но и целые конструкции строить, как в настоящих языках программирования. Правда, когда я говорю своим коллегам "давайте это быстренько напишем на шелле" они делают большие глаза и говорят "ну... это же сложно". Вот такой я, испорченный гик. Короче, на шелле можно и функции определять. В результате программа может стать рекурсивной, причём тут никто за стеком и памятью интерпретатора не следит. Таким образом и работает "форк-бомба" - определяется рекурсивная функция и тут же исполняется, вводя всю систему в медленный но верный ступор. Классическая бомба выглядит как многоэтажный смайлик

:(){ :|:& };:



Я говорил, что нельзя её запускать? Если запустили, то поздно - эта штука медленно но верно съедает ресурсы памяти пока не завесит систему намертво. Если упала на синтаксисе, есть более совместимая, но менее "смайловая" версия

b(){ b|b& };b



У вас нет под рукой подопытного линукса? Тогда потренируйтесь на кошках в онлайн-версии, например тут

https://copy.sh/v86/?profile=linux26

Сначала вроде бы ничего не произойдёт... Но в какой-то момент система просто перестанет отвечать на нажатие команд.

Вы спросите, а как же защититься от такой тупой атаки? Ответ - в статье на басурманском языке

ulimit -S -u 5000



Мораль: нельзя отдавать процессам полный контроль, особенно в плане форканья.
Я уже говорил, что часто скачиваю всякие компьютерные книги с файлообменников. Так вот, последнее время пара файлообменных сайтов совсем оборзели. Один стал выбрасывать рекламные окна по два раза подряд, прежде чем отдавать ссылку на следующую страницу. То есть в простом сценарии с выбором бесплатного скачивания, ожидании, решении капчи и переходе к скачиванию - штук 8 кликов приходится на открытие рекламы. Ну ладно, я тупо держу руку на Ctrl+F4 и тут же после клика закрываю рекламную вкладку.

А вот что учудил другой файлообменник - перейти от экрана к экрану вообще нельзя (подозреваю - в отместку за адблокер). Они поставили javascript-callback буквально на всё и вся. В результате, сколько ни кликай - результат один: открывается очередное рекламное окно. Способ борьбы с этой пакостью нудный, но действенный:
1. Нажимаем F12
2. Выбираем слева вкладку "Elements"
3. Справа выбираем вкладку "Event Listeners"
4. Удаляем все коллбеки, связанные с мышью - blur, click, mousedown, focus
Voila - можно смело кликать на очередную кнопку и переходить к следующему экрану.

Как и раньше, название сайта не упоминаю - кто страдает, тот поймёт.

Be safe and have fun.