Re[3]: Проблема с CPEncrypt
От: x64 Россия  
Дата: 04.09.08 22:03
Оценка: +1
MJ>Нет, проблема не в том как подменить, проблема как в длл вызвать процедуру, для этого нужно иметь
MJ>*.lib файл той длл в которой эта функция, а в самой длл она extern.
MJ>Но я не смог заставить линкер найти функция, т.е. нету у меня этого самого lib файла, который генериться вместе с либой.

Да не нужен тебе никакой .lib-файл! С помощью GetProcAddress() получаешь указатель на функцию, и по нему и вызываешь. Для тех, кто в танке, поясняю:

typedef
BOOL
(__stdcall* CPEncryptPtr) (
  HCRYPTPROV hProv,
  HCRYPTKEY hKey,
  HCRYPTHASH hHash,
  BOOL Final,
  DWORD dwFlags,
  BYTE* pbData,
  DWORD* pdwDataLen,
  DWORD dwBufLen);

//
// Получаем адрес оригинальной функции
//

...

HMODULE hModule = GetModuleHandle ("gpkcsp.dll"); // DLL может быть и другая, например, dssenh.dll или slbcsp.dll
CPEncryptPtr pFunction = GetProcAddress (hModule, "CPEncrypt");

//
// Здесь код подмены адреса в IAT
//

...

//
// Вызываем оригинальную функцию
//

BOOL bResult = pFunction (
  hProv,
  hKey,
  hHash,
  Final,
  dwFlags,
  pbData,
  pdwDataLen,
  dwBufLen);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.