Столкнулся с ситуацией, что нужно получить пароль из едита со стилем ES_PASSWORD из окна чужого процесса.
Но как я понял SendMessage(hwndch, WM_GETTEXT, 250, (LPARAM)text) ну и GetWindowText для этого не годятся.
Нашел, что это можно обойти таким способом, но это в принципе не совсем то, хотелось бы что-нибудь по разумнее:
//winf это WINDOWINFO
//hwndch это HWND //то бишь хендл дочернего окна(контрола)
if(GetWindowInfo(hwndch, &winf) != NULL)
{
if (winf.dwStyle & ES_PASSWORD)
{
LRESULT result;
printf("passw");
result = SendMessage(hwndch, EM_GETPASSWORDCHAR, NULL, NULL);
PostMessage(hwndch, EM_SETPASSWORDCHAR, NULL, NULL);
Sleep(100); // не обязательно
if(SendMessage(hwndch, WM_GETTEXT, 250, (LPARAM)text))
{
printf("[%s]\n", text);
} else printf("empty\n");
SendMessage(hwndch, EM_SETPASSWORDCHAR, result, NULL);
}
}
[Win32] Возможно SetWindowLong поможет30.08.04 11:52 Автор: amirul <Serge> Статус: The Elderman Отредактировано 30.08.04 11:53 Количество правок: 1
В частности при помощи GetWindowLong с GWL_STYLE взять стиль, сбросить в нем ES_PASSWORD, записать стиль обратно SetWindowLong, считать текст WM_GETTEXT, восстановить стиль.
В windowsx.h описаны очень полезные но почему то недокументированные макросы. С их помощью можно сделать все еще проще:
> Из MSDN: This function cannot retrieve the text of an edit > control in another application. > > Для межпроцессного взаимодействия (окно «находится» в чужой > программе), нужно делать SendMessage с сообщением > WM_GETTEXT. > > Удачи.
Кстать заметь что через SendMessege ты не сбросишь стиль PASSWORDа а через PostMessage можно. Своеобразная дырка ...
А по моему SetWindowLong вообще не использует сообщения01.09.04 12:54 Автор: amirul <Serge> Статус: The Elderman
Windows 95/98/Me: The SetWindowLong function may fail if the window specified by the hWnd parameter does
not belong to the same process as the calling thread.
Нормульно работает эта функция... «May fail» не относится к стилю паролей поля ввода.01.09.04 14:40 Автор: HandleX <Александр М.> Статус: The Elderman
Так дело в том что не очень симпатичный метод. Мне вот люди посоветовали что через хуки внедрится в чужой процесс и внутри него уже копать, что более интересно.
Но хотелось бы литературки по этой темке.
[Win32] Как раз injection - это не очень красивый метод31.08.04 10:38 Автор: amirul <Serge> Статус: The Elderman
> Так дело в том что не очень симпатичный метод. Мне вот люди > посоветовали что через хуки внедрится в чужой процесс и Тем более через хуки. Они палятся быстрее, чем что либо другое
Если винда с NT-ядром, то можешь глянуть в сторону CreateRemoteThread, если 9x - то это вообще одна сплошная дыра (hint: смотри в сторону общей для всех процессов памяти с dll-ками).
> внутри него уже копать, что более интересно. > Но хотелось бы литературки по этой темке. Самый изящный способ тот, что уже привели (со сбросом и восстановлением ES_PASSWORD-а)
Та я вот и смотрю... Остается один главный вопрос.01.09.04 10:26 Автор: hmvs Статус: Незарегистрированный пользователь
Та я вот и смотрю... Остается один главный вопрос.
А как же мне теперь отследить когда пользователь окнчательно введет пароль и нажмет на Ok ???
Ведь если поздлно притсупить окно с дитами канет в небытие. А рано можно схватить недонабраный пароль...
Есть идейки ???
Дык перехватывай события01.09.04 11:02 Автор: amirul <Serge> Статус: The Elderman
> Та я вот и смотрю... Остается один главный вопрос. > А как же мне теперь отследить когда пользователь > окнчательно введет пароль и нажмет на Ok ??? Именно это событие и перехватывай. Пароль вводится в двух случаях: пользователь жмет на мышей на OK и пользователь жмет Enter прямо в edit-е, что в свою очередь все равно нажимает DEFPUSHBUTTON. Раз уж собрался ставить хуки - ставь. Здесь достаточно перехватить WM_COMMAND
> Ведь если поздлно притсупить окно с дитами канет в небытие. > А рано можно схватить недонабраный пароль... > Есть идейки ???
Хех... Вот незнаю в какую сторону все таки пойти мне :))) А...01.09.04 11:46 Автор: hmvs Статус: Незарегистрированный пользователь
> > Та я вот и смотрю... Остается один главный вопрос. > > А как же мне теперь отследить когда пользователь > > окнчательно введет пароль и нажмет на Ok ??? > Именно это событие и перехватывай. Пароль вводится в двух > случаях: пользователь жмет на мышей на OK и пользователь > жмет Enter прямо в edit-е, что в свою очередь все равно > нажимает DEFPUSHBUTTON. Раз уж собрался ставить хуки - > ставь. Здесь достаточно перехватить WM_COMMAND
Хех... Вот незнаю в какую сторону все таки пойти мне :))) А если без хуков и без драйверов всяких?
Ага. И вообще без программирования01.09.04 12:53 Автор: amirul <Serge> Статус: The Elderman
> Подумай над DLL-injection. > > Описано тысячу раз ;-) > > И проблем меньше — будешь сидеть сухо и комфортно в > адресном пространстве нужной тебе проги. А меня интересует вообще один процесс, и в него внедряется ) Но все же если можно то кинь линки на доку по DLL-injection ибо не сталкивался я с ним. Если можно то на русском и с примерами :) Пасибки )
Гугль в помощь (updated)01.09.04 15:47 Автор: amirul <Serge> Статус: The Elderman Отредактировано 01.09.04 15:50 Количество правок: 1
> Так дело в том что не очень симпатичный метод. Мне вот люди > посоветовали что через хуки внедрится в чужой процесс и > внутри него уже копать, что более интересно. > Но хотелось бы литературки по этой темке. "Копать" можно и без внедрения... ReadProcessMemory и вперед. Только сомневаюсь я в результативности подобного подхода если речь идет о создании универсальной открывалки. А сделать кейлог - проще простого - STFW по SetWindowsHookEx. Но продвинутые проги могут сопротивлятся таким вещам...
ЗЫ кстати готовых показывалок паролей под звездочками довольно много...