Доброго времени суток. Имеется клиент для ультимы онлайн. И имеется софтинка, внедряющая в него свою длл. Под виндой все прекрасно работает, а под вайном пока клиент не выплюнет мессагбокс она его не видит. Нашел идой кусок кода, который отвечает за проверку наличия файлов, убрал джампы, вставил нопы и вызов туда. В итоге мессагбокс стал вызываться раз 30 при старте А вопрос следующий. Если не заменять существующий код, а добавлять свой, что нужно сделать, чтобы не порушить екзешник ?
Осторожно предположу, что надо сделать следующее: 1) Прописать свой код в секцию кода библиотеки kernel32.dll 2) Ну, а потом из твоего экзешника из НЕОБХОДИМОГО тебе места прыгнуть на вновь прописанный участок кода. 3) А потом из того места, где вновь прописанный участок кода кончается, прыгнуть в экзешник, на НУЖНУЮ тебе инструкцию. Вот и получится, что ты и свой код добавил и экзешник не порушил. Но остаётся много деталей ещё
Офигенный совет. Может лучше всё-таки к своей dll секцию добавить и туда код пихать, а не системные библиотеки курочить?
Как "так"? Изменением kernel32? А тебя не смущает что эта библиотека грузится большинством процессов? Т.е. ты влияеш практически на все процессы в системе.
Осторожно (!) предположу, что эта бибблиотека грузится ВСЕМИ процессами Ну, может я не так объяснил что, но я когда перехватывал API-функцию, я именно так и делал. ...Так вы не забывайте, что свой код мы пишем в адресное пространство только ОДНОГО процесса. То есть изменён так будет только один процесс, а не два и не три. Это раз. Второе. Я сказал там, что деталей много. Одна из них- нужно найти КУДА ИМЕННО в kernel32.dll записать свой код. Предварительно нужно посмотреть в том же OLLYdBG свободное место. Можно такое место найти с помощью специальный API-функций, но я вручную делал. Так что, СТРОГО ГОВОРЯ, код kernel32.dll изменён не будет Но к имеющемуся коду kernel32.dll будет добавлен свой код. Вот в этой теме я описал подробно, сообщение номер 40
И при чём тут адресное пространство, если ты советовал секцию к kernel32.dll добавить? То о чём ты говоришь - это хук функции сплайсом. Он локальный для процесса. Если изменить kernel32.dll - изменения будут глобальны для всех процессов. А автору надо к своей готовой dll добавить код. Вот к ней и надо секцию добавлять, и писать туда нужный код.
нет Мне-то что. Хук так хук. Сплайсинг, так сплайсинг. А kernel32.dll как таковую, то есть на диске С я никогда изменять НЕ СОБИРАЛСЯ. А предложил то, что предложил и не более того. Именно в адресное пространство и именно процесса и именно по какому-нибудь из адресов с 7С801000h по 7С883000h. По какому именно см. сообщение номер 6.
amvoz Так ты не в тему пишешь. Если описание не всязанно и бессмысленно, то это бред. Зачем чтото писать в системные модуля, если можно в свой записать. Если понимается добавление кода в проекцию модуля, хотя в этом смысла и нет, то лучше будет память выделить и туда код записать. Почему именно эти адреса, чтож ты так в занятую память писать хочешь.. А может лучше в образ нтдлл вписаться, почемуже именно кернел Можно регион в свободном пространстве выделить. Для этого сервисы есть соответствующие.
А почему кернел а не нтдлл потому, что я не знаю, что такое нтдлл и с чем его едят. А о кернеле имею небольшое, но всё же представление.
Clerk Причина, насколько я понимаю, кривая реализация FindWindow в вайне. Одно приложение ставит хук на сообщения, а другое это сообщение шлет по идее должно попасть в этот хук(что под виндовсом и происходит). А вот с мессагбоксом попадает, поэтому и хочу его использовать.