Print This Post Введение в Qt Quick 2 и QML

Среда, 20. Май 2015
Раздел: C/C++, HTML/JS, Windows, Для новичков, Софт, автор:

Решил тут ради интереса немного почитать про такую библиотеку, как Qt. Заинтересовала она меня именно в плане создания GUI, так как в C++ с этим достаточно туго, а Qt - одна из немногих кроссплатформенных библиотек, позволяющая удобно делать современные гибкие графические интерфейсы к программам. Раньше с ней совершенно никакого опыта работы я не имел, поэтому пару недель занимался неспешным чтением документации.

В какой-то из версий Qt (если не ошибаюсь, в 4.7) появилась возможность делать интерфейсы на декларативном языке QML 1.0 (и модуль QtDeclarative, определяющий всякие штуки для рисования интерфейсов), а в 5-й версии Qt появился QML 2.0 и QtQuick 2.0 (бывший QtDeclarative). Их я и стал изучать. В этой статье я расскажу об этих модулях в меру своих знаний, покажу пару несложных примеров их использования, а кто дочитает до конца статьи, получит еще один бонусный пример, который я написал, пока изучал библиотеку. :)

Читать дальше »

Print This Post Google Chrome и Secure Preferences

Суббота, 25. Апрель 2015
Раздел: C/C++, Perl, Windows, автор:

chrome_art

На нашем форуме и не только, с некоторой периодичностью люди интересуются алгоритмом генерации "защитного кода" в файле Secure Preferences для браузера Google Chrome.
Зачем он браузеру? Этот код используется для проверки целостности настроек расширений и некоторых других параметров, проще говоря - HMAC. Зачем он людям? Вероятно, это необходимый этап для тихой установки расширений или изменения настроек браузера. Давайте разберемся, где и как происходит генерация этих HMAC'ов.
Читать дальше »

Print This Post Меняем Integrity Level процесса из ядра

Четверг, 2. Октябрь 2014
Раздел: C/C++, Windows, автор:

dxcat

Опять случился большой перерыв между публикациями в блоге, но, благодаря настойчивости dx'a, который в данный момент занят улучшением его библиотеки для работы с PE-файлами и продажей новой версии обфускатора PHP, в блоге все-таки появится новый пост. На этот раз он будет посвящен реализации очередного тривиального драйвера, который будет получать уведомления о новых процессах, запускаемых в системе и понижать уровень целостности (integrity level) заданного процесса до низкого.

Читать дальше »

Print This Post Skype Preview — плагин предпросмотра ссылок в скайпе

Понедельник, 24. Март 2014
Раздел: C/C++, Windows, Софт, автор:

skype

Сидел я как-то в одном уютном чатике в Skype, и тут одному из участников в голову пришла весьма интересная идея: сделать плагин для скайпа, который позволял бы просматривать содержимое тех ссылок, которые вкидываются в чат, без их открытия. "А почему бы и нет?", - подумал я. Можно открывать картинки в уменьшенном варианте, если ссылка указывает на изображение (в том числе анимированные). А если ссылка ведет на обычную html-страничку, то можно отображать ее заголовок. Забегая вперед, покажу, что получилось:

plugin

Читать дальше »

Print This Post Статический деобфускатор .bat-файлов

Среда, 5. Февраль 2014
Раздел: C/C++, Windows, автор:

В последнее время неоднократно сталкивался с просьбами снятия примитивной обфускации с .bat-файлов. Обфускация строится на разбивании команд на отдельные символы, создании алиасов для них и последующей записи их с использованием алиасов. Возьмем следующий незамысловатый код:

После обфускации он будет выглядеть, например, следующим образом:

Для таких случаев набросал простенький деобфускатор на C++. Исходный код и скомпилированный бинарник прилагаю. Если будут проблемы с запуском - попробуйте не использовать Windows XP или скачать Visual C++ Redistributable Packages for Visual Studio 2013, возможно, поможет.

Скачать: batch-deobfuscator
Скачать исходный код: batch-deobfuscator-source
GitHub: bat-static-deobfuscator

Print This Post Пишем тривиальный стилер биткоинов

Суббота, 23. Ноябрь 2013
Раздел: Assembler, Windows, автор:

bitcoin
Давным-давно для WebMoney (и не только) был популярен крайне простой способ получить чужие финансы: подменить содержимое буфера обмена Windows, если в нём находится номер кошелька на свой номер. С введением множества степеней защит данный метод перестали использовать, да и эффективность была под вопросом, не говоря уже о необходимости заставить пользователя запустить стороннее ПО, которое будет осуществлять подмену.
Случай с Bitcoin отличается: подтверждения, по сути, отсутствуют, номера кошельков ещё более длинные, на конкретного пользователя не пожалуешься...
В общем, давайте реализуем простой софт, который будет анализировать содержимое буфера обмена и подменять его, если обнаружит там корректный адрес Bitcoin кошелька. Писать будем на MASM, чтобы было веселее.
Читать дальше »

Print This Post Пишем собственный упаковщик. Шаг 12 — Работа над ошибками

Пятница, 26. Апрель 2013
Раздел: C/C++, Windows, автор:

pack

Благодаря одному товарищу из комментариев в предыдущих постах касательно упаковщика выявился один занятный баг в коде, который я поспешил исправить. Комментатор, не разобравшись в деталях работы пакера, утверждал, что код, запакованный им, окажется неспособным работать с SEH при условии, что DEP включен. При таких условиях код работал хорошо (так как весь распакованный код в памяти находится в пределах одной-единственной секции PE-файла, помеченной как исполняемая. UPX имеет такую же логику работы.). Но случайно была обнаружена следующая ошибка: если программа собрана в MSVC++, использует SEH и имеет релокации, при первом же возникшем исключении она упадет с некоторой долей вероятности (точнее, если файл загрузился не по своему базовому адресу). DEP тут, конечно же, не при чем. Все дело оказалось в злополучной директории IMAGE_LOAD_CONFIG_DIRECTORY. Она создается линкером Visual Studio. Из полезной информации она содержит таблицу адресов (RVA) SE-обработчиков и указатель на внутреннюю переменную crt __security_cookie. Как выяснилось, эта директория нужна не только для внутренностей CRT (хотя она, кажется, как раз хотела плевать на эту структуру), но и системному загрузчику (по крайней мере, в Win7. WinXP, похоже, тоже плевал на эту директорию). Упаковщик, который я описываю, перемещает эту директорию в другую секцию (см. здесь). Поэтому исправить ошибку можно, добавив в таблицу релокаций, создаваемую упаковщиком, несколько записей, которые будут править адреса, указывающие на security cookie и таблицу обработчиков SEH, чтобы он мог считать интересующую его информацию из этой директории на этапе загрузки.

Помимо правки этой ошибки я обновил код упаковщика, чтобы он собирался с использованием последней на данный момент версией библиотеки для работы с PE-файлами (PE Bliss). Ее всегда можно скачать отсюда.

Кстати, насчет библиотеки PE Bliss. Сейчас в свободное время я допиливаю новую версию, в которой появятся следующие дополнительные возможности (список примерный и может измениться):
- высокоуровневая работа с дополнительными типами ресурсов PE-файлов;
- детальный разбор .NET-бинарников (метаданные, сигнатуры, ресурсы);
- обертка над библиотекой на C++/CLI, которая позволит .NET-разработчикам удобно использовать функционал библиотеки в софте на C# или Visual Basic .NET.

Скачать исходники упаковщика: packer source
Скачать собранный вариант: packer binary

Print This Post Простой контроль целостности процесса под Windows

Суббота, 23. Март 2013
Раздел: C/C++, Windows, автор:

Намедни решил попробовать написать драйвер под Windows. Варианты с "Hello world" показались унылыми, поэтому в качестве тренировки поставил перед собой следющую цель: написать драйвер, который будет контролировать целостность кода процесса по запросу. В общем, драйвер будет считывать данные о загруженных в память секциях, проверять атрибуты и считать простенькую контрольную сумму, а при повторном обращении - сверять её. Совсем детально описывать процесс я не буду, так как в интернете есть куча мануалов по самым основам, да и желающие могут просто посмотреть примеры из WDK, которые достаточно хорошо документированы.
Читать дальше »

Print This Post Ремонтируем музыку в старой игре

Вторник, 1. Январь 2013
Раздел: C/C++, Windows, автор:

Недавно игрался в забавную игру-головоломку на iPad под названием The Incredible Machine, игра понравилась, поэтому решил поискать что-то аналогичное на PC. Обнаружилось, что эта игра является переделкой старой серии игр. Окинув взглядом серию, решил скачать The Incredible Machine 3 под Windows, обладающую довольно сносной графикой на мой вкус.

tim3

Отличная игра, но обнаружился небольшой негативный момент, состоящий в том, что в качестве саундтрека выступали MIDI-файлы, несмотря на наличие качественных композиций в CD-версии игры (согласно Wiki). Неприятность была списана на недосмотр со стороны разработчиков, разместивших игру на GOG.com (откуда она и была взята изначально), однако качественный саундтрек с CD-версии всё-таки поставлялся в виде набора MP3-файлов, но без очевидной возможности интеграции его в игру. Я решил исправить это досадное упущение и реализовать костыль, позволяющий играть в игру и наслаждаться качественным звуком.
Читать дальше »

Print This Post Логируем необрабатываемые исключения

Пятница, 21. Декабрь 2012
Раздел: C/C++, Windows, автор:

Надоело созерцать зелёную морду на титульной странице блога, поэтому настало время эту морду сместить.

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

Основу библиотеки фактически будет составлять одна функция - MiniDumpWriteDump, которая делает дамп памяти процесса. Этот дамп впоследствии можно открыть, например, в WinDBG и посмотреть причину неожиданного падения процесса. Также хочу отметить, что мы "покладем" на замечание из MSDN о необходимости вызова данной функции из отдельного процесса.
Читать дальше »