Подмена таблицы импорта
От: PanychY  
Дата: 25.04.16 20:24
Оценка:
Приветствую, коллеги

Есть такая проблема:
Хост приложение app.exe, в импортах у него modA.dll и modB.dll, которые в свою очередь зависят от modC.dll . Проблема в том появилась несостыковка в вариантах modC.dll с которыми дружат modA.dll и modB.dll на уровне таблиц экспорта: modA.dll хочет ProcX, а modB.dll хочет ProcY из modC.dll(помимо других экспортов). Оба вариант modC.dll есть, но заставить их работать в одном процессе — не получится, работает только один.
Хочу решать так: оставляю modA.dll и подходящий ему modC.dll, переименовываю modC.dll подходящий для modB.dll в modC2.dll, и тут мне не хватает инструмента: нужно похимичить над таблицей иморта modB.dll так чтобы перенапрвить поиск символов в modC2.dll. Собственно инструмент в розыске: умеет добавить новую библиотеку импорта и перенаправить туда несколько символов из существующей.

Сразу говорю: modC.dll модифицировать не получится, как и modA.dll и modB.dll (исходников нету), можно только препарирование на уровне PE-образа.

Нагуглить что-то пока ничего не удается.

Спасибо
pe iat import export dll tool
Re: Подмена таблицы импорта
От: CEMb  
Дата: 26.04.16 03:18
Оценка: +1
Здравствуйте, PanychY, Вы писали:

PY>Хочу решать так: оставляю modA.dll и подходящий ему modC.dll, переименовываю modC.dll подходящий для modB.dll в modC2.dll, и тут мне не хватает инструмента: нужно похимичить над таблицей иморта modB.dll так чтобы перенапрвить поиск символов в modC2.dll. Собственно инструмент в розыске: умеет добавить новую библиотеку импорта и перенаправить туда несколько символов из существующей.


Первым делом я был переименовал не в modC2.dll а в modD.dll, заменил 1 букву в имени. Потом открыл modB.dll, нашёл бы там по имени modC.dll и по всему тексту заменил бы на modD.dll
А уж потом бы колдовал с таблицей импорта (причём так же), если не получится.
Re[2]: Подмена таблицы импорта
От: PanychY  
Дата: 26.04.16 08:05
Оценка: -1
Здравствуйте, CEMb, Вы писали:

CEM>Первым делом я был переименовал не в modC2.dll а в modD.dll, заменил 1 букву в имени. Потом открыл modB.dll, нашёл бы там по имени modC.dll и по всему тексту заменил бы на modD.dll

CEM>А уж потом бы колдовал с таблицей импорта (причём так же), если не получится.

Не получится. В modC2.dll(modD.dll) три сотни экспортов, и не хватает 3 функций. Пусть те что есть смотрят на modC.dll оригинальный, а недостающие — отдельным модулем(тем более они по ходу дела stateless.

Т.е. по сути есть зависимость с которой слинковались с новой версией, а по ходу работы есть старая(потому что какой-то другой модуль уже её подтянул). Нужен шим, но не на весь модуль, а на набор недостающих функций.
Re: Подмена таблицы импорта
От: saf_e  
Дата: 26.04.16 15:47
Оценка:
Здравствуйте, PanychY, Вы писали:

PY>Приветствую, коллеги


PY>Есть такая проблема:

PY>Хост приложение app.exe, в импортах у него modA.dll и modB.dll, которые в свою очередь зависят от modC.dll . Проблема в том появилась несостыковка в вариантах modC.dll с которыми дружат modA.dll и modB.dll на уровне таблиц экспорта: modA.dll хочет ProcX, а modB.dll хочет ProcY из modC.dll(помимо других экспортов). Оба вариант modC.dll есть, но заставить их работать в одном процессе — не получится, работает только один.
PY>Хочу решать так: оставляю modA.dll и подходящий ему modC.dll, переименовываю modC.dll подходящий для modB.dll в modC2.dll, и тут мне не хватает инструмента: нужно похимичить над таблицей иморта modB.dll так чтобы перенапрвить поиск символов в modC2.dll. Собственно инструмент в розыске: умеет добавить новую библиотеку импорта и перенаправить туда несколько символов из существующей.

PY>Сразу говорю: modC.dll модифицировать не получится, как и modA.dll и modB.dll (исходников нету), можно только препарирование на уровне PE-образа.


PY>Нагуглить что-то пока ничего не удается.


PY>Спасибо


Если можете грузить modA.dll и modB.dll динамически — тогда их можно положить в разные папки и использовать LoadLibraryEx для загрузки.
Если нет — можно все равно положить в разные папки и потанцевать с бубном вокруг private assembly manifest, но тут я вам не помощник
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.