Одна новая строчка кода в ExE

Тема в разделе "WASM.BEGINNERS", создана пользователем jack, 7 авг 2006.

  1. jack

    jack New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    4
    Добрый время суток уважаемые Гуру.
    Буду описывать проблему по существу.

    Цель: дописать в начало выполняемого кода программы строчку которая будет запускать уже присутствующую в exe-нике импортируемую функцию.
    call dword ptr [4700d0]

    Возможные пути решения:
    1) Воспользоваться Win32 Dasm пропатчить какую-то ненужную строку и изменить ее Hex-редактором.
    ВОзникаемая проблема: как найти такую строку замена которой не отражалась бы на работоспособности программы

    2) Дописать каким-то образом новую строчку кода после точки входа в программу
    ВОзникаемая проблема: Во-первых незнаю как это сделать, Во-вторых поидее все адреса нужно будет как-то смещать что-ли

    3) Возможно существуют уже готовые утилитки по дописанию одной асемблерной строчки после позиции "Входа в рограмму" и последующей ее корректной сборки

    Суть такого мероприятия:Для одной программы нужно сделать так чтобы она запускалась только при определенных условия иначе завершалась. Решение нашел такое: создал DLL где будет происзодить проверка этого самого условия, далее при помощи утилитки IID King дописал в импортируемую область мою функцию проверки из DLL, теперь нужно запустить эту проверку в начале программы.

    Заранее благодарю за помощь.
     
  2. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Ищешь нули в файле, пишешь туда нужную команду, после нее делаешь джапм на оригинальную точку входа, изменяешь точку входа на адресс своей команды.
     
  3. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    -ищеш в файле цепочку нулей(или добавляеш новую секцию)(есть утилита для этого название забыл)
    -смотриш значения точки входа запоминаеш его
    -в свободное место дописываеш + переход на оригинальную точку входа
    -исправляеш значение точки входа на RVA своего кода
     
  4. jack

    jack New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    4
    А при помощи каких программ все это делать ? Можно описать все более подробно - я ведь специально написл в раздел WASM.BEGINNERS поскольку с таким видом деятельности раньше не сталкивался. Мне всего лишь нужно это сделать для одной программы.
     
  5. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    в принципе хватит hiew и для поиска свободного места, и для написания кода
     
  6. PE_Kill

    PE_Kill New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    107
    Да нафиг всё это надо? Если ты добавил новый импорт то твоя библа будет на автомате грузится при запуске приложения. Вот и вызови свою функцию на DllMain.
     
  7. jack

    jack New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    4
    :) Ну так объясните как это сделать. Я же говорил что с этим все делом не знаком. С ассемблером да и со всем этим деасемблированием знаком на очень низком уровне знаний.
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    при запуске проги стартует dllmain твоей библиотеки, если либа есть в импортах
     
  9. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Длл ты писал ? Если да, тогда все нужные действия можно делать в процедуре DllMain, без заморочек с правкой файла.
     
  10. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    в DllMain выполни свою проверку, если все ОК, верни управление (выйди через ret) если не ОК - вызови ExitProcess
     
  11. jack

    jack New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    4
    DLL я писал. Теперь все понял... DLLMain вызывается при инициализации импортныйх библиотек.
    Ну что ж сейчас попробую... так должно быть даже проще.

    спасибо всем за советы.