ж-) Люди! Начитался я мануалов про перехват апи, решил попробовать. Создал Dll, перекрыл в ней нужные функции, потом прописал в AppInit_Dlls и оно заработало... но! при запуске приложений упакованных ASPack'ом они валятся... на остальных упаковщиках все нормально Каким образом можно это поправить ? кто-нибудь сталкивался с такими проблемами ???
Ms Rem Не, у меня GetProccessAddress и модификация памяти DLL (Пример №2 c WASM.RU про таблицу мне грозить не должно)... Причем валится он после попытки установить переход перехватываемой функции на мою (т.е. ставит, а потом дальше валик, если просто оттуда читать - все нормально) ... может как-то переходы вычисляются неверно ??? но винда после этого говорит что инструкция тра ля ля ушла по 0х000000 и не может быть read какие еще есть варианты ? (тока без пердложений потрейсить ASPack если можно )
Странно, со сплайсингом у меня никогда проблем не было ни с ASPack ни с ASProtect программами. Отладчик - лучший инструмент для рзбора таких случаев, но раз это не нужно предлагать, то могу предложить погадать на кофейной гуще
8-) не, ну все понятно, я просто в асме не так крут особенно в разборке упакованны\защищенных модулей *) Вчера даже попробовал подебажить ASPack но руки у меня кривые и OllyDebug разругался и вылетел *). ASPack точно никак там на функции не намудряет ? может кто подскажет чего еще ?
чтобы OllyDbg вылетел... это редкость. по поводу аспака - есть такая прога для прикручивания SOCKS к прогам, которые его изначально не поддерживают, называется FreeCap так вот у разработчика были траблы с Оперой как раз по причине аспака: см. http://www.freecap.ru/?p=buglist
8-) Всем спасибо, вопрос снимается Оказалось *) что некоторая функция в виндах иногда может возвращать NULL что в аспаковских поргах она часто делает *) баг нашелся после того, как вывалилась неупакованная прога *) Короче баг мой Jupiter Оля вылетал не с валиком а просто говорил что точка входа где то в другой программе, а явно не в этой Еще раз всем спосибо!
Ms Rem ты на комменты к своим статьям когда-нить отвечаешь ?... Скажи, библиотека по AppInit_Dlls загружается после USER32.dll или после загрузки всех статических библиотек процесса ?
Ms Rem Странно, я в DllMain делаю GetModuleHandle("SHELL32.DLL") и он иногда там уже есть Библиотеки по моему логическому сценарию должы загружаться как ntdll kernel user32 и т.п. *) Да, вопрос, можно ли перехватывать LoadLibrary ? у меня после этого некоторые апликашки просто не грузятся хотя функция просто тупо вызывает оригинал. Просто необходимо перехватить несколько функций в других либах, но так криво получается что на LoadLibrary я допустим могу перехватить частично, а в сетуации когда процесс грузится и загружает USER, а потом меня, то библиотеки за USER еще не загружены, а узнать кто загружался я смогу только по таблице импорта ??? но опять же когда я буду их ловить ? в MSDN написано что в DllMain нельзя грузить либы?.. как лучше сделать не подскажешь ?
Ничего странного, просто в импортах приложения shell32.dll значит стоит раньше чем user32. Значит криво перехватываешь. Я для отслеживания загрузки библиотек ловлю LdrLoadDll.
Ms Rem А можно сделать так ??: 1. при загрузке своей dll получить путь к exe и в нем получить путь к WinMain 2. перекрыть WinMain на себя 3. подождать пока туда придет управление прекрыть все загруженные dll и перекрыть LdrLoadDll (и функцию для выгрузки имя которой я не знаю) 4. отдать управление WinMain ? Так можно засубкласить любые функции в загруженных либах, которые загрузчик загрузил ? (масло масляное). или загрузчик на каждой либе вызывает LdrLoadDll в моем процессе ?
Можно, но в этом случае во время инициализации библиотек они могут вызвать еще непохуканые апи. Лучше перехватывать LdrLoadDll и LdrUnloadDll и отслеживать загрузку/выгрузку библиотек.
Ms Rem Ну как я понял - так уже и получается. с AppInit_Dlls оказалась идея плохая user32 при загрузке там внутри как-то инициализируется, после чего грузит мою либу, а мне надо перехватить функции до инициализации, т.к. после нее уже бестолку. Видимо придется учиться писать драйвера ... Пошли меня в какое-нить определенное место, где понятно написано как загружается система (желательно на русском). p.s. в яндекс не посылать *)