Представьте ситуацию: вы решили добавить функционал в некоторую сущность (класс, структуру, ...). Для этого вам понадобилось хранить внутри сущности дополнительные данные. Вы добавляете приватные поля, меняете и читаете их внутри методов, интерфейс методов не изменяется, и всё выглядит хорошо. И не просто выглядит, а компилируется, запускается и проходит тесты. Красота... А потом, в один прекрасный день, прод падает. И может быть даже, теряет часть важных данных. Вы с коллегами начинаете искать причину поломки. И оказывается, что та сущность, которую вы дополняли год назад, делится между несколькими потоками, а поля добавленные вами не потокобезопасны и поэтому гонка за доступ к ним в какой-то момент вызывает их повреждение. Неприятно, согласитесь? Хотелось бы иметь инструмент, позволяющий избегать подобных ситуаций. И язык программирования Rust такой инструмент предоставляет.
User
Пишем дизассемблер виртуальной машины из игры Clock Tower (PS1/PC) для IDA Pro
Всем привет. Тут такое дело: ещё одна моя реверсерская мечта сбылась - я написал процессорный модуль для IDA Pro с нуля, за два дня! Если вы когда-то тоже хотели написать свой модуль, но боялись начать - думаю, моя статья сможет помочь.
В качестве кода, который требуется дизасемблировать, будет выступать код виртуальной машины из очень крутого хоррора, который выходил сначала на SNES, потом на PS1, PC и Wonderswan - "Clock Tower - The First Fear". В игре имеется 9 концовок (sic!), атмосфера гнетущая, а в качестве главного злодея выступает "Scissorman" (человек с руками-ножницами). Заинтересовал? Тогда добро пожаловать...
Цивилизация Пружин, 1/5
Лет в шесть мне попался в руки дедовский справочник[50] по грузовым автомобилям середины 20-го века. Добротный, напечатанный на гладкой плотной бумаге раритет. Единственное, что вообще осталось на память от деда после распада страны, войн и переездов.
В справочнике содержалось множество интересных ТТХ, так что слово «грузоподъёмность» стало мне знакомо с раннего детства. И когда отец на прогулке упомянул, что любой грузовик весит столько же, сколько увозит сам, я это запомнил. Запомнил и, много позже, заинтересовался.
Отец был прав. Для грузовиков 60-х годов это правило выполняется с довольно удивительной точностью:
Вертолеты на Марсе жужжат и не отбрасывают тень
Добро пожаловать в наше уютное конспирологическое логово. Сегодня мы будем рассматривать тени на фотографиях с Марса, округлять числа и писать отвратительный код.
В этом выпуске: астрономические наблюдения теней в пустыне, аугментация ушей, заглядывание за левый край видео, гадание по фотографиям и особенности работы GSCMOS матриц семилетней давности.
Continuous Integration для Intel FPGA (Altera)
Собирая как-то в очередной раз разные ревизии для одного и того же проекта вручную, у нас возникла навязчивая мысль: а можно ли собирать это все автоматически по нажатию одной кнопки? Забегая вперед, сообщим, что мы решили эту проблему, причем мы упростили сборку проекта не только на локальном компьютере, но и запустили удаленную сборку на GitLab CI.
Если вы тоже задавались подобным вопросом, то вполне возможно, что наш опыт и полученное решение вам пригодятся, поэтому приглашаем к дальнейшему прочтению.
Обзор методов численной оптимизации. Безусловная оптимизация: метод линий
Я работаю в американской компании, разрабатывающей софт для химической и нефтегазовой промышленности. Одной из наиболее востребованных тем в этой области является оптимизация чего-либо при заданных параметрах производства. Например, минимизация расходов на выработку какого-нибудь газа, максимизация прибыли при реализации топлива, максимизация давления в какой-нибудь трубе при вариабельных термодинамических параметрах на другой части проектируемого завода и заданных ограничениях и т.д. Я занимался реализацией методов оптимизации для подобных задач и, думаю, накопил ощутимый опыт в этой области. С этого поста хотел бы начать серию обзоров известных методов оптимизации.
Введение
Оптимизация — это процесс нахождения точки экстремального значения некоторой заданной целевой функции . Это один из крупнейших краеугольных камней прикладной математики, физики, инженерии, экономики, промышленности. Область её применений необъятна и может распространяться от минимизации физических величин на микро- и макроуровнях до максимизации прибыли или эффективности логистических цепочек. Машинное обучение также заострено на оптимизации: всевозможные регрессии и нейроные сети пытаются минимизировать ошибку между предсказанием и реальными данными.
Экстремум может быть как минимумом, так и максимумом, но обычно принято изучать любую оптимизацию исключительно как поиск минимума, поскольку любая максимизация эквивалентна минимизации из-за возможности поменять знак перед целевой функцией: . Следовательно, в любом месте ниже под оптимизацией мы будем понимать именно минимизацию.
MS Office переносит слова на новую строку по буквам
Я перепробовал все известные мне методы, но мой внутренний перфекционист продолжал рыдать — документ большой с кучей таблиц — и такая проблема в каждой ячейке.
Устройство поисковых систем: базовый поиск и инвертированный индекс
Под капотом почти каждой поисковой строки бьется одно и то же пламенное сердце — инвертированный индекс. Именно инвертированный индекс принимает текстовые запросы и возвращает пользователю список документов, а пользователь смотрит на всё это дело и радуется котиками, ответам с StackOverflow и страничкам на вики.
В статье описано устройство поиска, инвертированного индекса и его оптимизаций с отсылками к теории. В качестве подопытного кролика взят Tantivy — реализация архитектуры Lucene на Rust. Статья получилась концентрированной, математикосодержащей и несовместимой с расслабленным чтением хабра за чашкой кофе, осторожно!
Самодельный спектрометр с высоким разрешением
Хорошее разрешение достижимо
В интернете много публикаций о том, как используя DVD-R диск и смартфон можно собрать спектрометр, однако характеристики таких устройств не позволяют проводить точные измерения. Мне же удалось сделать прибор с разрешением 0,3 нм.
Серебряная пуля для кремлевского демона
Вот, наконец, в теме помех навигации мы и добрались до самого крутого и интересного. Причем, это интересное оказалось не таким уж сложным технически.
Как удалить «неудаляемые» приложения со смартфона
Чтобы увеличить привлекательность смартфонов, производители ставят на них как можно больше разных программ. Это понятно. Просто берём и удаляем ненужное… Стоп.
Оказывается, некоторые программы невозможно удалить. Например, на отдельных моделях Samsung невозможно удалить Facebook (есть только опция 'disable'). Говорят, на Samsung S9 вдобавок предустановлены «неудаляемые» приложения Microsoft.
Эти смартфоны приведены для примера. Такая же проблема и на других моделях. На многих есть неудаляемые программы от самого производителя.
Всё это надо зачистить.
Работа с AIDL в Android
Совсем недавно у меня появилась необходимость разработать функционал для взаимодействия между двумя приложениями одной компании, и недолго гуглив я открыл для себя мир межпроцессного взаимодействия в андройд - AIDL.
В этой статье я расскажу о трудностях с которыми пришлось столкнуться и об их решении. А ещё поделюсь полезными кусочками кода, которые помогут вам сохранить пару часов кодинга.
Анатомия GNU/Linux
Какое-то время назад на Хабре была небольшая волна постов на тему «Почему я [не] выбрал Linux». Как порядочный фанатик я стриггерился, однако решил, что продуктивнее что-нибудь рассказать о своей любимой системе, чем ломать копии в комментариях.
У меня сложилось впечатление, что многие пользователи GNU/Linux слабо представляют, из чего сделана эта операционная система, поэтому утверждают, что она сляпана из попавшихся под руку кусков. В то же время, архитектура большинства дистрибутивов является устоявшейся и регламентируется рядом стандартов, включая стандарт графического окружения freedesktop.org и Linux Standard Base, расширяющий стандарты Unix. Мне при знакомстве с GNU/Linux несколько лет назад для погружения не хватало простой анатомической карты типичного дистрибутива, поэтому я попробую рассказать об этом сам.
Можно ли сложить N чисел типа double наиболее точно?
В предыдущих сериях…
Прошлая статья рассказала о двух способах сложения двух двоичных чисел с плавающей запятой без потери точности. Чтобы добиться этого, мы представили сумму c=a+b в виде двух чисел (s,t)=a+b, причём таких, что s — наиболее близкое к a+b точно-представимое число, а t=(a+b)-s — это отсекаемая в результате округления часть, составляющая точную погрешность. У читателей был вопрос: а можно ли достаточно точно сложить массив чисел типа double? Оказывается, можно! Но только, вероятно, не всегда и не абсолютно… и не алгоритмом Кэхэна, который тогда вспоминали в комментариях. За подробностями прошу под кат, где мы и найдём приложение тому, о чём я рассказал в прошлый раз.
Создание прокси-dll для проверок эксплуатации dll hijack
Если описать атаку коротко, то DLL hijack — это создание ситуации, в которой некоторый исполняемый файл пытается загрузить dll, но атакующий вмешивается в этот процесс, и вместо ожидаемой библиотеки происходит работа со специально подготовленной dll с полезной нагрузкой от атакующего. В результате код из dll будет исполнен с правами запускаемого приложения, поэтому в качестве цели обычно выбираются приложения с более высокими правами.
Чтобы загрузка библиотеки прошла корректно, необходимо выполнить ряд условий: битность исполняемого файла и библиотеки должна совпадать и, если библиотека загружается при старте приложения, то dll должна экспортировать все те функции, которые это приложение ожидает импортировать. Часто одного импорта мало — очень желательно, чтобы приложение продолжило свою работу после загрузки dll. Для этого необходимо, чтобы у подготовленной библиотеки функции работали так же, как и у оригинальной. Реализовать это проще всего, просто передавая вызовы функций из одной библиотеки в другую. Вот именно такие dll называют прокси-dll.
Под катом будет несколько вариантов создания таких библиотек — как в виде кода, так и утилитами.
Виртуальная память в ARMv7
В статье обзорно описана система виртуальной памяти архитектуры ARMv7.
Создание нейросети по распознаванию лиц на фотографиях из Вконтакте
В этой статье будет рассказан опыт создания нейросети по распознаванию лиц, для сортировки всех фотографий из беседы ВК на поиск определённого человека. Без какого-либо опыта написания нейросетей и минимальными знаниями Python.
Ищем и скачиваем непопулярные и старые файлы в интернете
Введение
Бывает, случается так, что вы хотите скачать альбом 2007 года исполнителя, который кроме вас известен 3.5 людям, какой-нибудь испанский ска-панк или малопопулярный спидкор европейского происхождения. Находите BitTorrent-раздачу, ставите на закачку, быстро скачиваете 14.7%, и… все. Проходит день, неделя, месяц, а процент скачанного не увеличивается. Вы ищете этот альбом в поисковике, натыкаетесь на форумы, показывающие ссылки только после регистрации и 5 написанных сообщений, регистрируетесь, флудите в мертвых темах, вам открываются ссылки на файлообменники вроде rapidshare и megaupload, которые уже сто лет как умерли.Увы, частая ситуация в попытке хоть что-то скачать
Такое случается. В последнее время, к сожалению, случается чаще: правообладатели и правоохранительные органы всерьез взялись за файлообмен; в прошлом году закрылись или были закрыты KickassTorrents, BlackCat Games, what.cd, btdigg, torrentz.eu, EX.ua, fs.to, torrents.net.ua, и еще куча других сайтов. И если поиск свежих рипов фильмов, сериалов, музыки, мультиков все еще не представляет большой проблемы, несмотря на многократно участившееся удаления со стороны правообладателей контента из поисковых систем, торрент-трекеров и файлообменников, то поиск и скачивание оригинала (DVD или Blu-Ray) фильмов и сериалов или просто ТВ-рипов 7-летней давности на не-английском и не-русском языке — не такая уж простая задача.
Как представители разных профессий вас пробивают
Чтобы проводить расследования по открытым данным в интернете, совершенно не обязательно обладать сверхтехническими познаниями.
Раньше возможности таких расследований были доступны только крупным корпорациям. Сейчас малый бизнес и вообще любой человек с интернетом может воспользоваться благами открытых данных.
Компании используют открытые данные, чтобы принимать важные решения, получать конкурентные преимущества и обеспечивать безопасность. Открытую информацию дешевле собирать и исследовать, она доступна — нужен только интернет и компьютер, а большинство инструментов можно использовать бесплатно. Такие данные легко распространять: они открытые, у всех к ним сразу будет доступ. Кроме того, OSINT ускоряет поиск и позволяет проводить исследования в режиме реального времени.
В этом материале мы приводим несколько простых примеров, как можно использовать OSINT в работе. Возможно, что-то из описанного ниже вы уже активно применяете, а что-то покажется вам интересной идеей и подтолкнет к новым.
Введение в IDAPython
На русском языке (и на Хабре, в частности) не так много статей по работе с IDAPython, попытаемся восполнить этот пробел.
Для кого. Для тех, кто уже умеет работать в IDA Pro, но ни разу не писал скрипты на IDAPython. Если вы уже имеете опыт написания скриптов под IDAPython, то вряд ли найдёте здесь что-то новое.
Чего здесь не будет. Мы не будем учить программированию на Python и базовой работе в IDA Pro.
Information
- Rating
- 2,045-th
- Registered
- Activity