Как написать свою DLL вместо оригинальной или управлять ориг. DLL?

Тема в разделе "WASM.WIN32", создана пользователем _Oleg_, 29 дек 2008.

  1. _Oleg_

    _Oleg_ New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2008
    Сообщения:
    3
    Есть интересная программа, которая делает нужные мне вычисления. Параметры вычислений задаются в основном модуле программы (.ехе), реально все вычисления делает пяток функций одной из ДЛЛ этой программы (функция инициализации памяти и собственно основной запуск алгоритма подсчета). Всего в ДЛЛ около 20 функций (нужны 3-5 шт). Мне нужно прогнать вычисления, введя кучу собственных параметров, которые в проге нельзя ввести через интерфейс. Через бряк на функциях запуска РУКАМИ очень легко тормознуть прогу, подправить параметры и запустить прогу дальше, чтобы та родила ответ по моим параметрам. Нужно как-то программно это сделать. Причем сложность не только в самом вводе параметров, а еще желательно вклиниваться в программу, когда там УЖЕ произошла инициализация памяти и ДЛЛ готова к расчетам по входным параметрам. Иначе основная функция ничего не посчитает и естественно просто упадет.

    Мне бы хотелось реализовать один из следующих вариантов, но знаний и опыта маловато:

    а) написать свою софтину, которая после запуска и инициализации оригинальной программы смогла бы вызвать в DLL (в чужом процессе) основную функцию с моими параметрами и считать ответ. Читать память чужого процесса умею, а вызывать к исполнению чужие функци, ставить бряки как отладчик - пока не умею. Найти процесс по номеру и адреса функций (или нужных блоков памяти) сканированием памяти всей памяти - легко (программно).

    б) написать (на С++ или асме) свою ДЛЛ, которую я бы подсунул вместо оригинальной ДЛЛ. Моя прога ничего не делает, кроме как грузит оригинальную ДЛЛ и вызовы всех функций туда передает. Просто транслирует вызовы функций с аргументами в стеке дальше, типа "ДЛЛ-прокси". Если бы получилось, то моя ДЛЛ ждет вызова основной функции в оригинальной ДЛЛ (к этому моменту вся память уже инициализирована), а далее запускает основную функцию уже по собственной инициативе, не отправляя никуда результат. Сам же результат оригинальная ДЛЛ запишет поверх старого результата куда-то в память основной программы, что без труда можно считать (будет передан какой-то указатель на блок). Итого оригинальня прога вызовет основную функцию один раз, один раз получит ответ, но в середине между этими действиями я прогоню свои вычисления на всем готовеньком. Существует ли способ не вдаваясь в подробности тупо по алгоритму написать ДЛЛ-прокси? Типа смотрим все 20 функций ДЛЛ, смотрим кол-во параметров в стеке и так же без разбора все передаем в подключенную к моей софтине ДЛЛ. Реален ли этот вариант? Дописывать свой код прямо в чужой ДЛЛ не умею.

    в) этот вариант не рассматриваю, т.к. мало реален, но все же... Можно написать свою софтину, которая подключит оригинальную ДЛЛ и сама все функции вызовет (естественно, правильно инициализировав данные). И крайне не реально понять алгорим расчета, проведя дизасемблирование кода, чтобы потом аналог на С++ накатать...

    Посоветуйте, какой наиболее простой вариант достижения резльзульта? Может иные варианты есть?
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    у меня дежавю или этот пост я уже читал ранее
     
  3. _Oleg_

    _Oleg_ New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2008
    Сообщения:
    3
    Да, читал, на другом сайте. Только никто за неделю мне не ответил :dntknw:
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    для начала
    http://www.reng.ru/tools/001/dllww.htm
    и другие подобные статьи
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    _Oleg_
    Вместо оригинального подставить новый модуль c такимже именем как у оригинального, который будет экспортировать такиеже функции как оригинальный модуль и импортировать функции из оригинального в простейшем случае если самопроверок там никаких нет на это.
     
  6. Genisimus

    Genisimus New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2009
    Сообщения:
    1
    Ну как получилось? У меня такая же задумка. Может скооперируемся?
     
  7. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    а что тут делать-то.. ненужные функции через форвардинг, нужные через свои переходники, хоть на С++ пиши %)