PDA

View Full Version : تبدیل exe به dll و استفاده از آن برای Hook کردن



rapidshell
پنج شنبه 29 فروردین 1387, 18:13 عصر
یکی از روش ها attach شدن به همه ی window ها hook کردن هست. که یک dll را به process برنامه هایی که window ساخته اند می چسبونه. برای این کار از تابع SetWindowsHookEx ویندوز می شه استفاده کرد. و حالا مشکل من
با روش زیر من یک exe که یک سری function را export می کنه را به dll تبدیل می کنم:



HRESULT MakeHookModule()
{
TCHAR szFilePath[MAX_PATH];
GetModuleFileName( NULL, szFilePath, MAX_PATH );

DWORD dwBinType;
GetBinaryType( szFilePath, &dwBinType );
if( dwBinType != SCS_32BIT_BINARY )
return E_FAIL;

wcscpy( szModulePath, szFilePath );
TCHAR* pos = wcsstr( szModulePath, TEXT(".exe") );
wsprintf( pos, TEXT(".dll") );
CopyFile( szFilePath, szModulePath, FALSE );

HANDLE hFile;
hFile = CreateFile(szModulePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);


if( hFile == INVALID_HANDLE_VALUE )
return E_FAIL;

HANDLE hFileMapping;
hFileMapping = CreateFileMapping( hFile, NULL, PAGE_READWRITE, 0, 0, TEXT("HModule") );

if( hFileMapping == NULL )
{
CloseHandle( hFile );
return E_FAIL;
}

LPVOID hFileData;
hFileData = MapViewOfFileEx( hFileMapping, FILE_MAP_WRITE, 0, 0, 0, NULL );

if( hFileData == NULL )
{
CloseHandle( hFileMapping );
CloseHandle( hFile );
return E_FAIL;
}

PIMAGE_NT_HEADERS pNTHeader;
pNTHeader = ImageNtHeader( hFileData );

pNTHeader->FileHeader.Characteristics |= IMAGE_FILE_DLL;
pNTHeader->FileHeader.Characteristics ^= IMAGE_FILE_RELOCS_STRIPPED;

pNTHeader->OptionalHeader.AddressOfEntryPoint = (DWORD)__DllMain;

pNTHeader->OptionalHeader.AddressOfEntryPoint -= pNTHeader->OptionalHeader.ImageBase;

pNTHeader->OptionalHeader.ImageBase = 0x7CFE0000;

pNTHeader->OptionalHeader.DllCharacteristics = 0x140;

UnmapViewOfFile( hFileData );

CloseHandle( hFileMapping );

CloseHandle( hFile );

return S_OK;
}



این کد به من یک dll نسبتا خوب می ده که راحت LoadLibrary میشه و می شه از function هاش استفاده کرد. ولی در مورد Hook کردن, سیستم خیلی راحت هنگ می کنه. کسی می دونه کجا را من اشتباه می کنم؟