Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #90, ИЮНЬ 2006 г.

Уводим WebMoney

SIR (sir-xaker@mail.ru)

Хакер, номер #090, стр. 090-116-1


Мгновенный и скрытый перевод электронных денег

Существуeт особый сорт людей, которые не хотят работать, но при этом мечтают кататься как сыр в масле. Они обычно зарабатывают на жизнь не очень честно, но перед снятием сливок им все-таки приходится поработать своими извилинами. В этой статье мы рассмотрим один из таких умственных экспериментов.

Предыстория

О способах похищения денег с кошельков WebMoney ходят легенды: специальные сборщики, накрутчики WM-денег, взлом программы-клиента, перехваты трафика с серверов и другие фантастические истории. Все эти способы - выдумка. Взломать напрямую WM Keeper не очень сложно, но это бесполезная трата времени: все операции осуществляются только на сервере, и никакой перехват трафика здесь не поможет. Keeper является всего лишь передатчиком действий пользователя и средством просмотра состояния счета. Ты задаешь команду – сервер ее выполняет. Если выполнить команду невозможно (например, недостаточно денег на счете для перевода) – появится сообщение об ошибке.

Пожалуй, только хищение самих ключей от WM Keeper'а долгое время оставалось единственной реальной возможностью получить доступ к чужим кошелькам. Но появление таких дополнительных мер защиты, как увеличение размера ключей до 100 МБ и активизация через e-mail при использовании с другого компьютера, сделало и этот способ абсолютно бесполезным. (Я бы не так сказал. Например, у меня активация отключена, так как часто работаю с виртуальными и зашифрованными дисками, подключение которых Keeper воспринимает как изменение аппаратной конфигурации и требует ввода кода. Задание размера ключей в версии 3.0.0.0 я не нашел. А вот хранение ключей на enum.ru решает проблему хищения, но этим сервисом пользуются не все. — Прим. редактора)

Мой метод довольно прост. Все началось с того, что я случайно забрел на давно забытую ссылку - http://www.xakep.ru//magazine/xa/067/042/1.asp. Автор изобрел оригинальный метод, основанный на стандартных WinAPI-функциях. Однако и эта статья устарела и пришла в негодность. Я кардинально переработал его метод и вложил часть своего замысла.

begin

В начале наша программа будет просто висеть в памяти и проверять все окна на наличие заголовка "WebMoney Keeper". Это легко делается с помощью API-функции:

FindWindow:

var KeeperWnd:HWND;

while KeeperWnd=0 do

KeeperWnd:=FindWindow(nil,PChar('WebMoney Keeper'));

Впоследствии мы будем получать хэндлы дочерних окон (нужные поля ввода, кнопки и другие необходимые объекты). Для их получения используется функция GetWindow, первым параметром которой выступает хэндл основного окна, а вторым - GW_CHILD.

Итак, программа запущена. Теперь проверяем ее коннект к серваку. Эту проверку я реализовал следующим образом. API-функцией GetWindow получаем хэндлы дочерних окон: полей ввода, кнопок и др. Шестым будет хэндл кнопки, на которой написан статус программы (онлайн или оффлайн). При помощи функции GetWindowText мы считываем с нее текст. Однако нам недостаточно знать статус, ведь программа проходит этап авторизации. Нам необходимо ждать появления такой строки текста: «OnLine [WMID] - Обновить данные». (В версии 3.0.0.1 можно, например, ждать исчезновения многоточия из этой строки. - Прим. редактора)

Содержание  Вперед на стр. 090-116-2
Hosted by uCoz