| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Inject Dll To Explorer |
| Автор: Hacker 2.6.2006, 13:00 | ||||
| Внедряю свою ДЛЛ-ку в explorer, проблема в том что почему-то под Win2000 код не работает, я не понял, или он не туда внедряется, или проблема в перехвате функций... Вот Injector - часть кода из EXE
А вот ДЛЛ-ка, она должна выводить мессаги, когда проводник запускает какую-нибудь прогу
Код ДЛЛ-ки гдето тут на форуме взял, не могу теперь найти где... Либо инжектится она не в експлорер, либо хуки не работают, не понимаю... под XP SP2 Prof всё летает на ура, под SP1 вроде тоже не работает... Есть ли универсальный инжект, для любой винды (ну 98 можно не учитывать p.s. Сейчас проверил - инжектится туда куда надо, значит проблема с хуками... |
| Автор: Hacker 2.6.2006, 18:13 | ||||
Вот кое что накопал... выходит здесь:
Неужели никто не в курсе??? Вот я нашёл одну вешь из-за которой это может быть:
Взято http://www.rsdn.ru/article/baseserv/apicallsintercepting.xml Вот только там всё на сях, ничерта не понял... |
| Автор: Rouse_ 2.6.2006, 22:26 |
| Лови демку, если не разберешся как пользоваться - зови. Краткое описание: данная библиотека выполненна в виде расширения оболочки и реализует дополнительную закладку при открытии свойств любого исполняемого файла. В закладке отображаются все экспортируюмые и импортируемые функции выбранного объекта... Чуток сырая, под 2000 не затачивал, нет времени, но по идее должна работать... Коментариев пока мало... нет времени... |
| Автор: Rouse_ 2.6.2006, 22:58 | ||
| Да, чуть не забыл для чего выложил демку Обрати внимание на следующий код в модуле DumpUtils.pas
Дело в том что по стандарту таблица должна быть расположена во смещению Image^.Union.OriginalFirstThunk (она же Image^.Union.Characteristics) а также ее дубликат должен храниться в Image^.FirstThunk. НО!!! По стандарту ссылки на функции получают через Image^.FirstThunk, поэтому Борланд просто вырезала OriginalFirstThunk, для которой пишется большинство примеров (а они обычно под С++, где данная таблица заполнена), поэтому данные примеры, не обращая внимания на стандарт обращаются для перечисления к OriginalFirstThunk (что есть не верно) и на программах, написанных на Дельфи, попросту не работают... |
| Автор: Hacker 3.6.2006, 18:43 | ||||||
| Посмотрел коды... немного даже понял... спасибо! Сегодня опять весь день мучился с этими хуками... вот что вышло: Ставит хук, но при запуске любого процесса Explorer'ом выдаётся ошибка... то есть на место той функции что-то записывается, но что-то не то... Вот код:
Устанавливаю так:
Функция - перехватчик:
Объясните пожалуйста что я делаю не так??? |
| Автор: Rouse_ 3.6.2006, 23:31 |
| Уважаемый Hacker, вам как в пустой колодец лить... Только обьяснил как второй раз на грабли не наступить, так Вы опять за старое... Приведенный код читали? Если читали, то хоть поделитесь тем что вы из него не поняли? Объясню... |
| Автор: Hacker 4.6.2006, 13:05 |
| Интересует естественно функция GetImportTable и её переделка под запись в память процесса... Чтобы можно было параметрами ей передать указатели на TargetFunction и NewFunction и указатель на процесс в памяти... |
| Автор: Rouse_ 4.6.2006, 17:31 |
| Вот это твой вариант А вот это мой вариант: FuncAddr := PChar('0x' + IntToHex(DWORD(Thunk^.AddressOfData), 8)); Найди два различия Потом, где проверка на (DWORD(Thunk^.Function_) and IMAGE_ORDINAL_FLAG) = IMAGE_ORDINAL_FLAG В третьих обради внимание на GetDelayImportTable |
| Автор: Hacker 4.6.2006, 18:56 | ||||||||
Так?
в C++ эта строка вообще была:
А вот это вообще тёмный лес Вот на C++ этот код - что-то я криво перевёл...
|
| Автор: Rouse_ 5.6.2006, 08:28 |
| Посмотри вот тут http://forum.vingrad.ru/index.php?showtopic=94601&view=findpost&p=721643 |
| Автор: Rouse_ 5.6.2006, 15:33 | ||||||
Хм, антивирей не стоит случаем? они могут тушить такие попытки...
Собираешь библиотеку, потом делаешь
Чтобы деинсталировать:
|
| Автор: Hacker 5.6.2006, 16:07 |
Нет, это исключено, я же своим кодом проверял, работает, а этот не хочет... PS: Установил PEDump, полезная штука, спасибо! |
| Автор: Yanis 5.6.2006, 17:51 | ||
Rouse_ Привет. Извиняюсь за оффтоп, но .... . Всё таки на delphimaster ты меня так и не послушал и, как мне показалось, проигнорировал. А я говорил, что при просмотре закладки "импорта/экспорта", падает Explorer при перерисовке Label "Импорт". Если всё таки стало интересно, то напиши пожалуйста в PM и стукни в ICQ. Добавлено @ 17:59 Поправочка. Label "Экспорт". |
| Автор: Rouse_ 5.6.2006, 19:28 | ||||||
Я не проигнорировал Хотя может дело в том, что при отсутствии экспорта данный элемент скрывается... Ммм, не знаю, если не в этом, то тут явно что-то глубже. Кстати, ты под какой системой проверял? Добавлено @ 19:30
Как появиться время, попробую поэксперементировать что там не работает у тебя... Добавлено @ 19:43 Yanis, проверь вот такой вариант:
Кстати, тут нехилая утечка памяти на GetStockObject, его вызов нужно вынести в WM_INITDIALOG и сохранить в внешней переменной, а по WM_DESTROY разрушить через DeleteObject... Говорю же, сыровато чуть... Нет времени дорасти до полноценной демки |
| Автор: Yanis 5.6.2006, 19:45 | ||||
WinXP sp2 английская версия с руссификатором, но язык тут роли не играет. Стили оформления включены.
Странно уже, то что этот случай не единичный и повторился именно у меня
из модуля PropSheet, то всё работает нормально |
| Автор: Rouse_ 5.6.2006, 19:48 |
| Хм, системы у нас одинаковые, только у меня чистая без всяких русификаторов... Попробуй изменить код, как я показал... |
| Автор: Yanis 5.6.2006, 19:58 |
| Веришь или нет так ещё хуже =) Даже не знаю, ты наверное думаешь, что у меня руки кривые но так или иначе поиграв с окошком я могу добиться критической ошибки P. S. С изменённым, как ты показал, кодом улучшений замечено небыло. Незнаю чем тебе помочь, видео что ли записать.... |
| Автор: Rouse_ 5.6.2006, 20:10 |
| Ммм, видео конечно не надо... Как приеду с Киева - сварганю демку с выводом логов и свяжусь с тобой - будем искать где руки выпрямить |
| Автор: Rouse_ 6.6.2006, 11:00 |
| Разобрались мы с Yanis-ом в причинах глюка. Данная ошибка проявиться при включенной проверке на выход за пределы диапазона. Потому, кто будет в дальнейшем собирать в начале кода объявите директиву {$R-}... |
| Автор: Yanis 6.6.2006, 11:04 |
| Итак... Отдельно. Rouse_ Спасибо за разборку. В общем благодаря Rouse_'у мы вяснили суть проблемы, которая меня (странно, что меня одного) мучала. Достаточно было отключить в опциях компилятора проверку выходов за границу (Project -> Options -> закладка Compiler -> Опция Range Checking) как всё сразу заработало по задуманному варианту |
| Автор: supersonic 8.9.2006, 11:29 |
| А у меня проблема с инжектом длл в explorer.exe когда моя dll детачится сразу же после аттача |
| Автор: Firster 18.8.2007, 00:09 |
| Ребята, помогите пожалуйста. Нужна консультация в таком вопросе. Поставлена задача определить запуск приложения в Винде. Вариант использования таймера, пожалуйста, не предлагать. Я обходил множество форумов в поиске решения. Предлагают сделать перехват CsrClientCallServer в файле csrss.exe. Есть еще вариант внедрения во все запущенные процессы CreateProcess. Перелопал кучу кода. Голова уже забита всякой ерундой. Если кто-нибуть сталкивался с этим НАПРАВЬТЕ НА ПУТЬ истинный. Заранее ОГРОМНОЕ СПАСИБО. |
| Автор: ne0n 18.8.2007, 00:46 | ||
Firster, во первых зачем поднимать старую тему, которой уже почти год(не поленился бы создать свою)...а во вторых
это че такое??? может быть перехват CreateProcess?! господи в сети полно примеров перехвата!!! Блин пораб линки на статьи мс-рема куданибудь в шапку внести.... вот тебе чтиво:http://www.wasm.ru/article.php?article=apihook_1 |
| Автор: Firster 18.8.2007, 13:32 |
| спасибо за помощь... |
| Автор: Firster 19.8.2007, 00:46 | ||
| ne0n, дружище просвети меня еще раз, пожалуйста. Взял исходник у Ms-Rem. Вставил в него обработку CreateProcess. Так вот. перехват происходит, но далее вылетает ошибка. Может подскажешь что-нить. Любые мысли по этому поводу приветствуются. Заранее спасибо.
|
| Автор: Firster 21.8.2007, 00:32 | ||
Если еще кто-нить столкнется с такой проблемой, посоветую перехватывать ZwCreateThread. Т.е. в вышеприведенном коде нужно заменить ZwCreateProcess на ZwCreateThread и все будет ОК. Спасибо ne0n за напутствие.
|
| Автор: ne0n 21.8.2007, 17:57 |
| Firster, всегда рад помоч! |
| Автор: Firster 25.8.2007, 22:04 |
| Опять проблема ne0n. Не могу прилепить ДЛЛ к эксплореру. Ко всем другим процессам в системе Инжект происходит нормально. А вот к ЭКСПЛОРЕРу не хочет. Может опять на тропинку поставишь....Заранее спасибо |
| Автор: ne0n 25.8.2007, 22:37 |
| Firster, а ты как библиотеку инжектишь?! |
| Автор: Firster 25.8.2007, 22:48 | ||
Библиотеку инжекчу из ЕХЕ-файла.
|
| Автор: ne0n 25.8.2007, 22:54 |
| hProc значение проверял...не нулевое?! |
| Автор: Firster 25.8.2007, 22:58 | ||
Вот процедура, которая при загрузке приложения по OnCreate вызывается.
Добавлено через 2 минуты и 46 секунд Пишет, что вроде бы ИНЖЕКТ установлен нормально, но реально НЕТ. Например, если ВинКомандер запущен, то ДЛЛ отлавливает запуск из него ЕХЕшников. А ЭКСПЛОРЕР молчит.... |
| Автор: ne0n 25.8.2007, 23:02 |
| попробуй InjectDllAlt...а вообще лучше внедрять через ловушки! |
| Автор: Firster 25.8.2007, 23:07 |
| зависает Добавлено через 15 секунд буду пробовать через ДЛЛ |
| Автор: ne0n 25.8.2007, 23:09 |
| Firster, так библеотека внедрена или нет?! (а вообще внедряться во все подряд нельзя...система может рухнуть) |
| Автор: Firster 25.8.2007, 23:30 |
| Библиотека внедряется через InjectDll(hProc, 'HookLib.dll'). В ней заложены функции перехвата АПИ функций. Добавлено через 1 минуту и 21 секунду и при перехвате вызова АПИ-функции она отправляет сообщение проге. Вот так я узнаю, что в системе запущен очередной процесс (программа) |
| Автор: Firster 26.8.2007, 19:05 | ||
| neOn, ты не поверишь, но получилось!!! Все согласно старой мудрости: "Если ничего не получается начни сначала...вернись к истокам!". И вот вернулся вhttp://forum.vingrad.ru/forum/topic-98842.html#st_0_view_0 а вот этот код у меня заработал:
хуки работаю как часики.... Спасибо Hacker за исток и neOn за поддержку! |