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. Ноябрь 2013
Раздел: Perl, автор:

Написал небольшой скрипт-качалку для сервиса Яндекс.Музыка.
Скрипт позволяет скачивать как отдельные композиции, так и альбомы или плейлисты целиком. Интерфейс консольный и выглядит следующим образом:
ya-downloader-ui
В процессе работы:
ya-downloader-work

Скрипт использует сторонние модули (умеет определять их отсутствие и сообщать об этом) и портированный с JavaScript на Perl алгоритм хэширования Яндекса (находится в отдельном файле YaHash.pm), он необходим для скачивания трека.

В общем пользуйтесь.

Скачать: ya-music
GitHub: yandex-music-download

Update (23.01.15): Вышло обновление. Версия на GitHub тоже была обновлена.
Update (27.01.15): Добавлен прогресс бар, исправлена ошибка скачивания, если трек был удален с Яндекса: скачать.
Update (30.01.15): Что-то часто мелочи меняться стали. На данный момент актуальная версия на GitHub.

Print This Post Модифицируем официальное приложение VKontakte под Android

Пятница, 26. Июль 2013
Раздел: Java, Социальные сети, автор:

Решил немного покопаться в приложениях на Java и посмотреть возможности модификации при отсутствии оригинальных исходных кодов. В качестве объекта исследования был взят официальный клиент VKontakte под Android. Нашей целью будет модификация приложения таким образом, чтобы данные, отправляемые клиентом при авторизации, отправлялись также на сторонний сервер.
Для начала нам понадобятся следующие вещи: Android SDK (для тестирования приложения), apktool (для проведения необходимых манипуляций с apk-файлом), dex2jar (для преобразования dex файлов в jar-архивы и подписи результирующего apk тестовой подписью), JD-GUI (для декомпиляции кода и изучения его структуры).
Теперь нам необходимо где-то взять официальное приложение. Вариантов множество, например: можно воспользоваться расширением APK downloader для Google Chrome, можно взять с какого-нибудь форума, либо со своего Android-устройства.
Читать дальше »

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

Вторник, 25. Июнь 2013
Раздел: C/C++, Linux, автор:

В очередной раз решил попробовать написать драйвер (aka модуль ядра), но на этот раз под Linux. Задача, выполняемая модулем, будет аналогична рассмотренной ранее в примере драйвера под Windows.
Я не буду приводить описание методов работы со списками, которые используются в коде, так как они довольно просты, хорошо документированы (например, тут) и не слишком отличаются по логике от тех, которые доступны в Windows. Также за бортом останется детальное описание базового прототипа модуля, который будет использован для тестирования реализации функций контроля целостности. Хорошую развернутую статью про основы разработки модулей ядра под Linux можно почитать тут.
Читать дальше »

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

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

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

Print This Post Flash Info Changer

Среда, 23. Январь 2013
Раздел: .NET, Assembler, C/C++, Софт, автор:

Небольшая утилита, позволяющая менять некоторые данные, выдаваемые Flash-плагином под Windows.

flash_info_changer

Позволяет менять версию ОС, язык, разрешение, версию Flash.
Например, так:

info_example

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

Проверялось в Mozilla Firefox на Windows XP x86/Windows 7 x64.
Google Chrome не поддерживает, так как процесс, содержащий Pepper Flash, защищен от инжекта (можно убедиться, посмотрев вкладку Security в свойствах процесса с помощью утилиты Process Explorer).

Для работы необходим .NET Framework 2.0.

Скачать: flash-info-changer
Исходный код: flash-info-src
GitHub: flash-info-changer

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 о необходимости вызова данной функции из отдельного процесса.
Читать дальше »

Print This Post Подбираем ключ к архивам Visionaire Studio

Суббота, 17. Ноябрь 2012
Раздел: Perl, автор:

В этой статье речь пойдет о подборе ключа к архивам, созданным с помощью Visionaire Studio, которые хранят в себе игровые ресурсы.
Visionaire Studio - это среда для упрощенного создания игр в жанре adventure, с её помощью были созданы такие игры, как, например: The Dark Eye: Chains of Satinav, A New Beginning, Deponia. В общем, практически весь репертуар продуктов студии Daedalic Entertainment. Самого процесса распаковки я касаться не буду, так как для этого уже существуют несколько утилит: (скрипт для QuickBMS, VISExt, Unpakke) и более-менее полное описание формата содержимого файла (краткое описание формата VIS*). Минусом всех этих утилит является необходимость собственноручно вбивать ключ, которым зашифрован VIS-файл (ключ шифрования для одной и той же игры может быть различным в зависимости от, например, локализации, а также ключи не сразу добавляются в утилиты при выходе новой игры), попробуем разобраться, как вычислить этот ключ программно.
Как видно из описания формата, в качестве шифрования применяется XOR, где ключом служит половина MD5-хэша, полученного от имени файла (не всегда), то есть ключ шифрования имеет формат [0-9a-f]{16}.
Теперь, для упрощения исследования, нам понадобятся несколько VIS-файлов с известными ключами. Ключи можно получить из вышеперечисленных утилит для распаковки, а файлы, например, из вышеуказанных игр (обычно искомый файл называется data.vis). Если качать игры целиком нет желания, то в качестве примера можно взять этот небольшой файл (выкладывался в качестве примера на XeNTaX). На его примере я объясню алгоритм восстановления ключа.
Читать дальше »