找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 9821|回复: 11

驱动加载的一些问题

 火... [复制链接]

2

主题

14

回帖

0

精华

铜牌会员

积分
35
发表于 2011-7-30 00:06:12 | 显示全部楼层 |阅读模式
在exe里面加载作为资源载入的驱动sys

例如资源隶属于SYS  ID为IDR_SYS

如何加载? 哪位大哥能附上代码或者例子

越简单越好   谢了

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-7-30 00:26:07 | 显示全部楼层
好吧,哥帮你吧。
不过你的问题和系统底层没有任何关系,是WINDOWS编程的基本常识。

  1. BOOL ReleaseCustomResource(WORD id, LPSTR Type, LPSTR OutputPath)
  2. {
  3.         //定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可
  4.         HRSRC hRsrc = FindResourceA(0, MAKEINTRESOURCEA(id), Type);
  5.         if (NULL == hRsrc)
  6.                 return FALSE;
  7.         //获取资源的大小
  8.         DWORD dwSize = SizeofResource(NULL, hRsrc);
  9.         if (0 == dwSize)
  10.                 return FALSE;
  11.         //加载资源
  12.         HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
  13.         if (NULL == hGlobal)
  14.                 return FALSE;
  15.         //锁定资源
  16.         LPVOID pBuffer = LockResource(hGlobal);
  17.         if (NULL == pBuffer)
  18.                 return FALSE;
  19.         //输出资源
  20.         BOOL bRt = FALSE;
  21.         FILE* fp = fopen(OutputPath, "wb");
  22.         if (fp != NULL)
  23.         {
  24.                 if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))
  25.                         bRt = TRUE;
  26.                 fclose(fp);
  27.         }
  28.         FreeResource(hGlobal);
  29.         return bRt;
  30. }
复制代码

2

主题

14

回帖

0

精华

铜牌会员

积分
35
 楼主| 发表于 2011-7-30 08:26:32 | 显示全部楼层
哥   重要的不是释放资源   而是如何释放后加载驱动

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-7-30 13:57:24 | 显示全部楼层
392064393 发表于 2011-7-30 08:26
哥   重要的不是释放资源   而是如何释放后加载驱动

你是要普通的加载?还是要过主防的加载?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-7-30 21:54:01 | 显示全部楼层
392064393 发表于 2011-7-30 08:26
哥   重要的不是释放资源   而是如何释放后加载驱动


这个就更容易了。既然文件已经释放了出来,直接用ZwLoadDriver就可以加载了。
直接百度搜索“使用zwloaddriver加载驱动”即可:
http://www.baidu.com/s?wd=%CA%B9 ... 3%D4%D8%C7%FD%B6%AF

2

主题

14

回帖

0

精华

铜牌会员

积分
35
 楼主| 发表于 2011-7-31 10:20:13 | 显示全部楼层
普通加载就OK了   去看看老大说的先

2

主题

14

回帖

0

精华

铜牌会员

积分
35
 楼主| 发表于 2011-7-31 11:26:38 | 显示全部楼层
解决了   谢老大了




// 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[200], szDrvFullPath[256];
    LSA_UNICODE_STRING buf1;
    LSA_UNICODE_STRING buf2;
    int iBuffLen;
    HKEY hkResult;
    char Data[4];
    DWORD dwOK;
    iBuffLen = sprintf(szSubKey,"System\\CurrentControlSet\\Services\\%s",szDrvName);
    szSubKey[iBuffLen]=0;
    dwOK = RegCreateKey(HKEY_LOCAL_MACHINE,szSubKey,&hkResult);
    if(dwOK!=ERROR_SUCCESS)
        return false;
    Data[0]=1;
    Data[1]=0;
    Data[2]=0;
    Data[3]=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[iBuffLen]=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[iBuffLen]=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[iBuffLen]=0;
    //删除注册表项
    RegDeleteKey(HKEY_LOCAL_MACHINE,szSubKey);
    iBuffLen=sprintf(szSubKey,"%s%s\\Security","System\\CurrentControlSet\\Services\\",szDrvName);
    szSubKey[iBuffLen]=0;
    RegDeleteKey(HKEY_LOCAL_MACHINE,szSubKey);
    iBuffLen=sprintf(szSubKey,"%s%s","System\\CurrentControlSet\\Services\\",szDrvName);
    szSubKey[iBuffLen]=0;
    RegDeleteKey(HKEY_LOCAL_MACHINE,szSubKey);
    iBuffLen=sprintf(szSubKey,"\\\\.\\%s",szDrvName);
    szSubKey[iBuffLen]=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;
}




857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-8-1 16:30:35 | 显示全部楼层
naylon 发表于 2011-8-1 16:17
我想要过主防的加载


只能无聊地说,社工法能过任何主防,任何HIPS无法防御。。。
我09年时常为加载驱动头痛,现在也懒的想这事了。。。

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-8-1 18:01:28 | 显示全部楼层
naylon 发表于 2011-8-1 16:17
我想要过主防的加载

同求哇~~

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-8-1 18:09:31 | 显示全部楼层
naylon 发表于 2011-8-1 18:04
……深深地鄙视4F!

4F??????是什么东西?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-8-4 22:05:06 | 显示全部楼层
ywledoc 发表于 2011-8-1 18:09
4F??????是什么东西?

4F不就是4楼嘛。。。

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-8-5 01:44:09 | 显示全部楼层
Tesla.Angela 发表于 2011-8-4 22:05
4F不就是4楼嘛。。。

问过了naylon。然后,觉得自己好奇心太重。我那个天。。。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表