Привет всем!
В WebMoney Keeper в папке KSP есть файл Enum.dll...
Хочу сделать чтоб при заменене этой длл моей, она работала...
Открыл Enum.dll в хекс редакторе, нашел имена экспортируемых функций, сделал свою длл с такими именами, неработает
Помогите разобраться в чем дело...
"x3r0n" <63143@users.rsdn.ru> wrote in message news:2328492@news.rsdn.ru... > Открыл Enum.dll в хекс редакторе, нашел имена экспортируемых функций, сделал свою длл с такими именами, неработает > Помогите разобраться в чем дело...
Хитрый какой. А параметры? А соглашения о вызовах? Предвидя вопрос а как их узнать, ответ — использовать дизассемблер (типа IDA).
Здравствуйте, x3r0n, Вы писали:
X>Привет всем! X>В WebMoney Keeper в папке KSP есть файл Enum.dll... X>Хочу сделать чтоб при заменене этой длл моей, она работала... X>Открыл Enum.dll в хекс редакторе, нашел имена экспортируемых функций, сделал свою длл с такими именами, неработает X>Помогите разобраться в чем дело...
А пробовал когда-нибудь в Windows-е все dll-ки на свои заменить? Попробуй, может запустится..
Расскажи, откуда возникла такая постановка задачи?
D>А пробовал когда-нибудь в Windows-е все dll-ки на свои заменить? Попробуй, может запустится..
Это нагон?
D>Расскажи, откуда возникла такая постановка задачи?
D>И почему пишешь в этот форум?
Я думал это форум по программированию...
Если бы я создал свой топик например на форуме про шкурки тушканчиков,
тогда бы твой вопрос я думаю,был бы актуален...
Здравствуйте, x3r0n, Вы писали:
D>>А пробовал когда-нибудь в Windows-е все dll-ки на свои заменить? Попробуй, может запустится.. X>Это нагон?
Я даже расстерялся, пойду расширять словарный запас..
Лучше ответь на этот вопрос: D>>Расскажи, откуда возникла такая постановка задачи?
D>>И почему пишешь в этот форум? X>Я думал это форум по программированию... X>Если бы я создал свой топик например на форуме про шкурки тушканчиков, X>тогда бы твой вопрос я думаю,был бы актуален...
Этот форум по программированию на Delphi/Builder-е, а не по реверс-инжинирингу.
Скажи хоть, сколько мегабайт dll-ка весит. Пожелаем тебе удачи в её эмуляции
Здравствуйте, Dimonka, Вы писали:
D>Этот форум по программированию на Delphi/Builder-е, а не по реверс-инжинирингу. D>Скажи хоть, сколько мегабайт dll-ка весит. Пожелаем тебе удачи в её эмуляции
Здравствуйте, x3r0n, Вы писали:
X>Здравствуйте, Dimonka, Вы писали:
D>>Этот форум по программированию на Delphi/Builder-е, а не по реверс-инжинирингу. D>>Скажи хоть, сколько мегабайт dll-ка весит. Пожелаем тебе удачи в её эмуляции
X>Dll весит 200 килобайт, в ней 5 функций...
Милый, мой родной, это не важно сколько там функций, важно то что она подымает COM обьекты.
Вот эта вот функция DllGetClassObject и есть твой главнейший минингит.
Попробуй через Imprort Type Libary взять информацию что в этой библиотеке валяется Тебе очень повезет если там будет только один обьект
Здравствуйте, x3r0n, Вы писали:
X>Привет всем! X>В WebMoney Keeper в папке KSP есть файл Enum.dll... X>Хочу сделать чтоб при заменене этой длл моей, она работала... X>Открыл Enum.dll в хекс редакторе, нашел имена экспортируемых функций, сделал свою длл с такими именами, неработает X>Помогите разобраться в чем дело...
Я думаю, что даже если ты все функции сэмулируеш, работать нормально она не будет. Делов том, что WM гадость злостная. Она так в систему "интегрируется", что аяяй. К примеру под виртуальной машиной уже не работет. Поэтому прийдётся много править ещё кода. Гдето на xakep.ru был обзор этого чуда.
WebMoney Keeper работает без этой длл, просто пропадает некоторый функционал...
Если заменить настоящую длл моей(код который я выкладывал) то моя длл не выполняется(месадж боксы не вылазят).
Можно ли сделать длл-ку, которая бы при замене смогла например показать мессадж бокс? Если да то как?
Знаю точно, что первая функция которая в этой длл выполняется: DllGetClassObject...
Вот тебе мой дельный совет.
Для начала, напиши обыкновенную прокси dll.
В своей dll перенаправляй вызовы в оригинальную dll,
после чего, после того как заработает, делай всё остальное...
Здравствуйте, dkotov, Вы писали:
D>Вот тебе мой дельный совет. D>Для начала, напиши обыкновенную прокси dll. D>В своей dll перенаправляй вызовы в оригинальную dll, D>после чего, после того как заработает, делай всё остальное...
Вы имеете ввиду, создать длл перенаправляющую все вызовы через себя к другой _моей_ длл?
Это я сделал... Только не получается _правельно_ вызвать функции из Enum.dll, т.к. я не знаю параметров...
Здравствуйте, x3r0n, Вы писали:
X>WebMoney Keeper работает без этой длл, просто пропадает некоторый функционал... X>Если заменить настоящую длл моей(код который я выкладывал) то моя длл не выполняется(месадж боксы не вылазят). X>Можно ли сделать длл-ку, которая бы при замене смогла например показать мессадж бокс? Если да то как? X>Знаю точно, что первая функция которая в этой длл выполняется: DllGetClassObject...
Почитайте про Inproc COM Server
Так маленький ликбез:
DllRegisterServer — выполняется если вызвать из коммандной строки regsvr32.exe Enum.dll — зарегестрировать в registry COM Server (в вашем случае можна не имплементить) DllUnRegisterServer — выполняется если вызвать из коммандной строки regsvr32.exe /u Enum.dll — отрегестрировать (можна не имплементить) DllGetClassObject — выполняется если програма хочет создать уже зарегестрированый COM обьект(ы) — и возвращает эта функция интерфейс на созданый обьект. Какие методы в этом обьекте может сказать TypeLib, она зашита в DLL как ресурс. Это дело можна проимортить через Delphi IDE (нужно). DllCanUnloadNow — вызывается системой для проверки можна ли уже выгружать DLL, тоесть не используются ли уже обьекты из этой DLL (нужно).
Вот так вот наскорую руку... Дальше включайте думалку...
Ну и для подбития итогов. Вам придется создать COM сервер, который создает необходимые обьекты, запрашиваемые через DllGetClassObject.
Если у вас нету навыков, то это может превратится в многодневный минингит с нулевым успехом.
Library Enum;
Uses Windows;
Function DllCanUnloadNow:HRESULT; stdcall;
Begin
Result:= S_FALSE;
End;
Function DllGetClassObject(P1,P2,P3:Pointer):HRESULT; stdcall;
Begin
return E_NOINTERFACE;
End;
Function DllRegisterServer:HRESULT; stdcall;
Begin
Result:= S_OK;
End;
Function DllUnregisterServer:HRESULT; stdcall;
Begin
Result:= S_OK;
End;
Exports
DllCanUnloadNow, DllGetClassObject, DllRegisterServer, DllUnregisterServer;
Begin
End;