Обновить
0

Пользователь

Отправить сообщение

Загрузчик был для x86-64, поэтому я его не эмулировал а запускал на хосте (кстати да, это идея - возможно под qemu где я запускал полный образ не хватает каких-то инструкций, а код загрузчика проверяет их наличие и ведёт себя по разному - надо будет проверить).

А запускал я его код следующим образом:

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

  2. Конвертируем бинарные секции в ELF с помощью objcopy -I binary -O elf64-x86-64 -B i386 code.bin code.o и objcopy -I binary -O elf64-x86-64 -B i386 data.bin data.o

  3. Пишем Linker Script в котором указываем адреса загрузки секций и адреса интересующих нас функций (можно использовать только чистые функции - даже банальный printf() в коде бинарника может всё сломать и засегфолтить)

  4. Пишем программу на C, в которой определяем прототипы функций из бинарника (как extern) и вызываем интересующие функции.

  5. Собираем всё это добро используя Linker Script.

Примерно так это выглядит: https://github.com/S-trace/link_binary_code_to_elf

В принципе можно обойтись банальным mmapом секций бинарника по нужным адресам (с PROT_READ|PROT_EXEC для секции кода) и кастом size_t адреса функции к указателю на функцию и затем вызовом этой функции по полученному указателю, но это уж очень уродливо в коде смотрится.

Eсли загрузчик для "чужой" (не совпадающей с архитектурой хоста) архитектуры - можно в qemu сэмулировать соответствующую машину с Linux и проделать всё это в qemu.

уверены, что код один и тот же?

Уверен, я использовал для тестирования распаковки под Linux бинарь загрузчика и вызывал функцию распаковки прямо из него (благо, там не было всяких printf и прочего взаимодействия с ОС - чистая математика и работа с памятью).

Тут меня скорее удивила не сама проблема с XZ (к ней я был более-менее готов), а то, что один и тот же код, выполняющийся в контексте загрузчика выдаёт ошибку при распаковке образа, а выполняющийся в контексте приложения userspace - успешно распаковывает тот же поток (при этом функция распаковки принимает указатель и длину сжатых данных и указатель на буфер и длину распакованных данных).

Но идея с размером FFFFFFFF интересна, проверю - возможно, проблема и у меня в этом (паковал через xz < data > data.xz).

Повезло, что не пришлось шаманить с параметрами LZMA при упаковке SquashFS - порой бывают всякие приколы с этим - например, приходится подбирать параметры -lc, -lp, -pb и прочие подобные им.

Недавно ковырял одну штуку - там тоже использовалось сжатие XZ в образе, но как я ни извращался с параметрами xz - загрузчик никак не хотел распаковывать образ в процессе загрузки, при этом (ЧСХ) если дёрнуть функцию распаковки из своей программы, подммапив бинарь загрузчика в неё - на компе распаковка того же образа проходила без ошибок. Благо, в загрузчике была поддержка не только XZ, но и LZMA - и вот образ собранный с LZMA взлетел с первой попытки.

Shift+правый клик обычно работает как надо на таких сайтах и открывает контекстное меню как и должен. По крайней мере в Firefox.

Забавно, но под Linux зачастую именно выделение мышкой такие сайты не трогают (не могут?) - достаточно выделить, переключиться в редактор и нажать колёсико мыши - текст вставляется без всяких левых приписок.

А вот если выделить, нажать ^C, перейти в редактор и нажать ^V - приписки появляются.

Другое дело что такие пакеты микротик может как-то по особому отрабатывать, например тупо до всех пользовательских правил.

Похоже на то.

Добавил для теста у себя на микроте правила:

```

/ip firewall filter add action=drop chain=input

/ip firewall filter add action=drop chain=input dst-port=20651 protocol=udp

/ip firewall filter add action=drop chain=input src-address=255.255.255.255

/ip firewall filter add action=drop chain=input src-mac-address=04:92:DO:OD:BE:EF

```

WinBox по IP с этими правилами не подключается (очевидно, рубится на первом же правиле), а по MAC - подключается и работает невзирая на блокировку порта, IP адреса источника и MAC-адреса компа.

WinBox тоже не мое, у меня в win тока Steam стоит.

Под Wine WinBox прекрасно работает, вот вообще без проблем. Главное чтобы на компе на интерфейсе в сторону микротика был IP адрес (любой), иначе WinBox не будет находить устройства по MAC адресу.

Что закрытый firewall это не проблема это прям так странно и неожиданно

Не удивительно на самом деле, firewall же закрывает доступ по IP.

Запутываюсь с порядком pool / address и удалением дефолтовой 192.168.88.0, снова теряю сетевой доступ, снова cбрасываю конфиг.

Можно было не сбрасывать - при работе с микротиком напрямую (находясь в его сегменте L2) можно работать с ним по MAC адресу через WinBox или mactelnet (и потеря IP, отсутствие IP на интерфейсе или закрытый firewall не являются в данном случае хоть сколько-нибудь заметной проблемой). В этом случае потерять доступ можно только накосячив со свитчем (но тут Safe Mode в помощь - если соединение было разорвано без выключения Safe Mode - роутер перезагрузится через 15 минут со старым рабочим конфигом).

Надо не любой смартфон, а тот, на котором можно залить свои ключи в bootloader и залочить его обратно, иначе через два дня в девайс будет прошит НОРМАЛЬНЫЙ кастом без всякого bullshit)

А есть уже пылесосы с распознаванием "сюрпризов"? Пару лет назад искал - ни одного тогда не было.

Вопрос на самом деле очень серьёзный для владельцев животных.

Не владелец собаки, но владелец Roborock S6 (он не с камерой а с лидаром).

Если играть с ним не поднимая от пола (немного подталкивать в сторону или отталкивать назад) - пылесос откатывается чуть назад (как от препятствия), затем корректирует траекторию и продолжает движение по программе.

При этом он ещё и временно запоминает препятствие и продолжает объезжать его в дальнейшем в ходе текущей уборки, даже если препятствия уже нет (например, стукнулся о ногу - запомнит где она была, и будет кататься вокруг этого места даже если я уже отошёл с него).

Если поднять и опустить (оторвать колёса от пола) - сначала позиционируется (немного крутится на месте), после определения своего нового положения продолжает работать по программе.

Правда, носить его во время уборки между комнатами и очень далеко толкать я не пробовал)

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

выручка Whoosh за 9 месяцев 2022 года составила 6,29 млрд рублей, что на 70% аналогичного периода прошлого года

Я случайно 70%.

А я держал пару лет планшетник (служил USB-модемом) и он вздулся, да так что чуть дисплей не сломался (его выдавило милиметра на 2 из корпуса, но каким-то чудом он уцелел). После этого поменял батарею и пропатчил ядро для управления напряжением зарядки (в режиме модема заряжается до 3.9V - это 57%, и так стоит, а если собираюсь его брать в дорогу - перезагружаю, подключаю к обычной зарядке и он заряжается до 4.4V (100%)). Пока не вздулся.

Я бы не стал держать смартфон на зарядке сутками - АКБ вздуется. А если держать - то занизить напряжение зарядки АКБ где-то до 3.9V (будет где-то 60% заряда, но риск вздутия куда меньше). Дл этого можно использовать какое-нибудь приложение для управления зарядкой или (что лучше) пропатчить dtb или ядро и прошить.

Модель X757 интересна. Но куча вопросов на которые пока нет ответов:

Сколько слотов под оперативку? Сколько из них занято с завода? Какие тайминги у заводской памяти? Можно ли докинуть памяти самому не лишившись гарантии?

Есть ли зарядка через Type-C PD? Хватает ли мощности заводской зарядки всегда? Не разряжается ли ноут во время игры?

DisplayPort через Type-C - какая версия DisplayPort? А версия HDMI? Поддерживаются ли FreeSync/G-Sync по DisplayPort? А по HDMI? А на встроенном дисплее? Можно ли питать ноут от монитора?

Можно ли изменить цвет подсветки клавиатуры?

Linux - какой дистрибутив идёт с завода? Используются ли какие-то проприетарные драйвера в ядре или юзерспейсе? Насколько реально сменить дистрибутив сохранив всю функциональность? Отключается ли питание дискретного GPU когда он не активен? Или только руками его отрубать (с релогином)?

У меня есть парочка ламп Старт (Start ECO LEDGL SE27 15W 30 04.2021) (им 1.5 года) у которых износился корпус.

А именно - растрескался пластик между корпусом и плафоном (настолько, что у сгоревшей отваливались куски корпуса от лёгкого прикосновения, а плафон без усилия оторвался руками после выкручивания).

Одна из этих ламп сгорела недавно (что именно сгорело - ещё не ковырял), чем и обратила на себя внимание.

Вторую (ещё живую) осторожно переставил в закрытый плафон, во избежание поражения током, хотя она и так в люстре стояла и не была угрозой. Пластик старался не трогать.

а есть мысли, как можно усложнить жизнь против динамического анализа?

Есть немножко. Но не против всех атак.

Или просто заменить все вызовы удаления файлов на nop - первый же запуск приложения и временная директория с расшифрованной моделью останется.

Если защищаемся от ламеров - вот тут можно добавить что-то типа изменения размера файла (truncate) на 0 сразу после инициализации модели - в этом случае атакующий получит кучку пустых файлов.

Как противодействовать другим методам анализа - хз, так как они проводятся вне скоупа приложения, и требуют поддержки от MLModel в плане загрузки предварительно зашифрованной модели.

Использование временной директории + вызов MLModel.init явно является тупиковым путём тут, так как позволяет перехватить расшифрованные данные при любом сценарии работы.

Единственным возможным путём полной защиты модели в данном случае я вижу предварительную генерацию ключевой пары в TZ (приватный ключ никогда не покидает TZ), пересылку публичного ключа на сервер, после чего сервер шифрует модель полученным публичным ключом и отсылает обратно, затем происходит скармливание зашифрованных данных модели в TZ с объяснением какие именно данные (ID ключа) надо расшифровать, и TZ расшифрует модель и сохранит её внутри защищённой памяти, после чего MLModel должен будет как-то аутентифицироваться в TZ и затем авторизоваться в TZ что он может получить доступ к конкретной модели, после чего TZ отдаст ему модель (и вот тут как раз таки её можно будет поймать, так что MLModel должно будет работать в TZ полностью, но это увеличивает поверхность атаки на саму TZ).

TZ - TrustZone, или как там оно называется в iOS (не трогал её - не знаю терминов).

Далее нам нужно зашифровать наш файл. Для этого можно использовать популярный sha256 либо любой другой алгоритм.

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

Может всё-таки лучше для шифрования выбрать что-то вроде AES256?

Информация

В рейтинге
4 243-й
Зарегистрирован
Активность