Старый 04.02.2003, 22:01   #1   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post C++

Такой вопрос... Как-то задался целью написать кейлоггер. Порылся в хелпах, искал в литературе всякой... Вообщем все, что нашел - надо использовать hook(перехват, кажется), но как его использовать хелпы умалчивают, а в литературе такой специфической темы нет. Поделитесь опытом пожалуйста. Спасибо.
З.Ы. В принципе не важно, на дельфях или сях, но хотелось бы на последних. Хотя, как я понимаю это API-функция и ее синтаксис от языка не зависит.
  Ответить с цитированием
Старый 05.02.2003, 08:23   #2   
Форумец
 
Аватар для fishca
 
Сообщений: 708
Регистрация: 23.12.2002
Возраст: 50
Записей в дневнике: 1

fishca вне форума Не в сети
Smile

Если на Delphi поищи на delphi.mastak.ru.
  Ответить с цитированием
Старый 05.02.2003, 14:56   #3   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

Hugin Плохо искал хелпы и литература об этом совершенно не умалчивают

Возможно, SetWindowsHookEx - тебе поможет. Подробности в msdn.

P.S. Не очень хорошее дело ты затеял
  Ответить с цитированием
Старый 05.02.2003, 16:05   #4   
Форумец
 
Сообщений: 12
Регистрация: 03.09.2002

VadimM вне форума Не в сети
Post

is Согласен что не очень хорошее, но смотрельшики паролей можно и не сочинять - их море и в интернете.

А так, SetWindowsHookEx - поможет, только надо обратить внимание что если функция - перехватчик сообщений - будет в exe то ловиться будут только сообщения этой программы. Если хочется написать перехватчик сообщений для других программ, то функцию нужно выпихнуть в DLL. Ну и флаги соответствующие выставить.
  Ответить с цитированием
Старый 05.02.2003, 16:16   #5   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

VadimM Подробности я опустил, т.к. см. P.S.

Ну раз уж Вы упомянули, то есть глобальные и локальные хуки. Как их устанавливать и чем они различаются: пусть заинтересованное лицо ищет . Наше дело - дать толчок.
  Ответить с цитированием
Старый 06.02.2003, 21:29   #6   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

Что-то вы все про дело плохое заладили... Если бы мне нужен был рабочий кейлоггер, я бы действительно его из инета скачал. Мне интересен сам процесс. Просто изучать язык по книжкам это конечно же хорошо... но реальное применение захватывает гораздо больше. За советы спасибо, обязательно воспользуюсь(с этого, конечно, и надо было начинать... . И вот еще что. Если я впихну функцию в длл, то, как я себе представляю, она будет ловить сообщения тоолько тех, кто ее использует. Или нет?
  Ответить с цитированием
Старый 06.02.2003, 23:49   #7   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

Hugin Наверное, потому, что оно действительно не очень хорошее. Свою энергию можно потратить более продуктивно sourceforge.net - вполне подойдет

С точностью до наоборот. Тебе неплохо было бы почитать основы программирования под винду: в частности, про dll, процессы, потоки, адресное пространство. Тогда и вопросы отпадут.
  Ответить с цитированием
Старый 07.02.2003, 10:23   #8   
Форумец
 
Сообщений: 12
Регистрация: 03.09.2002

VadimM вне форума Не в сети
Post

Hugin. Не совсем, тогда винда сможет подцепить ее (DLL) ко всем процессам, а с exe она этого сделать не сможет.
  Ответить с цитированием
Старый 07.02.2003, 11:54   #9   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

VadimM Совершенно верно. Windows спроецирует dll на адресное пространство процесса. Именно с этим и связано то, что глобальный хук нужно помещать в dll.

Все это становиться очевидным, если воспользоваться советом, данным в моем предыдущем посте (последний абзац ) - надо учить мат. часть
  Ответить с цитированием
Старый 07.02.2003, 11:58   #10   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

P.S. Hugin, В своем ЗЫ Вы правильно заметили - все вышесказанное никак не зависит от языка программирования. Это относится исключительно к программированию под Windows на Win API.
  Ответить с цитированием
Старый 08.02.2003, 11:05   #11   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

Еще раз спасибо за советы. В том, что неплохо было бы почитать программирование под винду вы абсолютно правы. Просто я взялся изучать Си и завяз на полиморфизме, написании манипуляторов потока, перегрузки операций... Все это, без сомнения, интересно, но слишком далеко(по крайней мере на моем уровне) от реального написания программ. Я не могу применить это на практике. Это больше годится для серьезных приложений. Мне же пока захотелось написать что-нибудь, после чего я увижу реальные результаты продвижения вперед. В журнале Хакер сейчас есть цикл статей по дельфи. Там автор не слишком-то углубляется в теорию, но рассказывает читателям о написании ДЕЙСТВИТЕЛЬНО полезных программ. Пусть этого недостаточно для изучения языка, но он по крайней мере пишет то, что интересно читателям. Если бы он стал писать голую теорию, его статьи никто бы просто не стал читать. Ух... У меня, кажется все .
З.Ы. Я бы был очень признателен. если бы кто-нибудь из вас выслал мне какую-нибудь литературу по программированию, в особенности по винду )([email protected]). Спаисибо.
  Ответить с цитированием
Старый 08.02.2003, 12:02   #12   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

Hugin You are welcome

Ну, во-первых, хотелось бы уточнить по поводу Си. Полиморфизма в Си нет - он не ООЯ. Если Вы имели ввиду С++, то тогда да, такая штука есть.

Во-вторых, по "перегрузке операций". Тоже не совсем корректно. В С++ есть перегрузка функций и перегрузка операторов (в С++ это тоже функции ). Думаю, Вы имели в виду именно последнее.

В-третьих, Вы глубоко заблуждаетесь по поводу того, что это "слишком далеко" от реального написания программ. Без этого как раз - никуда.

Хотите получить реальные результаты? Нет ничего проще: ставьте себе задачу, проектируйте, кодируйте (походу к проектированию Вам придется вернуться ни раз - это нормальный процесс). Главное - не отступать и помнить: не боги горшки обжигают. И тогда у Вас все получится.

В-четвертых... Хакер я Вам крайне не рекомендую. То, что мне попадалось, ну, я бы не смог никак порекомендовать кому-либо. Подчеркну, что это мое субъективное мнение, которое может и не отражать существуещее положение вещей адекватно. Но его разделяю не только я. Поэтому, надеюсь, дал Вам повод для размышления.

Немного по поводу голой теории: можно, конечно, сдобривать статьи немалым количеством юмора и шуток, но (!) когда Вам реально надо будет получить информацию и применить на деле, Вас это будет, по меньшей мере, раздражать. Такой прием я склонен рассматривать как популизм, не более того. Так, трудно сказать, что "Искусство программирования" Кнута что-нибудь могло приобрести, разбавь автор текст шуточками (чуть-чуть не помешают, но только чуть-чуть - и они там есть ).

По ЗЫ: рекомендую Вам все-таки купить какую-нибудь хорошую книгу. Электронная литература хороша, если Вы хотите что-нибудь быстро найти. Ну, еще можно почитать на Palm'е. А так... Поберегите свои глаза.
  Ответить с цитированием
Старый 08.02.2003, 14:10   #13   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

is Все Ваши замечания к сведению принял . Я действительно имел в виду С++. И действительно оператор-функции(как их называет автор изучаемой мною книги, думаю это официальное название). В свою очередь хотелось бы заметить, что термин ООЯ мне, к сожалению, не известен. Могу предположить, что Вы имели в виду ООП. На счет Хакера... Во многом я с Вами согласен. Слишком много воды, слишком много того, что только затрудняет понимание. Но в свое время он для меня был единственным источником информации. Но (!). Мое уважительное отношение к статьям по программированию было вызвано вовсе не тем, что там присутствует много шуток(чего, кстати, и не наблюдается), а тем, что там описано именно практическое применение полученных знаний. Просто Хелло ворлд или подсчитай то-то выведи то-то конечно же полезно для освоения языка, но... Не думаю, что мне стоит объяснять. Конечно, я сам создаю для себя эти ограничения, кто не дает мне идти дальше? Ну, хорошо, предположим, что я написал текстовый редактор(правда его написание было описано в хелпах... но факт есть факт ! ) На что он мне? Блокнот как-то привычней будет. И на счет электронной литературы... Опять не могу с Вами не согласиться(поразительно просто) . Но(всегда это Но!)... Я и так большую часть дня провожу за компом(Не говорю, что это правильно). Ладно, все-таки первоначальный толчок получен, пойду читать Киммела. На долго ли его хватит?(Не Киммела, конечно, толчка ).
З.Ы. Да, кстати, вспомнил. Не знаю как сейчас, но раньше Интро у Хакера был... Если встретите где-нибудь журнал(не Спец, обычный) - обязательно прорчтите.
  Ответить с цитированием
Старый 08.02.2003, 21:51   #14   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

ООЯ - объектно-ориентированный язык. Правда, обычно добавляют
"программирования", получается - ООЯП.

А вот на святое не надо. "Hello, world!" - это "Hello, world!". Согласен, проку от него немного, но что сделаешь - классика.

Ну, напишите программу для себя. Которая действительно нужна именно Вам, а не автору статьи/книги Сначала что-нибудь простое, затем - сложнее.

Практическое применения - неплохо. Кто спорит? Только часто бывает, что если надо сделать что-то, отличное от рассмотренного в статье (пусть даже незначительно), то это не получается. Общие принципы и идеи в таких статьях легко могут затеряться в деталях. Редким авторам удается избежать этой участи.

Про книги a la "За 21 день..." я вообще молчу. Впечатления только отрицательное. Конечно, возможно мне просто такие попадались.

Я тоже много провожу за компьютером. Думаю, не меньше Вас. Но книги читаю на бумаге (в основном ). Конечно, это дело вкуса. Хотя, с чтением бумажной книги на диване не сравниться чтение с монитора.
  Ответить с цитированием
Старый 08.02.2003, 22:12   #15   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

Нда... а я то думал, я такой умный, опечатку заметил... То-то я смотрю, буковка Я достаточно далеко от буковки П. Ладно... Проще всего, конечно, сказать:"А пускай программировнию меня обучают в университете. Тем более что С++ будет у нас только на третьем курсе. Два года - не малый срок, успею еще выучить и плюсы и шарп, и под линуху программироать научусь." Кстати полгода уже на винте мертвым грузом лежит... Ну не совсем мертвым, конечно. Можно при случае ударить себя кулаком в грудь и сказать, что я де винду не уважаю, юзаю только линуху. . Да, о чем это я? Увлекся. Задачи... Вот я и поставил себе задачу кейлоггер написать! . Перед этим был текстовый редактор. Так что на полнлм ходу двигаюсь вперед. Надеюсь...
  Ответить с цитированием
Старый 09.02.2003, 00:15   #16   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

Да, и еще. Вот что я нашел по функции SetWindowsHook(SetWindowsHookEx я ПОКА вообще не нашел):Функция SetWindowsHook

Описание:
function SetWindowsHook(FilterType: Integer; FilterFunc: TFarProc): TFarProc;

Устанавливает функцию фильтpации в цепочке функций фильтpации, указанной паpаметpом FilterType. Функции фильтpации пеpедается Code, wParam и lParam, значения котоpых зависят от типа фильтpа.

Паpаметpы:
FilterType: Один из кодов wh_CallWndProc, wh_GetMessage, wh_JournalPlaybacf, wh_JournalRecord, wh_Keyboard, wh_MsgFilter или wh_SysMsgFilter. См. pаздел "Коды пеpехвата Windows, wh_", в главе 1.
FilterFunc: Адpес экземпляpа пpоцедуpы функции фильтpации.

Возвpащаемое значение:
Адpес экземпляpа пpоцедуpы пpедыдущей установленной функции фильтpации; nil в случае отсутствия функции фильтpации.

См. также: DefHookProc
не очень тот информативно
  Ответить с цитированием
Старый 09.02.2003, 00:19   #17   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

Hugin Правильно, никогда не надо ждать, что Вас кто-либо чему-нибудь научит. По-моему, это программирования касается особо. Ни на кого не надейтесь.

Спросите себя: а много преподавателей работает в софтверных фирмах? Или консалтинговых? К сожалению, не так уж, как хотелось бы Сорри, если задел чьи-то чувства.

В основном, те, кто, как Вы пишите, "не уважают винду" - не особо понимают предмет критики. И у Windows, и у Linux есть недостатки. По винде мало конструктивной критике - в основном одни голословные обвинения. Багов у Windows находят больше, может быть потому, что она и более распространена?

Так, ясно. Ну, что ж, ждем от Вас килоггера на следующей неделе. MSDN Вам в помощь

Если хотите, могу следующую задачу что называется "с кандачка" подкинуть.

[ 09-02-2003: Edited by: is ]</p>
  Ответить с цитированием
Старый 09.02.2003, 00:37   #18   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

Что ж... Буду долбить в этом направлении . Линукс... Ну надо же свалить на кого-то вину за все неудачи! Почему не на Билла Гейтса? Чем не подходит? Богат. Уже этим раздражает. Ну а дальше причин можно найти массу. Было бы желание... На счет задачи - обязательно!
  Ответить с цитированием
Старый 10.02.2003, 13:00   #19   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

Пользуетесь Winamp'ом? Ну, так, вот: напишите к нему plug-in, который бы делал... скажем, окно прозрачным.
Да, сразу скажу: уже видел такой плагин. Но для такой задачи размер (сейчас посмотрим...) 265 Кб - слишком много. Конечно, над писать на чистом апи без линковки ненужных библиотек.

Понадобится SDK, который можно взять с сайта винампа в разделе для разработчиков.

Хинт: на вскидку основную работу там выполняют... так где-то около трех API-функций .

P.S. Это справедливо для Winamp 2.x, для 3.х все уже сделано Nullsoft'ом.
P.P.S. Работы очень немного, так что - вперед.
  Ответить с цитированием
Старый 10.02.2003, 15:07   #20   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

На счет кейлоггера - есть . Правда до полноценного его еще дорабатывать и дорабатывать... Например при нажатии на шифт+клавиша что-то не то выдает - надо похоже анализировать значение lParam. Но работает! С винампом... посмотрим. Попытаться можно. Тем более каникулы все равно продолжаются.
  Ответить с цитированием
Старый 10.02.2003, 18:37   #21   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

Не знаю, все уже перепробовал! И шифт и контрол и даже раскладки распознает, перестал по два раза повторять(скорее всего ловил событие отпускания клавиши), но... (ненавижу это но ). Все прекрасно работает пока я не перейду в другое окно(сейчас я реализовал запуск кейлоггера как приложение с пустой формой, при создании которой запускается функция из длл, которая ставит процедуру ловушки в очередь). SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0). Кстати, что такое HInstance я так и не понял. Это должен быть идентификатор длл, в которой располагается процедура ловушки. Какой идентификатор? Хендл что ли? Думаю, эта ?функция? возвращает хендл длл(или приложения) из которого вызывается. Так вот... Как только я перехожу в другое окно появляется Runtime Error такая-то такая. Любые дальнейшие нажатия клавиш приводят к появлению еще кучи таких сообщений. Если нажимать ок, эксплорер вызывает критическую ошибку... и пошло-поехало . В чем может быть проблема?
  Ответить с цитированием
Старый 10.02.2003, 20:33   #22   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

Жаль, что Вы не послушали совета читать msdn. Или прочитали не внимательно, что тоже прискорбно


По хэндлу...

<blockquote><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Цитата:</font><hr>
HHOOK SetWindowsHookEx(
int idHook, // hook type
HOOKPROC lpfn, // hook procedure
HINSTANCE hMod, // handle to application instance
DWORD dwThreadId // thread identifier
);

[...]

hMod
[in] Handle to the DLL containing the hook procedure pointed to by the lpfn parameter. The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the code associated with the current process.
<hr></blockquote>

Дальше...

<blockquote><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Цитата:</font><hr>
Calling the CallNextHookEx function to chain to the next hook procedure is optional, but it is highly recommended; otherwise, other applications that have installed hooks will not receive hook notifications and may behave incorrectly as a result. You should call CallNextHookEx unless you absolutely need to prevent the notification from being seen by other applications.

<hr></blockquote>

Этих рекомендаций придерживаетесь?

Не хочу повторятся, но MSDN никто не отменял.

Кроме того, следует иметь ввиду, что...

<blockquote><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Цитата:</font><hr> The global hooks are a shared resource, and installing one affects all applications in the same desktop as the calling thread. All global hook functions must be in libraries. Global hooks should be restricted to special-purpose applications or to use as a development aid during application debugging. Libraries that no longer need a hook should remove its hook procedure.
<hr></blockquote>
  Ответить с цитированием
Старый 10.02.2003, 20:35   #23   
Форумец
 
Сообщений: 12
Регистрация: 03.09.2002

VadimM вне форума Не в сети
Post

Это у тебя проблемы с корректным присоединением/отсоединением к процессу. А hInstance это действительно instance handle

[ 10-02-2003: Edited by: VadimM ]</p>
  Ответить с цитированием
Старый 10.02.2003, 22:20   #24   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

VadimM Там идет маппирование в адресное пространство процесса (в данном случае Explorer) Dll с глобальным хуком.

Так что общая причина в последней цитате

The global hooks are a shared resource, and installing one affects all applications in the same desktop as the calling thread.

Кроме того, я уже приводил цитату в предыдущем посте (в предпоследней цитате), если отказываетесь обрабатывать сообщение, то надо вернуть значение результата вызова CallNextHookEx.

И еще "маленькое" дополнение: Dll должна иметь разделяемую секцию. Иначе внедриться в процесс не получиться (а как же передавать параметры хука?).

Повторю, все это есть в msdn.
  Ответить с цитированием
Старый 11.02.2003, 17:07   #25   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

Самое интересное - когда я методом научного тыка комментировал все подряд, выяснилось, что если я просто убираю все обращения к файлам никаких ошибок не возникает!
  Ответить с цитированием
Старый 11.02.2003, 21:40   #26   
tramp
 
Аватар для Hugin
 
Сообщений: 32
Регистрация: 01.02.2003
Возраст: 38

Hugin вне форума Не в сети
Post

но к файлам я обращаюсь правильно! На счет винампа... советы
с сайта их скачал, но... не могу я найти нужную функцию! Может намекнете?
  Ответить с цитированием
Старый 13.02.2003, 08:47   #27   
Форумец
 
Аватар для is
 
Сообщений: 111
Регистрация: 04.02.2003

is вне форума Не в сети
Post

Идея проста как пробка

Выясняем "что такое прозрачное окно?", какие у него особенности в отличие от непрозрачного -&gt; Добавляем то, что отличает прозрачное окно от обыкновенного

Все. Из этих действий API-функции определяются тривиально
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind