В этой серии статей я расскажу о внутреннем устройстве Android — о процессе загрузки, о содержимом файловой системы, о Binder и Android Runtime, о том, из чего состоят, как устанавливаются, запускаются, работают и взаимодействуют между собой приложения, об Android Framework, и о том, как в Android обеспечивается безопасность.
Домосед
Разработка интерфейсных классов на С++
Интерфейсные классы весьма широко используются в программах на C++. Но, к сожалению, при реализации решений на основе интерфейсных классов часто допускаются ошибки. В статье описано, как правильно проектировать интерфейсные классы, рассмотрено несколько вариантов. Подробно описано использование интеллектуальных указателей. Приведен пример реализации класса исключения и шаблона класса коллекции на основе интерфейсных классов.
Разработка классов-дескрипторов на C++/CLI
В C++/CLI достаточно часто используются так называемые классы-дескрипторы — управляемые классы, имеющие указатель на родной класс в качестве члена. В статье рассматривается удобная и компактная схема управления временем жизни соответствующего родного объекта, основанная на использовании управляемых шаблонов. Рассмотрены сложные случаи финализации.
Подслушиваем чат телеграма с помощью своего клиента
Захотелось как-то мне, чтобы сообщения одного из чатов телеграма сохранялись у меня на диске (не запуская обычного клиента). Не буду раскрывать своих побудительных мотивов, но возможность эта показалась мне нужной и полезной.
Для этого в телеграме есть боты. На Хабре есть несколько статей, посвященных ботам, например: "Чат-помощник на сайт".
Бот позволяет читать и посылать сообщения, для регистрации бота не нужен телефон и количество ботов может быть любым. Но название бота включает в себя слово "bot", что может вызвать у хозяина чата ненужные вопросы.
Но, как говорится, правильно поставленный вопрос — половина ответа.
Как я диплом в LaTeX писал с GitHub, Docker и TravisCI
Еще со времен обучения в университете я использовал LaTeX для оформления лабораторных и курсовых работ. Познакомился впервые с LaTeX на Coursera, на курсе "Документы и презентации в LaTeX".
В этой заметке я расскажу, как я писал диплом с помощью LaTeX и почему я использовал GitHub, Docker и TravisCI.
Модернизация IDA Pro. Учимся писать загрузчики на Python
Привет всем,
цикл статей по написанию разных полезных штук для IDA Pro продолжается. В прошлый раз мы исправляли процессорный модуль, а сегодня речь пойдёт о написании модуля-загрузчика (лоадера) для одной винтажной операционной системы, а именно — для AmigaOS. Писать будем на Python. Также я постараюсь раскрыть некоторые тонкости при работе с релоками (они же relocations
), которые встречаются во многих исполняемых файлах (PE
, ELF
, MS-DOS
и т.п.).
Модернизация IDA Pro. Исправляем косяки процессорных модулей
Привет всем,
Спустя довольно-таки продолжительное время с момента написания первой статьи я всё-таки решил, пусть и по чуть-чуть, но писать статьи на тему модификации/улучшения IDA Pro.
В этой статье пойдёт речь о том, как правильно исправлять косяки в тех процессорных модулях, исходников которых у вас нет, а косяки прям-таки жить не дают. К сожалению, не все указанные ниже проблемы можно отнести к косякам, поэтому разработчики вряд ли станут их реализовывать.
Git happens! 6 типичных ошибок Git и как их исправить

Прим. перев.: На днях в блоге для инженеров любимого нами проекта GitLab появилась небольшая, но весьма полезная заметка с инструкциями, которые помогают сохранить время и нервы в случае различных проблем, случающихся по мере работы с Git. Вряд ли они будут новы для опытных пользователей, но обязательно найдутся и те, кому они пригодятся. А в конец этого материала мы добавили небольшой бонус от себя. Хорошей всем пятницы!
Все мы делаем ошибки, особенно при работе с такими сложными системами, как Git. Но помните: Git happens!
Интересности и полезности python. Часть 3
В комментариях упоминалась возможность умножения коллекций на скаляр:
a = [0] * 3
s = 'a' * 2
print(a, s) # -> [0, 0, 0], 'aa'
Более-менее опытный разработчик на языке python знает, что в нём отсутствует механизм копирования при записи
a = [0]
b = a
b[0] = 1
print(a, b) # -> [1], [1]
Что же тогда выведет следующий код?
b = a * 2
b[0] = 2
print(a, b)
Склейка двух apk-файлов в один

Решил я как-то сделать склейку двух apk файлов, но информации о том, как это сделать на просторах интернета не особо то много. Тогда вооружившись трояном Ahmyth для android (его исходниками), началось путешествие в мир склейки apk своими руками. Коротко об этом далее…
Рецепт полезного код-ревью от разработчика из Яндекса
Привет. Меня зовут Сергей, последние пять лет я работаю в Яндексе. За это время участвовал в разработке одиннадцати проектов. Писал код на JavaScript, Python и C++. Некоторые проекты делал в одиночку, другие разрабатывал в группе из восьми человек. Но в каждой команде, на всех проектах, вне зависимости от языка программирования я использовал код-ревью.
С помощью код-ревью я постоянно узнаю что-то новое. Иногда, глядя на чужой код, хочется воскликнуть: "А что, так тоже можно?". В чужом коде я нахожу интересные приёмы и беру их себе на вооружение. Много новых знаний черпаю из комментариев к моему коду. Для меня стало открытием, что люди любят делиться своим опытом. Даже когда я разрабатываю проект в одиночку, то прошу ребят из другой команды посмотреть мои пулреквесты. Это мотивирует писать красивый и понятный код.
Но так было не всегда. Когда-то ревью было для меня наказанием. Я мог неделю с вдохновением писать код, вкладывая в него все силы. Отправлял пулреквест, трижды пинговал ревьювера, а в ответ получал сухое "вроде ок" или, что ещё хуже, десятки комментариев не по существу.
Мне на ревью приходили пулы из пяти тысяч строк. Я часами пытался разобраться в коде, по сотне раз скроллил от функции к тесту и обратно. Писал десятки бесполезных комментариев о пропущенной точке с запятой. Всё это жутко меня раздражало. Часто откладывал ревью на потом, и у меня накапливались десятки непросмотренных пулов.
Если вы чувствовали это на себе, значит, статья для вас. Сегодня я расскажу о приёмах и инструментах, которые использую каждый день на протяжении пяти лет ежедневного код-ревью.
Интересности и полезности python. Часть 2
В одном из комментариев рассматривался следующий код:
SEX = 'Female', 'Male'
sex = SEX[True] # -> Male
sex = SEX[False] # -> Female
Интересности и полезности python
Продвинутое использование Гита или как выйти на пенсию на полгода раньше?
Не знаю, на каком языке программирования вы пишете, но уверен, что используете Гит при разработке. Инструментов для сопровождения разработки становится всё больше, но даже самый маленький тестовый проект, я неизменно начинаю с команды git init
. А в течение рабочего дня набираю в среднем ещё 80 команд, обращаясь к этой системе контроля версий.
Я потратил кучу нервов, когда стал переучиваться на десятипальцевый метод печати. В итоге это стало самым правильным решением по улучшению личного рабочего процесса. В числе следующих по важности оптимизаций стоит углубленное освоение Гита.
На Хабр написано много статей о Гите, но они не уходят дальше официальной документации, а упрощать работу авторы предлагают самописными костылями. Я уверен, что изучать Гит нужно на конкретных примерах задач, а повышать эффективность работы с ним – стандартизированными средствами.
Кому будет полезна эта статья?
Вы уже освоили джентльменский набор Гита и готовы двигаться дальше? Существует 2 пути:
- Освоить сокращённые команды – алиасы. Они почти всегда составлены мнемонически и легко запоминаются. Забыть оригиналы команд проблематично, я легко их набираю, когда это требуется. Плюс не сбиваюсь с мысли, проверяя что-то в Гите в процессе написания кода.
- Узнать о дополнительных флагах к командам, а также их объединении между собой. Я понимаю, что кто-то ненавидит сокращения. Для вас тоже есть интересный материал в статье – как повысить полезность и удобство вывода команд, а также как решать не самые тривиальные, но часто встречающиеся на практике задачи.
Посвятите описанным в статье экспериментам пару часов сегодня, и сэкономьте по приблизительным расчётам полгода рабочей жизни.
Добро пожаловать под кат!
История одного вскрытия: как мы ревёрсили Hancitor

Для тех, кто уже наигрался с задачками crackme, мы подвезли свежего троянца. В дикой природе загрузчик Hancitor еще встречается в своей естественной среде обитания — спам-рассылках. В настоящее время он активно используется для прогрузки банковского трояна Panda, который является модификацией небезызвестного Zeus.
В один холодный летний вечер мы встретились с ним лицом к лицу, просматривая почтовый спам. Если любите смотреть, что там у вредоносов «под капотом», почитайте наш новый реверс-разбор.
Взлом ядерного Crackme

Привет, Хабралюди!
Сам процесс решения задачек на взломы особенно приятен, а когда есть решение – приятно вдвойне. Сегодня мы решили разобрать крякми, который попался нам на конференции ZeroNights в ноябре, где наша команда из школы кибербеза и ИТ HackerU дебютировала и сразу
Для крякми этого уровня достаточно знать ассемблер и иметь базовое представление об устройстве драйверов под Windows.
Спустя 6 лет вышла новая версия легендарного аварийного дистрибутива Hiren's BootCD

Сегодня праздник у железячников, ремонтников, сисадминов и эникейщиков!
После долгого забвения был возобновлен выпуск легендарного загрузочного диска Hiren's BootCD.
Hiren's BootCD (также известный как HBCD) представляет собой загрузочный образ с программным обеспечением для записи на CD\DVD\USB-flash, содержащий ряд диагностических утилит, таких как тесты производительности системы, программы для форматирования и разметки, средства клонирования и создания образов диска, инструменты для восстановления данных, инструменты для работы с MBR, инструменты прошивки и модификации BIOS и других средств для исправления различных компьютерных проблем.
На этот раз дистрибутив базируется на 64-разрядной Windows PE 10.0 и содержит только легальные для свободного распространения программы, при условии, что вы будете использовать HBCD исключительно в целях диагностики и устранения компьютерных неисправностей, а не в качестве основного ПО для компьютера.
Выпуском новых официальных версий занимается группа особо преданных фанатов дистрибутива, которым был передан доступ к официальному сайту (старая версия сайта до анонса новых версий), в то время как оригинальный автор давно отошел от дел.
25 занимательных Android библиотек. Весна 2018

Особенности вызова функций в С++
Не так давно у меня произошёл очередной разговор с коллегой на извечную тему: "по ссылке, или по значению". В результате возникла данная статья. В ней я хочу изложить результаты моего исследования по этой и смежным темам. Далее будут рассмотрены:
- Регистры и их назначение при вызове функций.
- Передача и возврат простых типов и структур.
- Как передача по ссылке и по значению влияют на оптимизации тела функции компилятором.
- Как используется место при многочисленных вызовах функций.
- Механизм виртуальных вызовов.
- Оптимизация хвостовых вызовов и рекурсии.
- Инициализация структур, массивов и векторов.
Осторожно! Статья содержит большое количество кода на C++ и ассемблере (Intel ASM с комментариями), а также множество таблиц с оценками производительности. Всё написанное актуально для x86-64 System V ABI, который используется во всех современных Unix операционных системах, к примеру, в Linux и macOS.
Пишем модуль ядра Linux: I2C
Данная статья посвящена разработке I2C (Inter-Integrated Circuit) модуля ядра Linux. Далее описан процесс реализация базовой структуры I2C драйвера, в которую можно легко добавить реализацию необходимого функционала.
Опишем входные данные: I2C блок для нового процессора «зашитый» на ПЛИС, запущенный Linux версии 3.18.19 и периферийные устройства (EEPROM AT24C64 и BME280).
Принцип работы I2C достаточно прост, но если нужно освежить знания, то можно почитать тут.

Рисунок 1. Временная диаграмма сигналов шины I2C
Information
- Rating
- 7,844-th
- Location
- Москва и Московская обл., Россия
- Registered
- Activity