• <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>

            elva

            Hook API監(jiān)視驅(qū)動(dòng)的加載

            				;**************************************************************************************************
            ;Author:dge/D哥
            ;Date :2006.7.20
            ;**************************************************************************************************
            ;f:\masm32\bin\ml /nologo /c /coff HookAPI.asm
            ;C:\>f:\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:HookAPI.sys /subsystem:native HookAPI.obj
            .386 . model flat , stdcall
            option casemap
            : none ;************************************************************************************************** include f:\masm32\include\w2k\ntstatus.inc include f:\masm32\include\w2k\ntddk.inc include f:\masm32\include\w2k\ntoskrnl.inc includelib f:\masm32\lib\w2k\ntoskrnl.lib include f:\masm32\Macros\Strings.mac ;************************************************************************************************** .data ;保存地址 dwOldNtLoadDriver dd ? dwAddr dd ? dwDriverName ANSI_STRING <?>
            .
            const CCOUNTED_UNICODE_STRING "\\Device\\devHookApi", g_usDeviceName, 4 CCOUNTED_UNICODE_STRING "\\??\\slHookApi", g_usSymbolicLinkName, 4 CCOUNTED_UNICODE_STRING "ZwLoadDriver", g_usRoutineAddr, 4 ;************************************************************************************************** .code ;讓這個(gè)函數(shù)在NtLoadDriver的調(diào)用時(shí)被執(zhí)行以實(shí)現(xiàn)監(jiān)視 NewNtLoadDriver proc lpDriverName:PUNICODE_STRING pushad ; int 3 ; invoke DbgPrint, $CTA0("\nEntry into NEW\n") invoke RtlUnicodeStringToAnsiString, addr dwDriverName, lpDriverName,TRUE invoke DbgPrint, $CTA0("\nDriverName: %s.sys\n"), dwDriverName.Buffer popad ;調(diào)用原函數(shù) push lpDriverName call dwOldNtLoadDriver ret NewNtLoadDriver endp ;************************************************************************************************** HookFunction proc

            pushad
            ; int 3 ; invoke DbgPrint, $CTA0("\nEntry into hoookfunction\n") ;下面是用KeServiceDescriptorTabled導(dǎo)出符號(hào)獲得數(shù)組的基地址,這個(gè)數(shù)組中包含有NtXXXX函數(shù)的入口地址。 mov eax, KeServiceDescriptorTable mov esi, [eax] mov esi, [esi] ;用MmGetSystemRoutineAddress來獲得函數(shù)ZwLoadDriver的地址。并從這個(gè)函數(shù)地址后面的第2個(gè)字節(jié)中取得服務(wù)號(hào)。從而 ;獲得以服務(wù)號(hào)為下標(biāo)的數(shù)組元素。 invoke MmGetSystemRoutineAddress,addr g_usRoutineAddr inc eax movzx ecx,byte ptr[eax] sal ecx,2
            add
            esi,ecx mov dwAddr,esi
            mov
            edi,dword ptr[esi] ;保存舊的函數(shù)地址。 mov dwOldNtLoadDriver,edi mov edi,offset NewNtLoadDriver ;修改入口地址 cli
            mov
            dword ptr[esi],edi sti popad mov eax, STATUS_SUCCESS ret HookFunction endp ;************************************************************************************************** DispatchCreateClose proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP mov eax, pIrp assume eax:ptr _IRP mov [eax].IoStatus.Status, STATUS_SUCCESS and [eax].IoStatus.Information, 0 assume eax:nothing

            invoke
            IoCompleteRequest, pIrp, IO_NO_INCREMENT mov eax, STATUS_SUCCESS ret DispatchCreateClose endp ;************************************************************************************************** DriverUnload proc pDriverObject:PDRIVER_OBJECT ;必須保存環(huán)境,否則后果很嚴(yán)重。在這個(gè)函數(shù)中恢復(fù)被修改的地址。
            pushad
            ; int 3 ; invoke DbgPrint, $CTA0("\nEntry into DriverUnload \n") mov esi,dwAddr mov eax,dwOldNtLoadDriver cli mov dword ptr[esi],eax sti invoke IoDeleteSymbolicLink, addr g_usSymbolicLinkName mov eax,pDriverObject invoke IoDeleteDevice, (DRIVER_OBJECT PTR [eax]).DeviceObject
            popad

            ret
            DriverUnload endp ;************************************************************************************************** DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING local status:NTSTATUS local pDeviceObject:PDEVICE_OBJECT ; int 3 ; invoke DbgPrint, $CTA0("\nEntry into DriverEntry\n") mov status, STATUS_DEVICE_CONFIGURATION_ERROR invoke IoCreateDevice, pDriverObject, 0, addr g_usDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, addr pDeviceObject .if eax == STATUS_SUCCESS invoke IoCreateSymbolicLink, addr g_usSymbolicLinkName, addr g_usDeviceName .if eax == STATUS_SUCCESS mov eax, pDriverObject assume eax:ptr DRIVER_OBJECT mov [eax].DriverUnload, offset DriverUnload mov [eax].MajorFunction[IRP_MJ_CREATE*(sizeof PVOID)], offset DispatchCreateClose mov [eax].MajorFunction[IRP_MJ_CLOSE*(sizeof PVOID)], offset DispatchCreateClose assume eax:nothing
            invoke
            HookFunction mov status, STATUS_SUCCESS .else invoke IoDeleteDevice, pDeviceObject .endif .endif
            mov
            eax, status ret DriverEntry endp

            end
            DriverEntry ;**************************************************************************************************

            posted on 2007-12-13 11:37 葉子 閱讀(1564) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 驅(qū)動(dòng)開發(fā)

            久久狠狠一本精品综合网| 国产午夜福利精品久久| 国产精品亚洲综合久久 | 精品少妇人妻av无码久久| 国产婷婷成人久久Av免费高清| 久久人人爽人人爽人人片AV麻烦| 国产精品久久久久久久久鸭| 一级A毛片免费观看久久精品| 久久国产亚洲高清观看| 亚洲国产香蕉人人爽成AV片久久 | 久久久精品午夜免费不卡| 四虎国产精品成人免费久久| 精品久久一区二区| 久久综合久久自在自线精品自| 免费一级欧美大片久久网| 国产精品99久久精品爆乳| 亚洲国产精品无码久久青草 | WWW婷婷AV久久久影片| 久久天天躁狠狠躁夜夜不卡| 69国产成人综合久久精品| 一本久久综合亚洲鲁鲁五月天| 色综合久久中文色婷婷| 久久综合狠狠综合久久综合88 | 久久精品亚洲男人的天堂| 久久久精品国产sm调教网站| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲午夜久久久精品影院| 国产福利电影一区二区三区久久久久成人精品综合 | 老司机午夜网站国内精品久久久久久久久| 精品国产VA久久久久久久冰| 少妇人妻综合久久中文字幕| 免费一级做a爰片久久毛片潮| 久久午夜无码鲁丝片午夜精品| 99久久国产热无码精品免费久久久久| 午夜不卡久久精品无码免费| 久久精品中文无码资源站| 久久精品国产清自在天天线| 囯产极品美女高潮无套久久久| 九九久久自然熟的香蕉图片| 性欧美丰满熟妇XXXX性久久久| 日韩人妻无码一区二区三区久久|