Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz

28.04.2010, 19:14
|
|
Новичок
Регистрация: 12.04.2010
Сообщений: 11
Провел на форуме: 25380
Репутация:
0
|
|
Load driver
какие есть варианты загрузки дров
помимо :
- NtloadDriver
- NtSetSystemInformation (старый без реестра
SYSTEM_LOAD_AND_CALL_IMAGE )
- SCM (стандартных)
юзаю след.
Код:
// some my services
#define KERNEL_MEM_DRIVER_FILENAME_EX L"direct.sys"
#define KERNEL_MEM_DRIVER_FILENAME_EXA "direct.sys"
#define KERNEL_MEM_SERVICE_NAME_EX L"KrlSysData"
#define KERNEL_MEM_DRIVER_SERVICE_NAME_EX L"KernelMemDriver Service"
#define MAGIC_IOCTL 0x00088004
typedef struct _tagLOAD
{
WORD Len;
WCHAR ServiceName[512];
} LOAD ,*PLOAD;
BOOL InstallRegKeys4Driver()
{
BOOL bRet = FALSE;
WCHAR szDriverPath[MAX_PATH] = {'\0'};
GetModuleFileNameW(GetModuleHandle(0),szDriverPath,sizeof(szDriverPath));
PathRemoveFileSpecW(szDriverPath);
PathAppendW(szDriverPath,KERNEL_MEM_DRIVER_FILENAME_EX);
WCHAR szImgPath[MAX_PATH] = {'\0'};
wsprintfW(szImgPath,L"%s%s",L"\\??\\",szDriverPath);
HKEY hKey;
WCHAR szRegPath[MAX_PATH] = {0};
wsprintfW(szRegPath,L"%s%s",L"SYSTEM\\CurrentControlSet\\Services\\",KERNEL_MEM_SERVICE_NAME_EX);
if( RegCreateKeyExW(HKEY_LOCAL_MACHINE,szRegPath,0,NULL,0,KEY_READ | KEY_WRITE,NULL,&hKey,NULL) == ERROR_SUCCESS )
{
RegSetValueExW(hKey,L"DisplayName",0,REG_SZ,(LPBYTE)KERNEL_MEM_DRIVER_SERVICE_NAME_EX,(DWORD)lstrlenW(KERNEL_MEM_DRIVER_SERVICE_NAME_EX)*2);
RegSetValueExW(hKey,L"ImagePath",0,REG_EXPAND_SZ,(LPBYTE)szImgPath,(DWORD)lstrlenW(szImgPath)*2);
DWORD dwType = SERVICE_KERNEL_DRIVER;
DWORD dwStart = SERVICE_DEMAND_START;
RegSetValueExW(hKey,L"Type",0,REG_DWORD,(LPBYTE)&dwType,(DWORD)sizeof(dwType));
RegSetValueExW(hKey,L"Start",0,REG_DWORD,(LPBYTE)&dwStart,(DWORD)sizeof(dwStart) );
bRet = TRUE;
}
return bRet;
}
BOOL GetPrivilege (PCHAR pPrivilegeName)
{
HANDLE hToken;
LUID Luid;
BOOL bReturn = FALSE;
TOKEN_PRIVILEGES TokenPrivileges;
ZeroMemory(&TokenPrivileges,sizeof(TokenPrivileges));
if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken))
{
if (LookupPrivilegeValue(NULL,pPrivilegeName,&Luid))
{
TokenPrivileges.PrivilegeCount = 0x01;
TokenPrivileges.Privileges[0x00].Luid = Luid;
TokenPrivileges.Privileges[0x00].Attributes = SE_PRIVILEGE_ENABLED;
if (AdjustTokenPrivileges(hToken,0x00,&TokenPrivileges,sizeof(TokenPrivileges),NULL,NULL))
{
bReturn = TRUE;
}
}
}
CloseHandle(hToken);
return bReturn;
}
BOOL LoadKernelMemDriverEx()
{
BOOL bRet = FALSE;
if (InstallRegKeys4Driver())
{
HANDLE hDevice = CreateFile ("\\\\.\\FltMgr" , GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL );
if( hDevice != INVALID_HANDLE_VALUE )
{
LOAD service_to_load;
DWORD dwRet=0;
lstrcpyW(service_to_load.ServiceName ,KERNEL_MEM_SERVICE_NAME_EX);
service_to_load.Len = wcslen( service_to_load.ServiceName )*sizeof(WCHAR);
if (GetPrivilege(SE_LOAD_DRIVER_NAME))
{
if (DeviceIoControl( hDevice , MAGIC_IOCTL , &service_to_load , sizeof(service_to_load) , NULL , 0 , &dwRet , NULL ))
{
bRet = TRUE;
}
}
}
}
return bRet;
}
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|