Мир сегодня с "Юрий Подоляка"
Мир сегодня с "Юрий Подоляка"
Труха⚡️Україна
Труха⚡️Україна
Николаевский Ванёк
Николаевский Ванёк
Труха⚡️Україна
Труха⚡️Україна
Николаевский Ванёк
Николаевский Ванёк
Лёха в Short’ах Long’ует
Лёха в Short’ах Long’ует
Блог* avatar
Блог*
Блог* avatar
Блог*
अवधि
दृश्य की संख्या

उद्धरण

पोस्ट
रिपोस्ट छिपाएं
08.02.202516:27
#itsec #suckassstory #suckassstory #suckassstory
07.02.202517:32
Из чуть менее важных новостей: nom ориентирован больше на написание парсеров для машинно-читаемых форматов, где в приоритете быстродействие. Для написания парсеров конфигов и языков программирования больше нужны другие вещи, которые в библиотеке для написания парсеров общего назначения не очень уместны. С релизом nom 8 также появился новый крейт nom-language, в котором в дальнейшем и будет добавляться код под такие нужды.

В настоящий момент там две вещи. VerboseError собирает все ошибки дерева парсеров и потому больше подходит для диагностирования ошибок в человеко-читаемом формате. Функция precedence позволяет разбирать выражения, учитывая приоритеты операторов, без их кодирования в грамматике:

// пачка импортов, которые не имеет смысла показывать


(Если вы задаётесь вопросом, что там делает fail: этот аргумент функции precedence описывает, как парсить постфиксные выражения. В этой грамматике постфиксных операторов нет, поэтому попытка распарсить что-то, как постфиксное выражение, должно всегда завершаться ошибкой)
से पुनः पोस्ट किया:
Install Wizard avatar
Install Wizard
06.02.202521:52
https://stackoverflow.com/questions/39863255/repz-ret-why-all-the-hassle
Процессорная архитектура - это магия. Без шуток.

(речь в вопросе о том, что в сгенерированном компилятором коде (и не только) нередко можно встретить вместо обычной инструкции RET (возврат из функции) бессмысленно выглядящую конструкцию REPZ RET (REPZ повторяет инструкцию после неё определённое кол-во раз и актуальна только для работы со строками; для RET она, очевидно, ничего не делает, это всё равно, что написать while(true) { return; })
04.02.202519:00
Нашел золото: перевод слова "Нет" на офисный булшит.

Избранное (жизненное):
- Interesting idea, let's explore that next quarter
- What problem are we trying to solve?
- Let’s gather more data before moving forward
- Let’s keep this in mind for future consideration
से पुनः पोस्ट किया:
KotaMota Games avatar
KotaMota Games
से पुनः पोस्ट किया:
Технологический Болт Генона avatar
Технологический Болт Генона
01.02.202513:47
Ждём, когда запустят DoomPDF в LinuxPDF
Разработчик под ником ading2210 представил проект LinuxPDF — Linux в PDF в браузере. Проект открывается только в браузерах на базе Chromium, использующих движок PDFium. Код написан на C и опубликован на GitHub по лицензией GNU General Public License v3.0.

«Это Linux, работающий внутри PDF‑файла через эмулятор RISC‑V, основанный на TinyEMU», — пояснил автор решения.
. . .
Полная спецификация для JS в PDF была реализована только Adobe Acrobat, и она содержит некоторые нелепые вещи, такие как возможность выполнять 3D-рендеринг, делать HTTP-запросы и обнаруживать каждый монитор, подключенный к системе пользователя. Однако в Chromium и других браузерах была реализована только крошечная часть этого API из-за очевидных проблем безопасности. Благодаря этому мы можем выполнять любые вычисления, которые захотим, просто с очень ограниченным вводом-выводом.

Код C можно скомпилировать для запуска в PDF с использованием старой версии Emscripten, которая нацелена на asm.js вместо WebAssembly. С его помощью я могу скомпилировать модифицированную версию эмулятора TinyEMU RISC-V в asm.js, который можно запустить в PDF. Для ввода и вывода я повторно использовал тот же код отображения, который я использовал для DoomPDF. Он работает, используя отдельное текстовое поле для каждой строки пикселей на экране, содержимое которого задаётся различными символами ASCII. Для ввода есть виртуальная клавиатура, реализованная с кучей кнопок, и текстовое поле, в котором вы можете ввести текст, чтобы отправить нажатия клавиш в виртуальную машину.

Самая большая проблема здесь связана с производительностью эмулятора. Например, ядру Linux требуется около 30-60 секунд для загрузки в PDF, что более чем в 100 раз медленнее, чем обычно. К сожалению, нет способа исправить это, поскольку версия V8, которую использует движок PDF Chrome, имеет отключённый JIT-компилятор, что разрушает его производительность.

Для корневой файловой системы возможны как 64-, так и 32-битные версии. По умолчанию используется 32-битная система buildroot (которая была предварительно собрана и взята из оригинальных примеров TinyEMU), а также 64-битная система Alpine Linux. Однако 64-битный эмулятор примерно в два раза медленнее, поэтому обычно он не используется.

Представлен проект LinuxPDF — Linux в PDF в браузере
https://habr.com/ru/news/878542/

GitHub
https://github.com/ading2210/linuxpdf

Demo
https://linux.doompdf.dev/linux.pdf

Он же в прошлом году запускал DOOM на POS-терминале
https://t.me/tech_b0lt_Genona/4308

А недавно в PDF
https://github.com/ading2210/doompdf
से पुनः पोस्ट किया:
Too Long, Did Read avatar
Too Long, Did Read
08.02.202516:27
Subaru ImpressUs, или как открыть машину, зная только ее номер

https://samcurry.net/hacking-subaru

Прочитал недавно вышедший баг-репорт Сэма Карри - очень крутого баг-баунти хантера, который специализируется на поиске уязвимостей в компаниях-производителях автомобилей.
Сэм рассказывает о том, как год назад купил маме Subaru Impreza нового поколения, к которой по умолчанию прилагается сервис “Starlink” - нет, не спутниковый интернет Маска, а всего лишь умная система управления машиной + ее отслеживания, что-то вроде Find My, но для машин.
Оказалось, что зная номера машины, через эту систему ее можно отследить, открыть и угнать без шума.

Как это часто бывает, самая опасная часть айти-системы - админка для сотрудников, так как защищена она бывает плохо (ну а кто зайдет), а возможностей там просто дохрена.
Вот и в этой истории обнаружилось, что в админке крайне уязвимая апишка, если конкретнее - есть эндпоинт “resetPassword”, который ведет себя вот так:


POST /forgotPassword/resetPassword.json HTTP/1.1
Host: portal.prod.subarucs.com

{
"email": "random@random.com",
"password": "Example123!",
"passwordConfirmation": "Example123!"
}



Дело за малым - нужно найти подходящий емейл сотрудника.
Естественно, корп емейл у Субару, как практически у всех, имеет формат [first_initial][last]@subaru.com, так что достаточно найти ФИО любого сотрудника на линкдине.

Но все-таки, не может же все быть так легко?

И да, и нет.
Для того, чтобы пользоваться функционалом админки после того, как мы вошли туда, сбросив пароль, надо также ввести 2FA - в данном случае, секретный вопрос, вроде “имя первой собаки”. бтв, ужасное решение, никогда не делайте так )
Но вскоре выяснилось, что функционал 2FA реализован… на фронте.
То есть, просто закомментив на уже отрисованном сайте 1 строчку:
//$(‘#securityQuestionModal').modal('show’);, можно спокойно пользоваться всем функционалом сайта.

Итак, мы внутри админки. Что дальше?

Начнем с того, что сотрудник имеет доступ к данным всех покупателей в США, Канаде и Японии (пиздец) - и ему доступен поиск по фио, телефону, и даже номерам машины. Как пишет Сэм, сложно сделать систему безопасной, если в ней предусмотрен такой уровень доступа для любого 18-ти летнего интерна в компании.

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

А из самой системы Старлинк, наконец, можно:

- Удаленно заводить и останавливать, открывать, закрывать и отслеживать машину. А еще бибикать :)
- Вытащить историю перемещений машины ЗА ПОСЛЕДНИЙ ГОД, размеченную по времени + с информацией о том, когда машину заводили и глушили.
- Получить все персональные данные владельца, включая имена других авторизованных пользователей, домашний адрес и т д.
Хотя кому нужен домашний адрес, когда есть годовая история всех перемещений…

Дальше Сэм с коллегой сделали proof of concept, объединив все находки в одну консольную утилиту: вводишь номер машины, тебя редиректит на Starlink с полным доступом к машине.
Посмотрите видео, это просто полный треш: https://youtu.be/0i8juy6RPBI.

Заключение

Если вы думаете, что такие приколы бывают только с Субару, то можете посмотреть на аналогичную историю с KIA, а также на открытую базу данных Volkswagen, в которой хранится история перемещения ВСЕХ машин марки, включая машины полицейских и сотрудников спецслужб.

А еще советую всем интересующимся посмотреть выступление Сэма на DEFCON (он взломал все модемы очень крупного интернет-провайдера) и подкаст Critical Thinking с его участием: там он, например, рассказывает, к чему приводят его находки (его недавно арестовали на границе в аэропорту и обвинили в какой-то жести. но все хорошо закончилось).
07.02.202517:32
#prog #rustlib #article

parser combinators with nom 8 are here!

(восьмая мажорная версия — это прям дофига для Rust-библиотек)

Geoffroy Couprie рассказывает о новой архитектуре nom. В этой версии он позаимствовал из chumsky подход к архитектуре парсеров. Про этот подход ещё в 2022 году писал Niko Matsakis в статье Many modes: a GAT pattern, которая демонстрировала, как GAT могут пригодиться в реальных библиотеках, и таким образом обосновывала необходимость иметь GAT в языке.

В nom 8 парсером является то, что реализует трейт Parser. Вот как выглядит его определение за вычетом методов с реализацией по умолчанию:

trait Parser


Параметр OM реализует трейт OutputMode, реализации которого являются фактически type-level конфигом парсера:

trait OutputMode {


Трейт Mode является ключом к новым возможностям. Реализации этого трейта позволяют абстрагироваться над "выходом парсера, имеющего отношение к T":

trait Mode {


Для чего всё это нужно? Дело в том, что в nom есть комбинаторы, которые используют переданный аргументом парсер, но при этом не используют то, что этот парсер выдаёт в качестве результата. В качестве примера таких комбинаторов можно назвать preceded и delimited. Если конструирование значения является дорогим (скажем, это условный separated_list0, который собирает результаты разбора под-парсеров в вектор), то запускать парсер только ради того, чтобы отбросить его значение, будет довольно расточительно.

В самом nom определены два типа, которые реализовывают Mode: Emit и Check. Emit реализовывает Mode с type Output = T, то есть парсер работает, как обычно. Check же реализовывает Mode с type Output = (), то есть парсер работает, но отбрасывает результаты. Именно такое поведение годится для комбинаторов, которым не нужен результат под-парсера. Так как конечный парсер имеет методы, обобщённые по параметру OM, реализующему OutputMode, парсер не может сконструировать результат напрямую, а вынужден использовать для этого методы Mode, определённые на OM::Output. В случае Emit эти методы просто применяют переданные функции к аргументам, а для Check эти методы просто дропают переданные функции и возвращают ().

Так как ошибка парсера тоже может дорого конструироваться, тип OutputMode::Error по аналогичным причинам также реализует Mode. Это нужно, например, для opt, который делает парсер опциональным и по понятным причинам отбрасывает и разобранный результат, и ошибку.

Как вы могли заметить, у OutputMode также есть параметр Incomplete, реализующий трейт IsStreaming. Он отвечает за то, является ли недостаточный вход фатальной ошибкой или же одним из вариантов ошибки, от которой можно восстановиться. Раньше почти каждый базовый комбинатор nom существовал в двух версиях: streaming и complete. Это было нежелательно по нескольким причинам, главная из которых — разные сорта парсеров очень легко перепутать при написании своих парсеров и потом долго ловить непонятные ошибки. Ещё одним нежелательным следствием этого подхода стало, очевидно, дублирование кода. Разные версии этих парсеров по разному обрабатывали неполный вход, но за вычетом этого аспекта логика там была одинаковая.

Новый подход позволяет написать ветвление по OM::IsIstreaming::is_streaming() и обработать оба варианта в одной функции, естественным образом собирая разные варианты реагирования на ошибку неполного входа в одном месте. Так как в nom оба типа, реализующих IsStreamingStreaming и Complete — в соответствующих методах просто возвращают true и false соответственно, компилятор может увидеть ветвление по константному значению и просто убрать одну из веток, избежав генерации ненужного кода.
Кого-то всё-таки достало
03.02.202516:08
Шаман и Мизулина поцеловались. Теперь официально можно сказать, что они могут трансформироваться в сушество по имени Шизулина.

#mems
से पुनः पोस्ट किया:
Технологический Болт Генона avatar
Технологический Болт Генона
02.02.202506:13
Я тут подумал, что если у вас, дорогие подписчики и не только, есть какой-то проект (+/- релевантный с тематикой канала: железо, код, журналы, инфраструктура, игры и т.д. и т.п.), то пишите мне в личку @rusdacent, я буду рассказывать о них. Мне оно не сложно, а вдруг кому-то полезно и интересно будет.

Днём проектов объявляю четверг!

Так что если чего будет публиковать, то по четвергам буду выкладывать посты о вас и ваших проектах ❤️

Давно хотел такое заанонсить, но чего-то всё забывал, а тут и момент подходящий.
01.02.202503:30
Зачем вообще в русском языке "жениться" и "выйти замуж"? Они означают по факту одно и то же, но при этом:

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

Мне каждый раз при выражении идеи "заключить брак" приходится останавливаться, чтобы сообразить, какую форму использовать и как сформулировать предложение.

Для сравнения, в английском языке есть глагол "marry", и он абсолютно симметричен при употреблении к обоим партнёрам.
#meme про... Тьюринга

Src
07.02.202516:21
#suckassstory

(link)
I no longer have any faith left in the kernel development process or community management approach.

Apple/ARM platform development will continue downstream. If I feel like sending some patches upstream in the future myself for whatever subtree I may, or I may not. Anyone who feels like fighting the upstreaming fight themselves is welcome to do so.


Гектор Мартин (Hector Martin), ведущий разработчик Asahi Linux, снял с себя полномочия мейнтейнера поддержки железа ARM и Apple
से पुनः पोस्ट किया:
Install Wizard avatar
Install Wizard
В калькуляторе Windows 11 есть построение графиков а-ля Desmos.

Я даже не могу затянуть старую песню про bloatware, это неиронично круто.
#prog #meme про FP vs OOP
से पुनः पोस्ट किया:
На хую vercheniye 🇮🇱🇺🇦 avatar
На хую vercheniye 🇮🇱🇺🇦
✍️ кек #vercheniye_advice
31.01.202523:03
В СМЫСЛЕ УЖЕ ФЕВРАЛЬ
A perfectly reasonable development workflow

(часть треда с патчами в drm_sched от Asahi Lina (которые по итогу не приняли))
Bait and switch
से पुनः पोस्ट किया:
Пчелохранилище avatar
Пчелохранилище
01.02.202513:48
Ах да, #abnormalprogramming
#kbd
दिखाया गया 1 - 2 का 2
अधिक कार्यक्षमता अनलॉक करने के लिए लॉगिन करें।