驱动加载的一些问题
在exe里面加载作为资源载入的驱动sys例如资源隶属于SYSID为IDR_SYS
如何加载? 哪位大哥能附上代码或者例子
越简单越好 谢了:) 好吧,哥帮你吧。
不过你的问题和系统底层没有任何关系,是WINDOWS编程的基本常识。
BOOL ReleaseCustomResource(WORD id, LPSTR Type, LPSTR OutputPath)
{
//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可
HRSRC hRsrc = FindResourceA(0, MAKEINTRESOURCEA(id), Type);
if (NULL == hRsrc)
return FALSE;
//获取资源的大小
DWORD dwSize = SizeofResource(NULL, hRsrc);
if (0 == dwSize)
return FALSE;
//加载资源
HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
if (NULL == hGlobal)
return FALSE;
//锁定资源
LPVOID pBuffer = LockResource(hGlobal);
if (NULL == pBuffer)
return FALSE;
//输出资源
BOOL bRt = FALSE;
FILE* fp = fopen(OutputPath, "wb");
if (fp != NULL)
{
if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))
bRt = TRUE;
fclose(fp);
}
FreeResource(hGlobal);
return bRt;
}
哥 重要的不是释放资源 而是如何释放后加载驱动 392064393 发表于 2011-7-30 08:26 static/image/common/back.gif
哥 重要的不是释放资源 而是如何释放后加载驱动
你是要普通的加载?还是要过主防的加载? 392064393 发表于 2011-7-30 08:26 static/image/common/back.gif
哥 重要的不是释放资源 而是如何释放后加载驱动
这个就更容易了。既然文件已经释放了出来,直接用ZwLoadDriver就可以加载了。
直接百度搜索“使用zwloaddriver加载驱动”即可:
http://www.baidu.com/s?wd=%CA%B9%D3%C3zwloaddriver%BC%D3%D4%D8%C7%FD%B6%AF 普通加载就OK了 去看看老大说的先 解决了 谢老大了
// DriverTest.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include <stdio.h>
typedef struct _LSA_UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PVOID Buffer;
} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
typedef LSA_UNICODE_STRING UNICODE_STRING, *PUNICODE_STRING;
// 申明ntdll中使用的函数
typedef DWORD (CALLBACK* RTLANSISTRINGTOUNICODESTRING)(PVOID, PVOID,DWORD);
RTLANSISTRINGTOUNICODESTRING RtlAnsiStringToUnicodeString;
typedef DWORD (CALLBACK* RTLFREEUNICODESTRING)(PVOID);
RTLFREEUNICODESTRING RtlFreeUnicodeString;
typedef DWORD (CALLBACK* ZWLOADDRIVER)(PVOID);
ZWLOADDRIVER ZwLoadDriver;
int LoadDriver(char * szDrvName, char * szDrvPath)
{
//修改注册表启动驱动程序
char szSubKey, szDrvFullPath;
LSA_UNICODE_STRING buf1;
LSA_UNICODE_STRING buf2;
int iBuffLen;
HKEY hkResult;
char Data;
DWORD dwOK;
iBuffLen = sprintf(szSubKey,"System\\CurrentControlSet\\Services\\%s",szDrvName);
szSubKey=0;
dwOK = RegCreateKey(HKEY_LOCAL_MACHINE,szSubKey,&hkResult);
if(dwOK!=ERROR_SUCCESS)
return false;
Data=1;
Data=0;
Data=0;
Data=0;
dwOK=RegSetValueEx(hkResult,"Type",0,4,(const unsigned char *)Data,4);
dwOK=RegSetValueEx(hkResult,"ErrorControl",0,4,(const unsigned char *)Data,4);
dwOK=RegSetValueEx(hkResult,"Start",0,4,(const unsigned char *)Data,4);
GetFullPathName(szDrvPath, 256, szDrvFullPath, NULL);
printf("Loading driver: %s\r\n", szDrvFullPath);
iBuffLen = sprintf(szSubKey,"\\??\\%s",szDrvFullPath);
szSubKey=0;
dwOK=RegSetValueEx(hkResult,"ImagePath",0,1,(const unsigned char *)szSubKey,iBuffLen);
RegCloseKey(hkResult);
iBuffLen = sprintf(szSubKey,"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\%s",szDrvName);
szSubKey=0;
buf2.Buffer = (PVOID)szSubKey;
buf2.Length = iBuffLen;
RtlAnsiStringToUnicodeString(&buf1,&buf2,1);
//加载驱动程序
dwOK = ZwLoadDriver(&buf1);
RtlFreeUnicodeString(&buf1);
iBuffLen=sprintf(szSubKey,"%s%s\\Enum","System\\CurrentControlSet\\Services\\",szDrvName);
szSubKey=0;
//删除注册表项
RegDeleteKey(HKEY_LOCAL_MACHINE,szSubKey);
iBuffLen=sprintf(szSubKey,"%s%s\\Security","System\\CurrentControlSet\\Services\\",szDrvName);
szSubKey=0;
RegDeleteKey(HKEY_LOCAL_MACHINE,szSubKey);
iBuffLen=sprintf(szSubKey,"%s%s","System\\CurrentControlSet\\Services\\",szDrvName);
szSubKey=0;
RegDeleteKey(HKEY_LOCAL_MACHINE,szSubKey);
iBuffLen=sprintf(szSubKey,"\\\\.\\%s",szDrvName);
szSubKey=0;
return true;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HMODULE hNtdll = NULL;
hNtdll = LoadLibrary( "ntdll.dll" );
//从ntdll.dll里获取函数
if ( !hNtdll )
{
printf( "LoadLibrary( NTDLL.DLL ) Error:%d\n", GetLastError() );
return false;
}
RtlAnsiStringToUnicodeString = (RTLANSISTRINGTOUNICODESTRING)
GetProcAddress( hNtdll, "RtlAnsiStringToUnicodeString");
RtlFreeUnicodeString = (RTLFREEUNICODESTRING)
GetProcAddress( hNtdll, "RtlFreeUnicodeString");
ZwLoadDriver = (ZWLOADDRIVER)
GetProcAddress( hNtdll, "ZwLoadDriver");
//注册驱动程序,驱动放到C盘根目录去,并且命名为hidedriver.sys
LoadDriver("hidedriver", "C:\\hidedriver.sys");
return 0;
}
naylon 发表于 2011-8-1 16:17 static/image/common/back.gif
我想要过主防的加载
只能无聊地说,社工法能过任何主防,任何HIPS无法防御。。。
我09年时常为加载驱动头痛,现在也懒的想这事了。。。 naylon 发表于 2011-8-1 16:17 static/image/common/back.gif
我想要过主防的加载
同求哇~~{:1_114:} naylon 发表于 2011-8-1 18:04 static/image/common/back.gif
……深深地鄙视4F!
4F??????是什么东西? ywledoc 发表于 2011-8-1 18:09 static/image/common/back.gif
4F??????是什么东西?
4F不就是4楼嘛。。。 Tesla.Angela 发表于 2011-8-4 22:05 static/image/common/back.gif
4F不就是4楼嘛。。。
{:1_120:}问过了naylon。然后,觉得自己好奇心太重。我那个天。。。
页:
[1]