Re[5]: •Замена чужой длл своей•
От: dkotov  
Дата: 31.01.07 18:29
Оценка:
Немного доработав, имеем:

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;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: •Замена чужой длл своей•
От: Danchik Украина  
Дата: 31.01.07 18:31
Оценка:
Здравствуйте, 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;
Re[6]: •Замена чужой длл своей•
От: dkotov  
Дата: 31.01.07 18:37
Оценка: 3 (1)
Пенальти в догонку...

Library Enum;
 Uses Windows;
 
const 
  csDllFileName = 'enum_old.dll'; 
 
TYPE
  TDllGetClassObject  = Function(P1,P2,P3:Pointer):HRESULT; stdcall;
    TDllRegisterServer  = Function:HRESULT; stdcall;
    TDllUnregisterServer = Function:HRESULT; stdcall;

Var
  _DllHandle           : THandle              ;
    _DllGetClassObject   : TDllGetClassObject   ;
    _DllRegisterServer   : TDllRegisterServer   ;
    _DllUnregisterServer : TDllUnregisterServer ;

Function DllCanUnloadNow:HRESULT; stdcall;
Begin
  Result:= S_FALSE;
End;

Function DllGetClassObject(P1,P2,P3:Pointer):HRESULT; stdcall;
Begin
  If ( ASSIGNED( _DllGetClassObject ) ) Then 
      Result:= _DllGetClassObject( P1, P2, P3 )
    Else    
    Result:= E_NOINTERFACE;
End;

Function DllRegisterServer:HRESULT; stdcall;
Begin
  If ( ASSIGNED( _DllRegisterServer ) ) Then 
      Result:= _DllRegisterServer
    Else
      Result:= E_NOTIMPL;
End;

Function DllUnregisterServer:HRESULT; stdcall;
Begin
  If ( ASSIGNED( DllUnregisterServer ) ) Then 
      Result:= DllUnregisterServer
    Else
      Result:= E_NOTIMPL;
End;

Exports
  DllCanUnloadNow, DllGetClassObject, DllRegisterServer, DllUnregisterServer;
    
Begin
  _DllHandle:= LoadLibrary( csDllFileName );
    If ( _DllHandle <> 0 ) Then 
    Begin
      _DllGetClassObject  := GetProcAddress( _DllHandle, 'DllGetClassObject'   );
        _DllRegisterServer  := GetProcAddress( _DllHandle, 'DllRegisterServer'   );
        _DllUnregisterServer:= GetProcAddress( _DllHandle, 'DllUnregisterServer' );
    End;
End;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: •Замена чужой длл своей•
От: x3r0n  
Дата: 31.01.07 19:02
Оценка:
Здравствуйте, dkotov, Вы писали:

D>Пенальти в догонку...


Попробовал этот вариант, переименовал оригинал в enum_old.dll, заменил...
Несработало... Вызовы из Enum.dll как будто игнорируются
Заменил еще DefaultKSP.dll сильно глюкнуло месаджбокс вылез,
но начал возникать кривой 'контроль компонентов' кипера...
Re[8]: •Замена чужой длл своей•
От: dkotov  
Дата: 31.01.07 19:06
Оценка:
Это не готовое решение, это всего лишь вариант...
Я вполне где-то мог допустить МАЛЕНЬКУЮ ошибку...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: •Замена чужой длл своей•
От: x3r0n  
Дата: 31.01.07 19:20
Оценка:
Здравствуйте, dkotov, Вы писали:

D>Это не готовое решение, это всего лишь вариант...

D>Я вполне где-то мог допустить МАЛЕНЬКУЮ ошибку...

Вродебы ошибка не в реализации... Проверил с DefaultKSP.dll:

  _DllHandle:= LoadLibrary( csDllFileName );
    If ( _DllHandle <> 0 ) Then
    Begin
      MessageBox(0,'','',0);

Месадж бокс не вылез, если его поставить выше тогда он вылезет...
Т.е. длл ка не подгружается...
Проверил с Enum.dll, наставил мессаджбоксы везде, негде не вылез
Re[10]: •Замена чужой длл своей•
От: x3r0n  
Дата: 31.01.07 19:22
Оценка:
Если удалить Enum.dll, то контроль компонентов(если это можно так назвать) не возникает,
интрфейс связанный с Енум авторизацией пропадает... Т.е. длл подгружается при запуске кипера...
Re[11]: •Замена чужой длл своей•
От: x3r0n  
Дата: 31.01.07 20:04
Оценка:
Блин... Я разговариваю сам с сабой...
Re[12]: •Замена чужой длл своей•
От: x3r0n  
Дата: 31.01.07 20:26
Оценка:
dkotov, выйдите пожайлуста на связь, помогите плиз, если хотите заплачу 5 wmz это единственное, что у меня есть в сети...
Хотя нет, еще есть номерок аси 406504 могу дасть и его...
Re[8]: •Замена чужой длл своей•
От: Niemand Австралия  
Дата: 31.01.07 23:25
Оценка:
Здравствуйте, 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
Re[9]: •Замена чужой длл своей•
От: x3r0n  
Дата: 01.02.07 05:01
Оценка:
Здравствуйте, Niemand, Вы писали:

N>Меня это не удивляет). Зная, насколько кипер врезается в систему, меня не удивит проверка dll-ки например на хэш код или что-то такое. Поэтому думаю что заменить длл "физически" — идея не до конца удачная. А для реализации задачи лучше искать другие пути


Нет, идея как-раз и удачная, кипер не проверяет хэшсумму Enum.dll, если ее удалить, то это можно увидеть... Длл вызывается при запуске кипера...
Поэтому я и выбрал _именно_ эту длл...
Re[13]: •Замена чужой длл своей•
От: dkotov  
Дата: 01.02.07 10:33
Оценка:
Проше прощения, вынужден был отлучится (семья, дети и т.д.).
5 wmz, оставьте себе

Рассказывайте что получается в сумме...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: •Замена чужой длл своей•
От: x3r0n  
Дата: 01.02.07 11:38
Оценка:
Здравствуйте, dkotov, Вы писали:

D>Рассказывайте что получается в сумме...

Тестировал разными способами, вызовы из Enum.dll как будто бы не осуществляются(т.е. причина не в самой реализации а в чем-то другом), хотя при удалении этой длл интрфейс связанный с Енум авторизацией исчезает(в принципе понятно по названию длл за что она отвечает ...
Пробовал разные варианты, заменял все дллки если заменить DefaultKSP.dll, и потом удалить Enum.dll, код в нашей длл выполниться, но кипер вылетит с ошибкой что некоторые компоненты изменились... Изза этого вариант замены DefaultKSP.dll отпадает... Возможно при запуске кипреа подгружаются еще какие то его длл, WMClient.dll не берем т.к. это основная часть программы, в ней хранятся все ресурсы, весь интерфейс и т.д. и подделать все вызовы будет крайне трудно, еще скорее всего кипер следит за ее изменением как и за DefaultKSP.dll...Сейчас попробую с помощью FileMon'a узнать что он еще подгружает...
Пытался методом научного тыка заменять примерами из этой статьи http://www.wasm.ru/article.php?article=comkit2 пока безрезультатно...
Re[15]: •Замена чужой длл своей•
От: dkotov  
Дата: 01.02.07 11:47
Оценка:
1. Переходим в ICQ (109447080)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: •Замена чужой длл своей•
От: dkotov  
Дата: 01.02.07 13:00
Оценка:
Я посмотрел enum.dll, вообщем мой Вам совет — бросьте эту затею,
библиотека имеет цифровую подпись, ресурсы (скорее всего криптованные)...
На воссоздание прототипа, хотя-бы банального прокси, может уйти большое количество времени.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: •Замена чужой длл своей•
От: x3r0n  
Дата: 02.02.07 17:09
Оценка:
Здравствуйте, dkotov, Вы писали:

D>Я посмотрел enum.dll, вообщем мой Вам совет — бросьте эту затею,

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

Ресурсы там незакриптованы в кипере вообще вроде бы ничего незакриптовано
цифровая подпись там как защита от подмены и не более...
Сталкивался с этим до этого... Например в WMClient.dll почти весь интерфейс хранится в ресурсах...
Они легко меняются любым редактором ресурсов... Подпись остается валидной... Я даже фичу нашел:
Коммисия в кипере вычисляется после изменения поля сумма и ввода кошелька...
Если редактором ресурсов вписать в эдит свой кошелек то можно переводить деньги без коммисии
Хз профиксили это ща или нет... В третей версии пахало...

Я уже бросил эту затею
Реализовал все по другому... Намного проще и даже лучше...
Нашел интересную весчь Если интересно, расскажу... Моя ася ->30 46 03
Re[3]: •Замена чужой длл своей•
От: trophim Россия  
Дата: 03.02.07 16:23
Оценка:
Здравствуйте, x3r0n, Вы писали:

X>Здравствуйте, wellwell, Вы писали:



W>>Хитрый какой. А параметры? А соглашения о вызовах? Предвидя вопрос а как их узнать, ответ — использовать дизассемблер (типа IDA).


X>Пробовал, в асме я нуб... Быть может Вы мне поможете? Взамен дам Вам 5 wmz(все что есть)...


И пожеваную жвачку...

А если серьезно, то не зная минимально необходимых COM объектов, которые программе нужны, сделать что-то очень проблематично... Ведь программа ожидает, что по ее запросу объекты будут созданы, а у тебя тут пустые заглушки...
[EOF]
Let it be! — Давайте есть пчелу!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.