Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
![]() |
eXeL@B —› Программирование —› Помогите назначить событие |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 04 августа 2006 21:48 · Личное сообщение · #1 |
|
Создано: 05 августа 2006 05:55 · Личное сообщение · #2 |
|
Создано: 05 августа 2006 09:47 · Личное сообщение · #3 |
|
Создано: 05 августа 2006 10:24 · Личное сообщение · #4 x-code пишет: я не могу перехвать нажатие добавленного пункта ме Ты, наверное, хочешь обрабатывать события из одного приложения, в другом. В принципе это можно, но придется переключать контекст и много-много другого. Ты должен делать обработку в подгруженной DLL. Но ничто не мешает результаты перехвата передавать из одного приложения в другое по ReadProcessMemory/WriteProcessMemory или на худой конец просто через файл. ![]() |
|
Создано: 05 августа 2006 11:00 · Личное сообщение · #5 x-code Попробуй так: Если добавил пункт в меню, значит, тебе известен хендл окна, берем, вставляем код в свое приложение: hOldProc = SetWindowLong, hWindow(здесь хендл окна, в которое добавил пункт в меню.), GWL_WNDPROC, NewProc (это твоя процедура в твоем приложении, которая будет обрабатывать события.) NewProc hWindow,Msg,wParam,lParam Msg == WM_COMMAND wParam == IDmenu (младшее слово) ---Обработчик--- CallWindowProc,hOldProc,hWindow,Msg,wParam,lParam P. S. Хуки не используй! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 05 августа 2006 14:38 · Личное сообщение · #6 |
|
Создано: 05 августа 2006 15:45 · Личное сообщение · #7 Rascal Ну, ты и загнул! Demon666 пишет: Если добавил пункт в меню, значит, тебе известен хендл окна Видишь, что написал это, означает, что прокатит мой вариант. (В моем понимании отдельные виртуальные адресные пространства – это кольцо 0 и кольцо 3) Вот тема там я пытался с помощью плагина (так чтобы интереснее было, и сорс в первом аттаче прикрепил) выяснить поведение хуков на разных компьютерах с разным установленным софтом (я просто там не стал объяснять истинную причину написания плагина!) http://exelab.ru/f/action=vthread&forum=3&topic=4708&page= 0 Там применялись два метода привязки к другому процессу ну, и самое главное осталось в привате… P. S. Там кстати тоже есть фокусы с меню аналогичные сабжу… ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 05 августа 2006 16:10 · Поправил: Rascal · Личное сообщение · #8 Demon666 пишет: В моем понимании отдельные виртуальные адресные пространства – это кольцо 0 и кольцо 3 Пацталом, ай да насмешил!!!!!!!!!!!!! А на счёт твоих сорсов - не находишь, что твоя библа распологается в пространстве процесса, куда меню влепил??? на счёт моего предыдущего поста - не в том же приложении, а втом же процессе, в его адр простр ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 05 августа 2006 17:15 · Поправил: Demon666 · Личное сообщение · #9 x-code пишет: Установить я то установил я не могу перехвать нажатие добавленного пункта меню Хук должен быть системный и в библиотеке (если между разными процессами) и должна быть секция неинициализированных данных, если таковые используются в программе! После выполнения этих и многих других условий хук на ~90% будет работать. Rascal Если x-code в меню добавил то, что хотел, то с остальным проблем тоже не будет, главное в этом деле голова и послушные руки. (так к слову море инфы в инете по сабжу!?) Rascal пишет: А на счёт твоих сорсов - не находишь, что твоя библа распологается в пространстве процесса, куда меню влепил??? Плагин грузится грубо и вкратцце, вот этой функцией CreateThread (и что тут можно обсуждать???) Rascal пишет: Пацталом, ай да насмешил!!!!!!!!!!!!! Дык, старался!!!! (просто намек сделал, если обе программы работают в кольце 3 то … ) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 05 августа 2006 18:18 · Личное сообщение · #10 ВСВ/Delphi на май взгляд для таких выкрутасов не крут ибо VCL, тут надо на winAPI пиасть. а если так уж хочется обрабатывать событие во внешнем приложении - просто заставить dll отсылать ему SendMessage'ом соответствующий мессадж, если нужно данные передать - отсылать юзерское сообщение и в параметрах передавать. ![]() |
|
Создано: 05 августа 2006 20:29 · Личное сообщение · #11 Demon666 пишет: Хук должен быть системный и в библиотеке Бред. Чтобы сделать хук библой отнюдь не должен быть системный хук. Кому как интересно загружать библу в чужой процесс, тот так и делает. Через хэндл окна и CreateRemoteProcess можно элементарно сделать и без SetWindowsHook Demon666 пишет: Плагин грузится грубо и вкратцце, вот этой функцией CreateThread (и что тут можно обсуждать???) Я о том, что библа чтобы перехватывать события определённого процесса должна быть в этом процессе. Ты советуешь : ЭЕсли добавил пункт в меню, значит, тебе известен хендл окна, берем, вставляем код в свое приложение" Такое работать не будет, вот о чём я Demon666 пишет: (просто намек сделал, если обе программы работают в кольце 3 то … ) Не понял. f0ma На счёт передачи параметров вариантов много - файл с CreateMutex рулит имхо. Ну а без апи тут янсн перец никак. Главное библу в чужой процесс загрузить (или в память процесса процедуру и ей CreateRemotreThread), перезадать функцию окна и работать любым привычным или удобным способом ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 05 августа 2006 21:17 · Личное сообщение · #12 Demon666 NewProc hWindow,Msg,wParam,lParam Msg == WM_COMMAND wParam == IDmenu (младшее слово) ---Обработчик--- CallWindowProc,hOldProc,hWindow,Msg,wParam,lParam этот вариант один из первых у меня был он не катит только для текущего приложения кто-нибудь поподробней может что-нибудь по советовать или дать какую нибудь ссылку ![]() |
|
Создано: 05 августа 2006 22:08 · Личное сообщение · #13 x-code пишет: этот вариант один из первых у меня был он не катит только для текущего приложения Этот вариант катит для текущего процесса, видимо хотел написать. Уже объяснили не раз - нужнно это написать в длл, а не в программе своей, и потом загрузить библу в чужой процесс. Тогда всё заработает. ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 06 августа 2006 00:09 · Личное сообщение · #14 Demon666 пишет: Хук должен быть системный и в библиотеке (если между разными процессами) и должна быть секция неинициализированных данных, если таковые используются в программе! Rascal пишет: Бред. Чтобы сделать хук библой отнюдь не должен быть системный хук. Rascal На счет хуков спорить не буду пусть rmn или Quantum выскажут свое мнение по этому поводу? (интересно послушать!) Rascal пишет: Уже объяснили не раз - нужнно это написать в длл, а не в программе своей, и потом загрузить библу в чужой процесс. Тогда всё заработает. из MSDN: The CreateRemoteThread function creates a thread that runs in the virtual address space of another process. Вопрос: нужно ли в этом случае создавать *.dll? ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 06 августа 2006 01:15 · Личное сообщение · #15 Demon666 пишет: Вопрос: нужно ли в этом случае создавать *.dll? Вообще создавать удалённый поток задумывается чтоб загрузить библу-хукер. Но если ты скопируешь в целевой процесс байткод, который будет корректно работать, то можно и без библы. Но это надо заметить изврат. Небольшие фрагменты кода элементарно, большие проще через библу делать ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 06 августа 2006 02:36 · Личное сообщение · #16 Rascal Короче вариантов данную задачу реализовать море из постов этой темы видно и приводить примеры реализации можно до бесконечности… Взять, к примеру, даже такой вариант в секцию кода, где находятся нули дописать свой код и сделать джамп из процедуры обработки сообщений от меню на этот код? (можно даже глубже капнуть.) ЗЫ: опять мы к секциям возвращаемся ;) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 06 августа 2006 03:09 · Личное сообщение · #17 |
|
Создано: 06 августа 2006 04:22 · Личное сообщение · #18 |
|
Создано: 06 августа 2006 10:02 · Поправил: Demon666 · Личное сообщение · #19 |
|
Создано: 06 августа 2006 17:25 · Личное сообщение · #20 library Hooklib; uses windows, messages; var Hk : HHOOK; OldWindowProc: Pointer; function NewWindowProc(WndHandle: hWnd; Msg, wParam, lParam: LongInt): LongInt; stdcall; begin if Msg = WM_COMMAND then begin if wParam = 3 then begin MessageBox(0,'URA','R',mb_iconhand) end; end; NewWindowProc := CallWindowProc(OldWindowProc, WndHandle, Msg, wParam, lParam); end; function Hook(cd, wParam, lParam : integer): Lresult; stdcall; var hw : hwnd; begin if cd >= 0 then begin case wParam of WM_LBUTTONUP: begin hw := HWND(FindWindow('TForm1', nil)); OldWindowProc := Pointer(SetWindowLong(hw, GWL_WNDPROC, LongInt(@NewWindowProc))); end; WM_MBUTTONUP: begin hw:=GetForegroundWindow; SetWindowText(hw,'Hello'); end; end; end else begin result := CallNextHookEx(Hk, cd, wParam, lParam); exit; end; result := CallNextHookEx(Hk, cd, wParam, lParam); end; procedure SetHook; begin if SetWindowsHookEx(WH_MOUSE, @Hook, hInstance, 0) = 0 then MessageBox(0,'???','ERR',mb_iconhand); end; procedure RemoveHook; begin UnhookWindowsHookEx(Hk); end; exports SetHook name 'SetHook', RemoveHook name 'RemoveHook'; end. Хук библ. вроде правильно написал, а вот подгрузить в чужой процесс не получается может кто-нибудь покажет не большой примерчик please... ![]() |
|
Создано: 06 августа 2006 17:55 · Личное сообщение · #21 x-code пишет: может кто-нибудь покажет не большой примерчик ...а может быть кто-нибудь впредь будет сперва пользоваться поиском...?? Вот один вариант http://www.rsdn.ru/?article/baseserv/IntercetionAPI.xml x-code пишет: Хук библ. вроде правильно написал ...что-то код больно знакомый -- не Фленов ли автор?? ----- the Power of Reversing team ![]() |
|
Создано: 06 августа 2006 18:49 · Поправил: x-code · Личное сообщение · #22 |
|
Создано: 06 августа 2006 19:42 · Личное сообщение · #23 |
|
Создано: 06 августа 2006 23:05 · Личное сообщение · #24 |
|
Создано: 07 августа 2006 01:00 · Личное сообщение · #25 Demon666 пишет: P. S. Хуки не используй! Quantum пишет: Тогда будет тормозить вся система. Quantum Во-во от этой точки зрениями отталкивался, советуя не применять хуки с уклоном на то, что в данной теме локальный хук не подойдет без... И попутно предложил альтернативный вариант. Demon666 пишет: Взять, к примеру, даже такой вариант в секцию кода, где находятся нули дописать свой код и сделать джамп из процедуры обработки сообщений от меню на этот код? (можно даже глубже капнуть.) ЗЫ: опять мы к секциям возвращаемся ;) Rascal Тебе вопрос и задавал (ты, наверное, не заметил)??? Ну, еще добавлю, как я для начала сделал бы, если мне нужно было такое реализовать: Я взял бы прогу kerberos (здесь на сайте можно скачать) и проанализировал код (так поверхностно видно то, что надо), если все OK, выдернул уже готовый и отлаженный код и пользуй на здоровье чем туторы читать, если не находим то, что нам нужно следующую берем и т. д. Если вообще нет вариантов, значит, ищем другой способ реализации данной задачи. ;) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 07 августа 2006 01:38 · Личное сообщение · #26 Demon666 пишет: если все OK, выдернул уже готовый и отлаженный код и пользуй на здоровье чем туторы читать, если не находим то, что нам нужно следующую берем и т. д. Если вообще нет вариантов, значит, ищем другой способ реализации данной задачи. ;) Плохому учишь ![]() ![]() ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 07 августа 2006 02:53 · Личное сообщение · #27 Rascal Вот ты любишь неизведанные тайны познать! Давай пример (как в прошлый раз типа ссылки на wasm) тогда и будем доказывать или опровергать? (от чего такая уверенность, что нужна библа?) Rascal пишет: Плохому учишь Почему плохому? Разве лазить в чужом коде для “самопознания” это плохо? ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 07 августа 2006 14:47 · Личное сообщение · #28 Demon666 пишет: Почему плохому? Разве лазить в чужом коде для “самопознания” это плохо? А чужой программой вытащить код разве чему-то нвучит, кроме как тулзой пользоваться? Demon666 пишет: Давай пример (как в прошлый раз типа ссылки на wasm) тогда и будем доказывать или опровергать? (от чего такая уверенность, что нужна библа?) Как ты представляешь себе загрузить код в чужой процесс? Расскажи, а я послушаю... Мож так дочухает до тя о чём я ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 07 августа 2006 22:13 · Личное сообщение · #29 |
|
Создано: 07 августа 2006 22:51 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Программирование —› Помогите назначить событие |