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

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

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

Для начала необходимо понять, как проверять адрес кошелька на правильность. В этом нам помогут многочисленные веб-сайты, описывающие процесс создания Bitcoin-адреса, а также пример проверки, пусть даже и на PHP. С логикой проверки разобрались. Приступим к написанию реализации.

Мы объявили некоторые вспомогательные константы, которые нам в дальнейшем понадобятся для проверки адрес на корректность. Из ссылок выше понятно, что нам придется делать функцию декодирования для base58 и где-то брать реализацию SHA256. base58 реализуем самостоятельно, а SHA256... в общем воспользуемся Microsoft CryptoAPI. Продолжим.

Теперь у нас есть функция декодирования и небольшая функция логирования. Для лучшего понимания алгоритма base58 стоит обратиться к Google, так как псевдокод или реализация на языке высокого уровня обычно проще для понимания. Перейдем к простой обертке над CryptoAPI, которая будет осуществлять вычисление необходимого хэша.

У нас есть всё, что нужно для счастья. Остается основная логика и немного работы с буфером обмена, но для этого мы воспользуемся готовыми функциями из библиотеки MASM.

Вот собственно и всё. Обращу внимание на один момент: функция SetClipboardTextEx не относится к библиотеке masmlib. Что она из себя представляет? Это функция SetClipboardText из masmlib, но после вызова

я добавил ещё

Без этого функция упорно не хотела изменять содержимое буфера обмена, по крайней мере на Windows 7. Не знаю, с чем это связано, не разбирался.
Теперь всё готово. Компилируем и проверяем, также можно параллельно открыть DebugView и смотреть, какие отладочные сообщения выводит программа.

dbgview

Опытным путём несложно убедиться, что при копировании корректного адреса через буфер обмена он заменяется на наш.

Исходный код + бинарник для тестов: скачать (пароль на архив: kaimi-ru)
Исходный код + бинарник для тестов (28.09.2015): скачать (пароль на архив: kaimi-ru)

 Обсудить на форуме


Получать обновления на почту:     

Комментариев: 21 к “Пишем тривиальный стилер биткоинов”

  1. Новое-хорошо забытое старое :)

    [Ответить]


  2. flisk :

    Спасибо за статью. Биткойны не нужны, а вот примеры криптоапи весьма в тему.

    [Ответить]


  3. zloid :

    Спасибо за статью, идея понравилась, и пример - как выше сказали - использования КриптоАпи.

    Наверное нерационально крутить цикл и опрашивать буфер обмена - проц будет подозрительно загружен.

    В винде есть такие штуки:

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms649052(v=vs.85).aspx

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms649025(v=vs.85).aspx

    [Ответить]

    Kaimi:

    Вызов Sleep в цикле нивелирует проблему.

    [Ответить]

    zloid:

    Всё равно мой способ правильнее!!!1

    :)

    [Ответить]

    kot:

    ваш способ негодный, ибо требует создания окна.

    zloid:

    Лол. Можно подумать, окно это обязательно нечто занимающее половину экрана с красным крестиком в правом верхнем углу и заголовком "created by kot".

    guest:

    > ваш способ негодный, ибо требует создания окна.
    message-only windows


  4. Сергей :

    подскажите пожалуйста. Скачал masm32/ пытаюсь скомпилировать
    пишет cannot open file : \masm32\macros\windows.asm

    посмотрел в папке нет такого файла windows.asm

    сможете закачать ?

    Архив масма качал с сайта masm32.com

    [Ответить]


  5. Сергей :

    Пробовал использовать другой файл линкера.
    Выскакивает другая ошибка.
    --------------------------------------------
    C:\masm32\bin>link16 bit.obj

    Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
    Copyright (C) Microsoft Corp 1984-1993. All rights reserved.

    Run File [bit.exe]:
    List File [nul.map]:
    Libraries [.lib]:
    Definitions File [nul.def]:
    LINK : fatal error L1104: \masm32\lib\kernel32.lib : not valid library

    [Ответить]

    kot:

    линкер 93 года, старье же.

    [Ответить]


  6. alfred :

    Спасибо за статью. Оказывается Kaimi ещё и троян-мейкер. ;-)

    [Ответить]


  7. reno 911 :

    Когда-нибудь я тебя посажу

    [Ответить]

    Bo0oM:

    XD XD XD

    [Ответить]

    zloid:

    а я тебя!

    [Ответить]


  8. name :

    sorry, but offtop:
    Каими, слушай, а напиши что-нибудь пожалуйста про биржи и HFT трэйдинг?
    Интересен твой взгляд на это.. Вот лично мне интересна торговля фьючерсами на CME, ICE и т.п.

    [Ответить]

    zloid:

    А ещё о здоровом питании напиши, о стероидах, о животноводстве и как засунуть корабль в бутылку.

    [Ответить]


  9. reno911 :

    кайми, аниме подождет, учи писать меня кейгены, серийники, патчи

    [Ответить]

    Kaimi:

    Могу научить писать банальный модульный стилер на C/C++ или скажем какую-нибудь фигню на Python (я его правда не знаю, но это не существенно), что ещё... что-нибудь банальное уровня ядра под Windows, какую-нибудь глупость с использованием NFC тоже можно или другое что-то. Даже не знаю, что выбрать.

    [Ответить]

    immortalist:

    Могу научить писать банальный модульный стилер на C/C++
    Да, да, да, умоляю, сделай это!!1111

    [Ответить]


Оставьте ваш комментарий