Привет всем!
В 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;
Library Enum;
Uses Windows;
TYPE
TDllGetClassObject = Function(P1,P2,P3:Pointer):HRESULT; stdcall;
const
csFileName = 'enum_old.dll';
Function DllCanUnloadNow:HRESULT; stdcall;
Begin
Result:= S_FALSE;
End;
Function DllGetClassObject(P1,P2,P3:Pointer):HRESULT; stdcall;
Var
Handle : THandle ;
_DllGetClassObject : TDllGetClassObject ;
Begin
Result:= E_NOINTERFACE;
Handle:= LoadLibrary( csFileName );
If ( Handle <> 0 ) Then
Begin
_DllGetClassObject:= GetProcAddress( Handle, 'DllGetClassObject' );
If ( ASSIGNED( _DllGetClassObject ) ) Then
Result:= _DllGetClassObject( P1, P2, P3 );
// Не стоит беспокоится о повисшем Handle. End;
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;
Здравствуйте, x3r0n, Вы писали:
X>Здравствуйте, dkotov, Вы писали:
D>>Вот тебе мой дельный совет. D>>Для начала, напиши обыкновенную прокси dll. D>>В своей dll перенаправляй вызовы в оригинальную dll, D>>после чего, после того как заработает, делай всё остальное...
X>Вы имеете ввиду, создать длл перенаправляющую все вызовы через себя к другой _моей_ длл? X>Это я сделал... Только не получается _правельно_ вызвать функции из Enum.dll, т.к. я не знаю параметров...
Гы, гы. Вот вам параметры. Что будет, что будет...
// DLL main это то что между begin end. в library модуле. лучше не перенаправляйте вообсче :)function DllMain(hinstDLL : THandle; dwReason : Cardinal; lpvReserved : Pointer) : Bool; stdcall;
function DllGetClassObject (const CLSID, IID: TGUID; var Obj): HResult; stdcall;
function DllCanUnloadNow: HResult; stdcall;
function DllRegisterServer: HResult; stdcall;
function DllUnregisterServer: HResult; stdcall;
Здравствуйте, dkotov, Вы писали:
D>Пенальти в догонку...
Попробовал этот вариант, переименовал оригинал в enum_old.dll, заменил...
Несработало... Вызовы из Enum.dll как будто игнорируются
Заменил еще DefaultKSP.dll сильно глюкнуло месаджбокс вылез,
но начал возникать кривой 'контроль компонентов' кипера...
Здравствуйте, dkotov, Вы писали:
D>Это не готовое решение, это всего лишь вариант... D>Я вполне где-то мог допустить МАЛЕНЬКУЮ ошибку...
Вродебы ошибка не в реализации... Проверил с DefaultKSP.dll:
_DllHandle:= LoadLibrary( csDllFileName );
If ( _DllHandle <> 0 ) Then
Begin
MessageBox(0,'','',0);
Месадж бокс не вылез, если его поставить выше тогда он вылезет...
Т.е. длл ка не подгружается...
Проверил с Enum.dll, наставил мессаджбоксы везде, негде не вылез
Если удалить Enum.dll, то контроль компонентов(если это можно так назвать) не возникает,
интрфейс связанный с Енум авторизацией пропадает... Т.е. длл подгружается при запуске кипера...
dkotov, выйдите пожайлуста на связь, помогите плиз, если хотите заплачу 5 wmz это единственное, что у меня есть в сети...
Хотя нет, еще есть номерок аси 406504 могу дасть и его...
Здравствуйте, x3r0n, Вы писали:
X>Здравствуйте, dkotov, Вы писали:
D>>Пенальти в догонку...
X>Попробовал этот вариант, переименовал оригинал в enum_old.dll, заменил... X>Несработало... Вызовы из Enum.dll как будто игнорируются X>Заменил еще DefaultKSP.dll сильно глюкнуло месаджбокс вылез, X>но начал возникать кривой 'контроль компонентов' кипера...
Меня это не удивляет). Зная, насколько кипер врезается в систему, меня не удивит проверка dll-ки например на хэш код или что-то такое. Поэтому думаю что заменить длл "физически" — идея не до конца удачная. А для реализации задачи лучше искать другие пути
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Здравствуйте, Niemand, Вы писали:
N>Меня это не удивляет). Зная, насколько кипер врезается в систему, меня не удивит проверка dll-ки например на хэш код или что-то такое. Поэтому думаю что заменить длл "физически" — идея не до конца удачная. А для реализации задачи лучше искать другие пути
Нет, идея как-раз и удачная, кипер не проверяет хэшсумму Enum.dll, если ее удалить, то это можно увидеть... Длл вызывается при запуске кипера...
Поэтому я и выбрал _именно_ эту длл...
Здравствуйте, dkotov, Вы писали:
D>Рассказывайте что получается в сумме...
Тестировал разными способами, вызовы из Enum.dll как будто бы не осуществляются(т.е. причина не в самой реализации а в чем-то другом), хотя при удалении этой длл интрфейс связанный с Енум авторизацией исчезает(в принципе понятно по названию длл за что она отвечает ...
Пробовал разные варианты, заменял все дллки если заменить DefaultKSP.dll, и потом удалить Enum.dll, код в нашей длл выполниться, но кипер вылетит с ошибкой что некоторые компоненты изменились... Изза этого вариант замены DefaultKSP.dll отпадает... Возможно при запуске кипреа подгружаются еще какие то его длл, WMClient.dll не берем т.к. это основная часть программы, в ней хранятся все ресурсы, весь интерфейс и т.д. и подделать все вызовы будет крайне трудно, еще скорее всего кипер следит за ее изменением как и за DefaultKSP.dll...Сейчас попробую с помощью FileMon'a узнать что он еще подгружает...
Пытался методом научного тыка заменять примерами из этой статьи http://www.wasm.ru/article.php?article=comkit2 пока безрезультатно...
Я посмотрел enum.dll, вообщем мой Вам совет — бросьте эту затею,
библиотека имеет цифровую подпись, ресурсы (скорее всего криптованные)...
На воссоздание прототипа, хотя-бы банального прокси, может уйти большое количество времени.
Здравствуйте, dkotov, Вы писали:
D>Я посмотрел enum.dll, вообщем мой Вам совет — бросьте эту затею, D>библиотека имеет цифровую подпись, ресурсы (скорее всего криптованные)... D>На воссоздание прототипа, хотя-бы банального прокси, может уйти большое количество времени.
Ресурсы там незакриптованы в кипере вообще вроде бы ничего незакриптовано
цифровая подпись там как защита от подмены и не более...
Сталкивался с этим до этого... Например в WMClient.dll почти весь интерфейс хранится в ресурсах...
Они легко меняются любым редактором ресурсов... Подпись остается валидной... Я даже фичу нашел:
Коммисия в кипере вычисляется после изменения поля сумма и ввода кошелька...
Если редактором ресурсов вписать в эдит свой кошелек то можно переводить деньги без коммисии
Хз профиксили это ща или нет... В третей версии пахало...
Я уже бросил эту затею
Реализовал все по другому... Намного проще и даже лучше...
Нашел интересную весчь Если интересно, расскажу... Моя ася ->30 46 03
Здравствуйте, x3r0n, Вы писали:
X>Здравствуйте, wellwell, Вы писали:
W>>Хитрый какой. А параметры? А соглашения о вызовах? Предвидя вопрос а как их узнать, ответ — использовать дизассемблер (типа IDA).
X>Пробовал, в асме я нуб... Быть может Вы мне поможете? Взамен дам Вам 5 wmz(все что есть)...
И пожеваную жвачку...
А если серьезно, то не зная минимально необходимых COM объектов, которые программе нужны, сделать что-то очень проблематично... Ведь программа ожидает, что по ее запросу объекты будут созданы, а у тебя тут пустые заглушки...