MASM32: Начало

Решил начать цикл статей по ассемблеру, и, в частности, по MASM32. Пригодятся эти мануалы с примерами тем, кто хочет поднять свои навыки программирования и развить умение программировать на ассемблере. Пакет MASM32 - это не просто голый ассемблер. В нём есть огромное множество облегчающих разработку софта вещей - пользовательские макросы, встроенные функции и макросы, дебаггер и прочее, и обо всём этом я буду рассказывать. Конечно, читать такие статьи будет гораздо легче тем, кто уже умеет программировать на каком-нибудь языке. Если вы программируете на каком-нибудь говне вроде Visual Basic, или фанатеете от перетаскивания компонентов и кнопочек на формы в дельфи или Borland C++ - не расстраивайтесь, я расскажу, как можно перетаскивать кнопочки и в ассемблере. Разумеется, никаких стандартных облегчающих жизнь компонентов здесь не будет, но это побудит разобраться с WinAPI - огромной кладезью полезных функций, которые способны делать всё, начиная от чтения данных из сокета и заканчивая отображением окон.
Читать далее «MASM32: Начало»

Делаем собственный инжектор

Давным-давно, во времена мифов и легенд, когда древние Боги были мстительны и жестоки и обрушивали на программистов все новые и новые проклятия... На хабре была опубликована статья про сплайсинг.

В качестве примера в статье был приведен довольно масштабный код, который воспринимался не особо легко. Захотелось разобраться в процессе инжекта, а также написать более простой и менее громоздкий код.
Вкратце, инжектинг - это подгрузка нашей библиотеки в сторонний процесс, а сплайсинг - перехват какой-либо функции (мы перехватывали WinAPI) и модификация её работы средствами этой самой библиотеки.
Пример будет состоять из двух частей: 1 - библиотека, 2 - инжектор, который будет внедрять библиотеку в целевой процесс. Библиотеку будем писать на masm, что позволит в разы сократить объемы кода, а инжектор - на Си.
Читать далее «Делаем собственный инжектор»

KWM bruteforce

Консольный брутфорс для .kwm файлов (файл ключей webmoney keeper classic) по словарю. Использование аналогично предыдущему брутфорсу для .pfx сертификатов.
Скорость перебора составляет ~100-200 тысяч паролей в секунду.

kwm bruteforce

kwm брутфорс

Скачать: kwm bruteforce

Update 03.04.11: Исправлена проблема совместимости с текущей версией kwm-файлов WebMoney.

Update 09.07.12: Немного измененная версия брутфорса, если предыдущий вариант на Intel Core i5 выдавал скорость ~190000 паролей/сек, то этот ~250000 паролей/сек. Скачать.

Update (07.02.14):
kwm bruteforce source
GitHub: kwm-bruteforce

PFX bruteforce

Как-то раз случилось забыть пароль от сертификата Webmoney. Для того, чтобы ускорить процесс вспоминания, был написан простой консольный брутфорс (на Си + Win32 API) для pfx файлов (PKCS #12 Certificate File) по словарю.
Скорость работы на компьютере с процессором CoreDuo 2Ghz под Windows XP SP3 составляет примерно 30000 паролей/сек.

pfx bruteforce

pfx брутфорс

В комплекте с брутфорсом идет Crypt32.dll из WinXP, ибо с ней почему-то достигается наибольшая скорость работы (по сравнению с библиотеками из Windows Vista и Windows 7).

Скачать: pfx bruteforce (пароль на архив: kaimi.ru)
Update (07.02.14):
Скачать: pfx bruteforce source
GitHub: pfx-bruteforce

Создаем плагин на ассемблере для популярного плеера AIMP

Очередная статья, посвященная задротству и извращенству. Почему? Да потому что плагины для AIMP гораздо проще создаются на Дельфи, и для этого автор написал SDK (хотя SDK, конечно, громко сказано - всё ограничилось единственным файлом с исходником на дельфи). Тем не менее, в практике ассемблера этот пример будет весьма полезен и необычен.
Читать далее «Создаем плагин на ассемблере для популярного плеера AIMP»

StepFucker — проходим треки в степмании на АААА

Написал на ассемблере программку для идеального прохождения треков в игре Stepmania.
Если вы не знакомы с такой игрой - посмотрите видео ниже, и поймёте ее суть - нажимать на 4 клавиши в ритм с песней руками или ногами (на специальных ковриках/автоматах).
Весь код программы я описывать не буду, опишу только новые особенности Win API, с которыми мне пришлось иметь дело во время написания.
Для начала, вот несколько скриншотов программы и видео ее работы:

Читать далее «StepFucker — проходим треки в степмании на АААА»

Библиотека для работы с http

Написал небольшую библиотеку на ассемблере (MASM32) для работы с http-протоколом.
Читать далее «Библиотека для работы с http»

Пишем плагины для Winamp’а

Совсем недавно я освоил написание плагинов для этого проигрывателя. Следует отметить, что официального SDK от NullSoft нет, и эта компания изредка выдает общественности куски документации по своему плееру. Некоторые описанные возможности не работают или работают неправильно, некоторые совсем плохо прокомментированы, поэтому мне пришлось много экспериментировать, чтобы написать нечто рабочее. Кстати, пример написанного мной плагина вместе с полностью работоспособным сервисом ведения статистики прослушиваний и создания подписей-картинок для форумов можно посмотреть тут: MusicSign.
Существует достаточно всевозможных тонкостей написания плагинов для WinAmp'а, и я постараюсь их описать в этой статье. Примеры буду приводить на ассемблере MASM32 (собственно, сами плагины я на нем и пишу), но примеры будут несложные, поэтому знающим c/c++ и немного Win32 API будет легко их понять.
Читать далее «Пишем плагины для Winamp’а»

Универсальный конвертер текста 1.0

Очередной релиз от меня - программка для конвертации текста в разные представления и вычисления хэшей, написанная на ассемблере (masm32).
Имеется быстрое копирование и вставка текста, сохранение и открытие текстовых файлов.

Поддерживает конвертацию:
* Text -> URLEncode
* Text -> String.fromCharCode (ascii)
* Text -> String.fromCharCode (utf)
* Text -> base64
* Text -> MySQL char
* Text -> HEX
* Text -> BIN
* Text -> chr()
* Text -> MSSQL char
* Text -> PostgreSQL
* Text -> MD5
* Text -> SHA1
* Text -> &#xxx; (ascii)
* Text -> &#xxx; (utf)
* Text -> \xhh
* Text -> %XX
* Text -> VB chr$()
* Text -> C# (char)
* Text -> Транслит
* URLEncoded -> Text
* base64 -> Text

Скриншот:

Скачать exe (10кб) и исходные коды: ZIP

В общем исходный код программки ничем не отличается от тех, что я выкладывал раньше, но есть несколько интересных особенностей, которые я опишу дальше.
Читать далее «Универсальный конвертер текста 1.0»

Как сделать BSOD из User-mode

Наткнулся на забавный исходник на одном китайском сайте, где показано, как можно сделать BSOD (Blue Screen of Death, синий экран смерти) в Windows из User-Mode (ring 3) без всякого Native API:

Код на c++:

Код на ассемблере (переписал с си++ для уменьшения размера, весит всего 1кб):

Код проверен и работает на WinXP SP3 и Windows Vista SP1. На Windows 7 не работает, пофикшено, на XP SP2 тоже вроде бы не работает.

UPD: обнаружился код на c++, который способен вызвать BSOD на Win XP SP2, Win 2003 SP1 и Win NT SP4 (Discovered on 23.12.2004 by YuraN).
Читать далее «Как сделать BSOD из User-mode»