Помогите чайнику добавить в exe-шник вызов мессагбокса.

Тема в разделе "WASM.BEGINNERS", создана пользователем Zolen, 4 авг 2009.

  1. Zolen

    Zolen New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2009
    Сообщения:
    2
    Доброго времени суток. Имеется клиент для ультимы онлайн. И имеется софтинка, внедряющая в него свою длл. Под виндой все прекрасно работает, а под вайном пока клиент не выплюнет мессагбокс она его не видит.
    Нашел идой кусок кода, который отвечает за проверку наличия файлов, убрал джампы, вставил нопы и вызов туда. В итоге мессагбокс стал вызываться раз 30 при старте :)
    А вопрос следующий. Если не заменять существующий код, а добавлять свой, что нужно сделать, чтобы не порушить екзешник ?
     
  2. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Осторожно предположу, что надо сделать следующее:

    1) Прописать свой код в секцию кода библиотеки kernel32.dll
    2) Ну, а потом из твоего экзешника из НЕОБХОДИМОГО тебе места прыгнуть на вновь прописанный участок кода.
    3) А потом из того места, где вновь прописанный участок кода кончается, прыгнуть в экзешник, на НУЖНУЮ тебе инструкцию.

    Вот и получится, что ты и свой код добавил и экзешник не порушил.
    Но остаётся много деталей ещё
     
  3. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Офигенный совет.
    Может лучше всё-таки к своей dll секцию добавить и туда код пихать, а не системные библиотеки курочить?
     
  4. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Как хотите, так и делайте. У меня так получалось.
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Как "так"? Изменением kernel32?
    А тебя не смущает что эта библиотека грузится большинством процессов?
    Т.е. ты влияеш практически на все процессы в системе.
     
  6. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Осторожно (!) предположу, что эта бибблиотека грузится ВСЕМИ процессами
    Ну, может я не так объяснил что, но я когда перехватывал API-функцию, я именно так и делал.

    ...Так вы не забывайте, что свой код мы пишем в адресное пространство только ОДНОГО процесса.
    То есть изменён так будет только один процесс, а не два и не три.
    Это раз. Второе.
    Я сказал там, что деталей много. Одна из них- нужно найти КУДА ИМЕННО в kernel32.dll записать свой код.

    Предварительно нужно посмотреть в том же OLLYdBG свободное место. Можно такое место найти с помощью специальный API-функций, но я вручную делал.

    Так что, СТРОГО ГОВОРЯ, код kernel32.dll изменён не будет
    Но к имеющемуся коду kernel32.dll будет добавлен свой код.
    Вот в этой теме я описал подробно, сообщение номер 40
     
  7. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Вот эта тема
    http://www.wasm.ru/forum/viewtopic.php?id=33178&p=2
     
  8. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    И при чём тут адресное пространство, если ты советовал секцию к kernel32.dll добавить?
    То о чём ты говоришь - это хук функции сплайсом. Он локальный для процесса.
    Если изменить kernel32.dll - изменения будут глобальны для всех процессов.

    А автору надо к своей готовой dll добавить код.
    Вот к ней и надо секцию добавлять, и писать туда нужный код.
     
  9. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    нет

    Мне-то что. Хук так хук. Сплайсинг, так сплайсинг.
    А kernel32.dll как таковую, то есть на диске С я никогда изменять НЕ СОБИРАЛСЯ.
    А предложил то, что предложил и не более того. Именно в адресное пространство и именно процесса и именно по какому-нибудь из адресов с 7С801000h по 7С883000h. По какому именно см. сообщение номер 6.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    amvoz
    Бред говоришь.
    Zolen
    Что понимать под "не видит" и причина этого какая ?
     
  11. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    ClerkОскорбить человека может каждый...
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    amvoz
    Так ты не в тему пишешь. Если описание не всязанно и бессмысленно, то это бред.
    Зачем чтото писать в системные модуля, если можно в свой записать. Если понимается добавление кода в проекцию модуля, хотя в этом смысла и нет, то лучше будет память выделить и туда код записать.
    Почему именно эти адреса, чтож ты так в занятую память писать хочешь.. А может лучше в образ нтдлл вписаться, почемуже именно кернел :)
    Можно регион в свободном пространстве выделить. Для этого сервисы есть соответствующие.
     
  13. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Блин, я как делал, так и сказал. У меня получалось, что ещё надо.
     
  14. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    А почему кернел а не нтдлл потому, что я не знаю, что такое нтдлл и с чем его едят. А о кернеле имею небольшое, но всё же представление.
     
  15. Zolen

    Zolen New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2009
    Сообщения:
    2
    Clerk
    Причина, насколько я понимаю, кривая реализация FindWindow в вайне.
    Одно приложение ставит хук на сообщения, а другое это сообщение шлет по идее должно попасть в этот хук(что под виндовсом и происходит). А вот с мессагбоксом попадает, поэтому и хочу его использовать.