| 信息来源:WhiteCell技术论坛 驱动部分 ;@echo off ;goto make ;******************************************************************** ;author :dge ;homepage:http://llfdge.googlepages.com/ ;date :2007.3.16 ;******************************************************************** .386 .model flat, stdcall option casemap:none include d:/masm32/include/w2k/ntstatus.inc include d:/masm32/include/w2k/ntddk.inc include d:/masm32/include/w2k/ntoskrnl.inc includelib d:/masm32/lib/w2k/ntoskrnl.lib include d:/masm32/Macros/Strings.mac include common.inc _DispatchCreateClose proto :PDEVICE_OBJECT,:PIRP _DriverUnload proto :PDRIVER_OBJECT _DispatchControl proto :PDEVICE_OBJECT,:PIRP .const CCOUNTED_UNICODE_STRING "//Device//devFHF", g_usDeviceName, 4 CCOUNTED_UNICODE_STRING "//??//slFHF", g_usSymbolicLinkName, 4 .data szDos db '/DosDevices/',0 .code _SetEventComp proc uses esi edi,pDeviceObject:PDEVICE_OBJECT,pIrp:PIRP,event mov esi,pIrp assume esi : ptr _IRP push [esi].IoStatus.Status mov edi,[esi].UserIosb assume edi : ptr IO_STATUS_BLOCK pop [edi].Status push [esi].IoStatus.Information pop [edi].Information invoke KeSetEvent,[esi].UserEvent,0,FALSE assume esi:nothing assume edi:nothing invoke IoFreeIrp,pIrp mov eax,STATUS_MORE_PROCESSING_REQUIRED ret _SetEventComp endp DriverEntry proc uses esi, pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING local status : NTSTATUS local pDeviceObject : PDEVICE_OBJECT ; int 3 invoke DbgPrint, $CTA0("Entry DriverEntry /n") mov status, STATUS_DEVICE_CONFIGURATION_ERROR invoke IoCreateDevice, pDriverObject,NULL, addr g_usDeviceName,/ FILE_DEVICE_UNKNOWN, 0, FALSE, addr pDeviceObject .if eax==STATUS_SUCCESS mov esi, pDeviceObject assume esi : ptr DEVICE_OBJECT 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 mov [eax].MajorFunction[IRP_MJ_DEVICE_CONTROL*(sizeof PVOID)], offset _DispatchControl assume eax:nothing mov status, STATUS_SUCCESS .else invoke IoDeleteDevice, pDeviceObject .endif .endif mov eax, status ret DriverEntry endp _DispatchControl proc uses esi edi ebx,pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP local status : NTSTATUS local dwBytesReturned local oa : OBJECT_ATTRIBUTES local lpDeviceObject : PDEVICE_OBJECT local event : KEVENT local ioStatus : IO_STACK_LOCATION local ioS : IO_STATUS_BLOCK local lpIrp : PIRP local hFile local lpSystemBuffer local lpInformation:PFILE_DIRECTORY_INFORMATION local lpFileobject : PFILE_OBJECT local uFileName : UNICODE_STRING local UN:UNICODE_STRING local aFileName : ANSI_STRING local Buffer[1024]:byte and dwBytesReturned,0 mov status, STATUS_UNSUCCESSFUL mov esi, pIrp assume esi : ptr _IRP IoGetCurrentIrpStackLocation esi mov edi,eax assume edi : ptr IO_STACK_LOCATION mov eax,[edi].Parameters.DeviceIoControl.IoControlCode .if eax == IOCTL_GET_DIRECTORY_INFO ;int 3 push [esi].AssociatedIrp.SystemBuffer pop esi mov lpSystemBuffer,esi assume esi:nothing assume edi:nothing invoke strcpy,addr Buffer,addr szDos invoke strcat,addr Buffer,lpSystemBuffer invoke RtlInitAnsiString,addr aFileName,addr Buffer invoke RtlAnsiStringToUnicodeString,addr uFileName,addr aFileName,TRUE InitializeObjectAttributes addr oa, addr uFileName,OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE,/ NULL, NULL ;打开目录 invoke ZwOpenFile,addr hFile, FILE_LIST_DIRECTORY + SYNCHRONIZE+FILE_ANY_ACCESS, addr oa,/ addr ioS, FILE_SHARE_READ + FILE_SHARE_WRITE + FILE_SHARE_DELETE,/ FILE_DIRECTORY_FILE + FILE_SYNCHRONOUS_IO_NONALERT .if eax==STATUS_SUCCESS invoke DbgPrint, $CTA0("ZwOpenFile SUCCESS/n"),eax .endif invoke RtlFreeUnicodeString,addr uFileName ;获得句柄的文件对象 invoke ObReferenceObjectByHandle,hFile,FILE_LIST_DIRECTORY + SYNCHRONIZE,/ 0,KernelMode,addr lpFileobject,NULL .if eax==STATUS_SUCCESS invoke DbgPrint, $CTA0("file obj success/n") ;获得文件系统的底层设备对象 mov esi,lpFileobject assume esi:ptr FILE_OBJECT push [esi].Vpb pop edi assume edi:ptr VPB .if [esi].Vpb & edi push [edi].DeviceObject pop lpDeviceObject .endif assume esi:nothing assume edi:nothing mov esi,lpDeviceObject assume esi:ptr DEVICE_OBJECT invoke IoAllocateIrp,[esi].StackSize,FALSE .if eax !=NULL mov lpIrp,eax .else ;减少引用记数 invoke DbgPrint, $CTA0("allocate failed /n") invoke ObDereferenceObject,lpFileobject invoke ZwClose,hFile jmp exit .endif ;int 3 invoke DbgPrint, $CTA0("allocate Irp success /n") invoke KeInitializeEvent,addr event,SynchronizationEvent,FALSE assume esi:nothing mov esi,lpIrp assume esi : ptr _IRP ;填充IRP结构 invoke ExAllocatePool,PagedPool,65535 push eax invoke memset,eax,0,65535 pop eax mov lpInformation,eax mov [esi].UserBuffer,eax mov [esi].MdlAddress,NULL mov [esi].AssociatedIrp.SystemBuffer,eax mov [esi].Flags,0 lea eax, event mov [esi].UserEvent,eax lea eax,ioStatus mov [esi].UserIosb,eax push lpFileobject pop [esi].Tail.Overlay.OriginalFileObject invoke PsGetCurrentThread mov [esi].Tail.Overlay.Thread,eax mov [esi].RequestorMode,KernelMode assume esi:nothing IoGetNextIrpStackLocation lpIrp mov esi,eax assume esi:ptr IO_STACK_LOCATION mov [esi].MajorFunction,IRP_MJ_DIRECTORY_CONTROL mov [esi].MinorFunction,IRP_MN_QUERY_DIRECTORY push lpFileobject pop [esi].FileObject push lpDeviceObject pop [esi].DeviceObject mov [esi].Flags,SL_RESTART_SCAN mov [esi].Control,0 mov [esi].Parameters.QueryDirectory.FileIndex,0 mov [esi].Parameters.QueryDirectory.FileInformationClass,FileDirectoryInformation mov [esi].Parameters.QueryDirectory.FileName,NULL mov [esi].Parameters.QueryDirectory._Length,65535 assume esi:nothing IoSetCompletionRoutine lpIrp,addr _SetEventComp,0,TRUE,TRUE,TRUE invoke IoCallDriver,lpDeviceObject,lpIrp invoke DbgPrint, $CTA0("status %x"),eax invoke KeWaitForSingleObject,addr event,Executive,KernelMode,TRUE,0 mov esi,lpInformation assume esi:ptr FILE_DIRECTORY_INFORMATION mov edi,lpSystemBuffer assume edi:ptr DIRECTORY_INFO .while TRUE mov eax,[esi].FileNameLength mov UN._Length,ax mov UN.MaximumLength,ax lea ecx,[esi].FileName mov UN.Buffer,ecx invoke RtlUnicodeStringToAnsiString, addr aFileName, addr UN,TRUE invoke strcpy,addr [edi].FileName,aFileName.Buffer invoke RtlFreeAnsiString,addr aFileName push dword ptr[esi].CreationTime pop dword ptr[edi].CreationTime push dword ptr[esi].CreationTime+4 pop dword ptr[edi].CreationTime+4 push dword ptr[esi].EndOfFile pop dword ptr[edi].EndOfFile push [esi].FileAttributes pop [edi].FileAttributes add dwBytesReturned,sizeof DIRECTORY_INFO add edi,sizeof DIRECTORY_INFO .if ![esi].NextEntryOffset .break .endif add esi,[esi].NextEntryOffset .endw assume esi:nothing invoke ExFreePool,lpInformation invoke ObDereferenceObject,lpFileobject invoke ZwClose,hFile mov status,STATUS_SUCCESS .else invoke DbgPrint, $CTA0("file obj failed /n") jmp exit .endif .endif exit: mov esi,pIrp assume esi : ptr _IRP push status pop [esi].IoStatus.Status push dwBytesReturned pop [esi].IoStatus.Information assume esi : nothing assume edi : nothing invoke IoCompleteRequest, pIrp, IO_NO_INCREMENT mov eax, status ret _DispatchControl 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 ret _DispatchCreateClose endp _DriverUnload proc pDriverObject:PDRIVER_OBJECT invoke DbgPrint, $CTA0("Unload success/n") invoke IoDeleteSymbolicLink, addr g_usSymbolicLinkName mov eax, pDriverObject invoke IoDeleteDevice, (DRIVER_OBJECT PTR [eax]).DeviceObject ret _DriverUnload endp end DriverEntry :make set path=%path%;d:/masm32/bin; set drv=FHF ml /nologo /c /coff %drv%.bat link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj del %drv%.obj echo. pause 用户部分: ;******************************************************************** ;author :dge ;homepage:http://llfdge.googlepages.com/ ;date :2007.3.16 ;******************************************************************** .386 .model flat, stdcall option casemap :none include d:/masm32/include/windows.inc include d:/masm32/include/kernel32.inc includelib d:/masm32/lib/kernel32.lib include d:/masm32/include/user32.inc includelib d:/masm32/lib/user32.lib include d:/masm32/include/winioctl.inc include d:/masm32/include/advapi32.inc includelib d:/masm32/lib/advapi32.lib include d:/masm32/Macros/Strings.mac include common.inc .data? szHostName db 100 dup (?) szBuffer db 100 dup (?) hInstance dd ? ;******************************************************************** ; 标志及命令行参数 ;******************************************************************** dwOption dd ? F_ABORT equ 0001h ;按了 Ctrl-C 终止 .data szVer db 'FHF [版本 1.0]',0dh,0ah db '<C> 版权所有 2007 dge',0dh,0ah db 'http://llfdge.googlepages.com',0dh,0ah,0 szDir db 'dir',0dh,0ah,0 szExit db 'exit',0dh,0ah,0 szCdB db 'cd..',0dh,0ah,0 szCdC db 'cd ..',0dh,0ah,0 szCdA db 'cd ',0 szRoot db ':',0dh,0ah,0 szCaption db 'FHF V1.0',0 szGet db 100 dup(?) szError db '不支持此命令',0dh,0ah,0 last db '>',0 odoa db 0dh,0ah,0 szFilter db '*.*',0 szOutputA db '%04d-%02d-%02d %02d:%02d %s %-8d %-s',0dh,0ah,0 szOutputB db '%04d-%02d-%02d %02d:%02d %-8d %-s',0dh,0ah,0 szIr db '<DIR>',0 szOutput db 1024 dup(?) szFail db '系统找不到指定路径',0dh,0ah,0 FLAG db 0 adwOutBuffer db 65535 dup(?) hDevice dd ? inBuffer db 100 dup(?) dwBytesReturned dd ? count dd ? f db '%s %s',0 .code include _Console.asm _LoadDriver proc uses esi edi local hSCManager local hService local acModulePath[MAX_PATH]:CHAR local _ss:SERVICE_STATUS local acBuffer[256+64]:CHAR local acNumber[32]:CHAR local szWide[100]:byte invoke CreateFile,$CTA0("////.//slFHF"), GENERIC_READ + GENERIC_WRITE, / 0, NULL, OPEN_EXISTING, 0, NULL .if eax != INVALID_HANDLE_VALUE mov hDevice,eax mov eax,TRUE ret .endif invoke OpenSCManager, NULL, NULL, SC_MANAGER_ALL_ACCESS .if eax != NULL mov hSCManager, eax push eax invoke GetFullPathName, $CTA0("FHF.sys"), sizeof acModulePath, addr acModulePath, esp pop eax invoke CreateService, hSCManager, $CTA0("FHF"), $CTA0("FHF"),/ SERVICE_START + SERVICE_STOP + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, / SERVICE_ERROR_IGNORE, addr acModulePath, NULL, NULL, NULL, NULL, NULL .if eax != NULL mov hService, eax invoke StartService, hService, 0, NULL .if eax != 0 invoke CreateFile,$CTA0("////.//slFHF"), GENERIC_READ + GENERIC_WRITE, / 0, NULL, OPEN_EXISTING, 0, NULL .if eax != INVALID_HANDLE_VALUE mov hDevice, eax invoke CloseServiceHandle, hService mov eax,TRUE ret .endif invoke ControlService, hService, SERVICE_CONTROL_STOP, addr _ss .endif invoke DeleteService, hService invoke CloseServiceHandle, hService .endif invoke CloseServiceHandle, hSCManager .endif mov eax,FALSE ret _LoadDriver endp _CloseDevice proc uses ebx esi edi LOCAL hSCManager LOCAL hService LOCAL sest : SERVICE_STATUS .if hDevice invoke CloseHandle, hDevice .endif invoke OpenSCManager, NULL, NULL, SC_MANAGER_CONNECT .if eax!=0 mov hSCManager, eax invoke OpenService, hSCManager, $CTA0("FHF"), SERVICE_STOP+DELETE .if eax!=0 mov hService, eax invoke ControlService, hService, SERVICE_CONTROL_STOP, addr sest invoke DeleteService, hService invoke CloseServiceHandle, hService .endif invoke CloseServiceHandle, hSCManager .endif ret _CloseDevice endp _PrintFileInfo proc local sysTime :SYSTEMTIME local stFindFile:WIN32_FIND_DATA local hFindFile local lpName local EnFilea local EnFileb pushad lea esi,adwOutBuffer assume esi:ptr DIRECTORY_INFO mov ecx,count @@: push ecx .if [esi].FileAttributes & FILE_ATTRIBUTE_DIRECTORY .if [esi].Flag == TRUE invoke SetConsoleTextAttribute,hStdOut,FOREGROUND_RED+FOREGROUND_INTENSITY .endif invoke FileTimeToSystemTime,addr [esi].CreationTime,addr sysTime push esi lea esi,[esi].FileName mov lpName,esi push dword ptr[esi].EndOfFile pop EnFilea push dword ptr[esi].EndOfFile+4 pop EnFileb movzx esi,sysTime.wYear movzx edi,sysTime.wMonth movzx ebx,sysTime.wDay movzx ecx,sysTime.wHour movzx edx,sysTime.wMinute invoke wsprintf,addr szOutput,addr szOutputA,esi,edi,ebx,ecx,/ edx,addr szIr,EnFilea,lpName invoke _ConsolePrint,addr szOutput pop esi .else .if [esi].Flag == TRUE invoke SetConsoleTextAttribute,hStdOut,FOREGROUND_RED+FOREGROUND_INTENSITY .endif invoke FileTimeToSystemTime,addr [esi].CreationTime,addr sysTime push esi lea esi,[esi].FileName mov lpName,esi push dword ptr[esi].EndOfFile pop EnFilea push dword ptr[esi].EndOfFile+4 pop EnFileb movzx esi,sysTime.wYear movzx edi,sysTime.wMonth movzx ebx,sysTime.wDay movzx ecx,sysTime.wHour movzx edx,sysTime.wMinute invoke wsprintf,addr szOutput,addr szOutputB,esi,edi,ebx,ecx,edx,EnFilea,/ lpName invoke _ConsolePrint,addr szOutput pop esi .endif invoke SetConsoleTextAttribute,hStdOut,FOREGROUND_GREEN add esi,sizeof DIRECTORY_INFO pop ecx dec ecx .if ecx jmp @B .endif ret _PrintFileInfo endp _SubPath proc lea edi,szBuffer mov al,'>' mov cx,100D repne scasb dec edi @@: dec edi cmp byte ptr[edi],'/' jne @B cmp byte ptr[edi-1],':' jne @F inc edi @@: mov byte ptr[edi],'>' inc edi mov byte ptr[edi],0 ret _SubPath endp _AddPath proc lpSz pushad lea edi,szBuffer mov al,'>' mov cx,100D repne scasb dec edi .if byte ptr[edi-1]=='/' mov byte ptr[edi],0 .else mov byte ptr[edi],'/' inc edi mov byte ptr[edi],0 .endif mov esi,lpSz invoke lstrlen,esi add esi,eax mov word ptr[esi-2],0 invoke lstrcat,addr szBuffer,lpSz invoke lstrcat,addr szBuffer,addr last popad ret _AddPath endp _Init proc pushad lea esi,adwOutBuffer assume esi:ptr DIRECTORY_INFO xor edx,edx mov eax,dwBytesReturned mov ecx,sizeof DIRECTORY_INFO div ecx mov count,eax mov ecx,eax @@: mov [esi].Flag,TRUE push ecx add esi,sizeof DIRECTORY_INFO pop ecx loop @B popad ret _Init endp _SetFlag proc lpName pushad lea esi,adwOutBuffer assume esi:ptr DIRECTORY_INFO mov ecx,count @@: push ecx invoke lstrcmp,addr [esi].FileName,lpName .if !eax mov [esi].Flag,FALSE .endif pop ecx add esi,sizeof DIRECTORY_INFO loop @B assume esi:nothing popad ret _SetFlag endp _FindHideFile proc local stFindFile:WIN32_FIND_DATA local hFindFile local @szSearch[MAX_PATH]:byte local sysTime :SYSTEMTIME pushad invoke lstrcpy,addr @szSearch,addr szBuffer invoke lstrlen,addr @szSearch lea esi,@szSearch add esi,eax xor eax,eax dec esi mov byte ptr[esi],'/' mov byte ptr[esi+1],'*' mov byte ptr[esi+2],'.' mov byte ptr[esi+3],'*' mov byte ptr[esi+4],0 invoke FindFirstFile,addr @szSearch,addr stFindFile .if eax != INVALID_HANDLE_VALUE mov hFindFile,eax .repeat invoke _SetFlag,addr stFindFile.cFileName invoke FindNextFile,hFindFile,addr stFindFile .until (eax == FALSE) invoke FindClose,hFindFile .endif popad ret _FindHideFile endp start: call _ConsoleInit invoke SetConsoleTextAttribute,hStdOut,FOREGROUND_BLUE+FOREGROUND_INTENSITY invoke _ConsolePrint,addr szVer invoke GetCurrentDirectory,1024,addr szBuffer invoke lstrcat,addr szBuffer,addr last invoke SetConsoleTitle,addr szCaption invoke SetConsoleTextAttribute,hStdOut,FOREGROUND_GREEN @@: invoke _ConsolePrint,addr szBuffer invoke RtlZeroMemory,addr szGet,sizeof szGet invoke _ConsoleRead,addr szGet lea esi,szGet invoke lstrcmp,esi,addr szExit .if !eax invoke _CloseDevice invoke ExitProcess,NULL .endif invoke lstrcmp,esi,addr szCdB .if !eax p2: or FLAG,1 lea esi,szBuffer inc esi inc esi cmp byte ptr[esi],'>' je ll invoke _SubPath invoke _ConsolePrint,addr odoa ll: jmp @B .endif invoke lstrcmp,esi,addr szCdC .if !eax jmp p2 .endif movzx eax,byte ptr[esi] .if eax == 'c' inc esi movzx eax,byte ptr[esi] .if eax == 'd' inc esi movzx eax,byte ptr[esi] .if eax == ' ' inc esi cmp byte ptr[esi],0dh jz L invoke _AddPath,esi L: invoke _ConsolePrint,addr odoa jmp @B .else invoke _ConsolePrint,addr odoa jmp @B .endif .else dec esi .endif .endif invoke lstrcmp,esi,addr szDir .if !eax L1: invoke _LoadDriver .if !eax invoke _CloseDevice jmp L1 .endif invoke lstrcpy,addr inBuffer,addr szBuffer invoke lstrlen,addr inBuffer lea esi,inBuffer add esi,eax dec esi mov byte ptr[esi],'/' invoke RtlZeroMemory,addr adwOutBuffer,sizeof adwOutBuffer invoke DeviceIoControl,hDevice, IOCTL_GET_DIRECTORY_INFO, addr inBuffer,sizeof inBuffer, / addr adwOutBuffer, sizeof adwOutBuffer, addr dwBytesReturned, NULL .if ( eax != 0 ) && ( dwBytesReturned != 0 ) invoke _Init invoke _FindHideFile invoke _PrintFileInfo invoke _ConsolePrint,addr odoa jmp @B .else invoke _ConsolePrint,addr szFail jmp @B .endif .endif inc esi invoke lstrcmp,esi,addr szRoot dec esi .if !eax lea edi,szBuffer invoke RtlZeroMemory,edi,sizeof szBuffer lodsb .if al>60h sub al,20H .endif mov byte ptr[edi],al lodsb mov byte ptr[edi+1],al mov al,'/' inc edi inc edi stosb mov al,'>' stosb invoke _ConsolePrint,addr odoa jmp @B .endif invoke _ConsolePrint,addr szError invoke _ConsolePrint,addr odoa jmp @B end start 文件common.inc: IOCTL_GET_DIRECTORY_INFO equ CTL_CODE(FILE_DEVICE_UNKNOWN, 800h, METHOD_BUFFERED, FILE_READ_ACCESS + FILE_WRITE_ACCESS) FILE_DIRECTORY_INFORMATION STRUCT ; sizeof = 48h NextEntryOffset DWORD ? FileIndex DWORD ? CreationTime LARGE_INTEGER <> LastAccessTime LARGE_INTEGER <> LastWriteTime LARGE_INTEGER <> ChangeTime LARGE_INTEGER <> EndOfFile LARGE_INTEGER <> AllocationSize LARGE_INTEGER <> FileAttributes DWORD ? FileNameLength DWORD ? FileName WORD 1 dup(?) ; WCHAR WORD 3 dup(?) ; padding FILE_DIRECTORY_INFORMATION ENDS PFILE_DIRECTORY_INFORMATION typedef ptr FILE_DIRECTORY_INFORMATION DIRECTORY_INFO STRUCT FileName DB 50 dup(?) CreationTime LARGE_INTEGER <> EndOfFile LARGE_INTEGER <> FileAttributes DWORD ? Flag DWORD ? DIRECTORY_INFO ENDS 参考资料: (1)Windows平台内核级文件访问 http://www.retcvc.com/cgi-bin/to ... pic=1113&show=0 (2)好象是Windows源代码http://www.koders.com/c/fid304D9 ... B5FABA820B185B.aspx (3)Rajeev Nagar, "Windows NT File System Internals. A Developer's Guide", O'Reilly |
相关推荐
utf8-kernel-2.6.22.5-fonts-1.patch.bz2
utf8-kernel-2.6.22.5-fonts-1.patch.bz2
Linux应用程序、shell脚本程序、驱动程序参数传递的方法
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……/bin/bashecho "Shell 传递参数!echo "文件名:$0";echo "第一个参数为:$1";echo "第二个参数为:$2";echo "第三个参数为:$3";
内核级的手动杀毒、进程管理工具 PowerTool_4.2_PortableSoft
内核级的手动杀毒、进程管理工具 PowerTool_4.2_PortableSoft
shell脚本学习——实战案例
一、监控一个主机的存活状态 方案1 [root@localhost AnLi]# sh ping.sh 192.168.3.222 192.168.3.222 is up [root@localhost AnLi]# sh ping.sh 192.168.3.223 192.168.3.223 is down [root@localhost AnLi]# cat ping.sh #!/bin/bash # ***************************************************
一款改自IPHook的IP数据包监控过滤程序
一款改自IPHook的IP数据包监控过滤程序 By ccc 2009-6-13 完成(ch2zh1@tom.com) IP包过滤程序采用IPHook驱动器程序,在内核层用钩子回调函数(IpHookFilter)勾住系统自带的IP过滤驱动器(System32\Drivers\IpFltDrv.sys),从而返回过滤驱动器传输的所有IP包数据。可以通过回调函数的返回值(PF_DROP、PF_FORWARD、PF_PASS),指示滤波驱动器对包的处理,是抛弃还是通过。 应用启动驱动器过程可以使用驱动器的安装,或使用系统的服务控制器(ServiceControl)直接启动和停止驱动程序。 服务控制器利用OpenSCManager等服务控制函数控制驱动程序的加载与卸载。这就使得应用程序可以在运行时自动加载和卸载需要的驱动程序。而不必设置驱动程序的安装过程。 初始的IPHook.sys只提供了IP包的监视过程即,仅仅返回IP头信息。在应用中解释并显示这个头信息。经过写改的IPHook增加了对IP包的过滤处理,有几个设置命令: START_IP_HOOK :启动钩子过滤命令,建立连接IP滤波器的回调函数(原始命令) STOP_IP_HOOK :停止钩子过滤命令,撤销IP滤波器回调函数(原始命令) ADD_IP_HOOKADDR :添加过滤IP地址,回调函数判断IP包,以决定是放弃还是通过(新命令) DEL_IP_HOOKADDR :删除过滤IP地址(新命令) ADD_IP_HOOKPORT :添加过滤端口号(新命令) DEL_IP_HOOKPORT :删除过滤端口号(新命令) ADD_IP_OVER_HOOK :添加置换的IP地址,用于对指定目的的IP包置换源地址和端口号(New) DEL_IP_OVER_HOOK :取消IP地址置换。(New) 应用程序可一次设置和删除对个滤波地址和端口号。对于重复设置,IPHook可以正确识别并加以剔除。这是一个演示程序主要想说明windows2000驱动程序编程过程,及应用自动加载和卸载驱动的方式。 驱动程序的源码在DrvChecked.rar中,要想正确编译,必须安装windows2000 DDK,并在VS2003下设置包含目录指向DDK的目录,库目录也要指向DDK的库目录: C:\NTDDK\inc C:\NTDDK\inc\ddk C:\NTDDK\libchk\i386 并且在排列上一定要排在头两个位置上。 这个驱动程序在VC++下是可以正确编译通过的。驱动程序名:DrvChecked.sys。使用时应该改为:iphook.sys。delphi下的应用程序为:IPPacketMonitor.exe,它使用IPHook.sys。 任何人可以自己编译和修改这个驱动程序,使之能够按照一定的方式运行,这里给出的只是本人的一个想法,希望能给各位带来一点帮助。任何应用程序都可以想打开文件一样使用这个驱动程序,关于使用方法请参考Release Notes.htm提供的线索。 有什么问题和建议请电邮:ch2zh1@tom.com
自己写的shell源码
这是我自制的linux shell 想学shell的可以看一下,里面包含了许多有关linux命令,目录切换,多进程的操作。。。
一个内核级的SHELL工具
驱动部分;@echo off;goto make;********************************************************************;author :dge;homepage:http://llfdge.googlepages.com/;date :2007.3.16;**********************************
DotNetFX-NET Framework 4.5.2
.NET Framework 4.5.2 是由微软开发的一款强大的应用程序框架,作为Windows操作系统上的核心组件,
KernelSU Next终极指南:10分钟掌握内核级Android权限管理
在Android系统定制和深度优化的世界里,内核级root解决方案一直是最专业、最稳定的选择。KernelSU Next作为一款基于内核的高级root工具,为技术爱好者和开发者提供了前所未有的Android权限管理能力。这款内核级root解决方案通过直接在Linux内核层实现权限控制,避免了传统root方法对系统稳定性的破坏,让Android系统定制变得更加安全可靠。 ## 核心概念解析:内核级
海康VisionMaster零代码开发实战:从PLC工程师到视觉专家的捷径
本文为PLC工程师提供了利用海康VisionMaster视觉平台实现零代码视觉开发的实战指南。文章详细阐述了如何通过图形化流程设计替代传统编程,快速搭建视觉检测应用,并实现与PLC的无缝通讯,是工程师从设备控制迈向视觉系统集成的有效捷径。
tcllib2.0 package - csv
tcl lib 的csv库
KernelSU Next 内核级Root解决方案实战指南
KernelSU Next作为Android设备的内核级root解决方案,为开发者和技术爱好者提供了基于内核的系统权限管理能力。这款内核级root工具通过创新的内核模块技术实现安全可控的权限管理,支持从Android 4.4到6.6的内核版本,为ARM64、ARMv7和x86_64架构提供完整的root环境部署方案。 ## 🔍 技术架构深度解析 KernelSU Next的核心价值在于其内核
【无标题】STM32F767串口空闲中断+DMA实现不定帧长度的接收
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、配置串口与DMA二、空闲中断服务函数二.串口+DMA发送三、主函数总结 前言 提示:这里可以添加本文要记录的大概内容: 使用STM32F767实现串口空闲中断+DMA传输接收不定帧长度数据,以及当中可能遇到的错误总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、配置串口与DMA //硬件模块配置可直接通过CUBEMX配置 void MX_USART1_UART_Init(void) { huart1.In.
linux shell脚本攻略第3版_那些被遗忘的 UNIX/Linux 经典著作
来自:程序员书库(ID:OpenSourceTop) 编译书单来自:https://medium.com/@sarahelson81/top-6-books-for-unix-and-shell-scripting-beginners-d3e4de7af7a6你可以通过许多种不同的方式去学习新的编程语言,有些人关注博客,有些人看在线教程,而有些人则喜欢安安静静坐下来读一本好书,就我个人而言,我还是...
华为OD机试真题 新系统2026-04-01 Java&Go 实现【勇攀数字高峰】
请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。
学习笔记:TF卡启动荔枝派Nano(全志F1C200S)
荔枝派Nano编译Kernel报错报错内容如下编译烧录 报错内容如下 No controllers found No ethernet found. 从这些报错我真没看从出啥问题,也是在网上找,说是没有找到flash,是因为淘宝买的板子更换了flash,需要在u-boot里面重新适配型号: 板子的型号为xt25f128,但是实际u-boot的配置里面不是需要重新更改: u-boot/arch/arm/dts/suniv-f1c100s-licheepi-nano.dts &spi0 { pin
Shell命令的七层解码:从输入到系统调用的完整执行链
Shell命令不是简单的功能调用,而是字符流经终端缓冲、行编辑、词法语法分析、变量扩展、重定向设置直至execve系统调用的精密七层转化过程。理解这一底层执行链,是掌握Linux命令行为、诊断管道阻塞、修复重定向失效、规避子shell变量丢失等高频问题的技术根基。尤其在涉及adb shell权限控制、CTF反弹shell构造、WSL磁盘释放异常等跨层场景时,必须回归bash解释器的逐层处理逻辑与内核接口契约。本文聚焦shell命令的本质机制,揭示从用户输入到进程执行的完整数据流路径。
YOLOv8实战教程:从模型训练到改进的全流程指南
回顾这段YOLOv8的实战历程,从最初的模型训练到后来的各种改进尝试,我深刻体会到目标检测技术的魅力与挑战。YOLOv8作为一款优秀的框架,不仅易用性强,而且具备很强的可扩展性,让我能在其基础上不断创新。未来,我计划在以下几个方向继续探索:一是将YOLOv8与多模态技术结合,尝试实现图像与文本的联合目标检测;二是深入研究自监督学习在YOLOv8中的应用,减少对标注数据的依赖;三是探索YOLOv8在更广泛场景的部署,如机器人、自动驾驶等。
PowerToys File Locksmith:技术架构与文件锁定检测的深度解析
在Windows系统管理实践中,文件锁定问题一直是困扰开发者和系统管理员的技术难题。当用户尝试删除、移动或修改文件时,系统提示"文件正在被其他程序使用",却无法快速定位具体是哪个进程持有文件句柄。Microsoft PowerToys中的File Locksmith模块通过深入Windows内核级别的技术实现,为解决这一经典问题提供了专业级解决方案。 ## 文件锁定检测的技术挑战与架构设计原理
手势识别器:实现手部动作识别器
在本篇文章中,我们将使用Python来实现一个简单的手部动作识别器。然后,我们通过循环从摄像头获取每一帧图像,并对每一帧图像进行处理。我们提取手部关键点并计算手势的特征向量,然后将其添加到特征列表和标签列表中。接下来,我们再次从摄像头获取每一帧图像,并进行手势识别。我们提取手部关键点并计算手势的特征向量,然后使用训练好的分类器来预测手势,并在图像上显示出来。在这个实现中,我们将使用MediaPipe库来检测和跟踪手部关键点,然后使用K最近邻(K-Nearest Neighbors)算法对手势进行分类。
opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案
本文主要介绍了opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用opencode的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案
Linux U-Boot 与内核启动流程深度解析:从上电到 Shell 的完整之旅
U-Boot (Das U-Boot) 是遵循 GPL 条款的开放源代码项目,由 DENX 软件工程中心的 Wolfgang Denk 创建。它支持多种架构(ARM、PowerPC、MIPS、x86 等)和多种板卡。硬件初始化(CPU、内存、外设)引导操作系统加载提供交互式命令行支持网络启动(TFTP、NFS)支持多种文件系统(FAT、EXT4、JFFS2)启动阶段:上电 → ROM → SPL → U-Boot → 内核 → 文件系统U-Boot 功能。
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
KernelSU实战指南:从入门到精通的三大核心问题解决方案
KernelSU作为Android设备上基于内核的root解决方案,以其独特的内核级权限管理能力和模块化设计赢得了众多开发者和高级用户的青睐。不同于传统的用户空间root工具,KernelSU直接在内核层面工作,提供了更加稳定和强大的系统控制能力。本文将针对KernelSU使用过程中最常见的三大核心问题,提供详细的解决方案和实践指导。 ## 问题识别:为什么我的设备不支持KernelSU? 许
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
KernelSU Next 模块开发实战:从零开始构建你的第一个内核模块
KernelSU Next 是一款基于内核的 Android 设备 Root 解决方案,它为开发者提供了强大的模块化扩展能力。本文将为你详细介绍如何从零开始构建你的第一个 KernelSU Next 内核模块,涵盖模块结构、开发流程和最佳实践。无论你是 Android 开发者还是系统爱好者,通过本指南都能快速掌握 KernelSU Next 模块开发的核心技能。 ## 什么是 KernelSU
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
如何在10分钟内高效禁用Windows安全机制:EfiGuard专业配置实战方案
EfiGuard是一款强大的UEFI启动工具,能够在系统启动时直接禁用Windows的PatchGuard和驱动程序签名强制(DSE),为安全研究人员和系统管理员提供深度系统控制能力。本文将详细介绍如何快速配置EfiGuard,实现高效的系统安全机制绕过,同时提供多种实现路径和最佳实践建议。 ## 问题场景:传统安全机制绕过的局限性 许多安全研究人员和系统开发者在进行内核级调试或驱动开发时,都
8549



被折叠的 条评论
为什么被折叠?



