郁金香驱动笔记
来源:互联网 发布:淘宝外包公司有哪些 编辑:程序博客网 时间:2024/04/30 15:04
配置好双机调试 DriverEntry设置断点 __asm int 3; 加载驱动 断下 u 查看 汇编 F8 步入 F10 步过 shift+F11 跳出函数 返回到上层call F5 运行 bp 下CC断点 bp 模块名!函数名 bl 显示断点 bd 禁用断点 bc 清除断点 a 地址 之后 输入指令 之后回车 WINGDBG SSDT的全称是System Services Descriptor Table,系统服务描述符表 在ntoskrnl.exe导出KeServiceDescriptorTable 这个表 dd poi[KeServiceDescriptorTable]+索引号*4 显示 Kernel Detective v1.4.1工具 查看 索引号 索引号 计算 : 找到什么名称的函数 在WINDBG中 u zw函数 EG: u zwOpenFile 看到mov eax,74h 对指定源代码处下断: bp `123!main.cpp:23` 最关键的一点,使用"`"而不是"'"
typedef struct ServiceDescriptorTable { PVOID ServiceTableBase; //System Service Dispatch Table 的基地址 PVOID ServiceCounterTable(0); //包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。 unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。 PVOID ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表 } 用windbg 了解SSDT结构: windbg符号路径设置: srv*D:\WINDDK\symbols*http://msdl.microsoft.com/download/symbols如何向内核地址写入自己代码 mov [xxx],xx // 1、如何向SSDT表写入内容呢,这个表是被保护的 正常情况不能被写入 方法有三(1) 更改注册表 -最简单的做法HKLM\SYSTEM\CurrentControlset\Control\SessionManger\MemoryManagement\EnforceWriteProtection=0与HKLM\SYSTEM\CurrentControlset\Control\SessionManger\MemoryManagement\DisablePagingExecutive=1(2)改变CR0寄存器的第1位wp位 置0-常用 网上流传的(3)通过Memory Descriptor List(MDL) 内存描述符表-正规做法MmCreateMdl 函数 描述某块内存的情况 运用在后面讲解;
这里显示:
下面为编程: 先是函数解释
VOID RtlInitUnicodeString ( IN OUT PUNICODE_STRING DestinationString, IN PCWSTR SourceString );DestinationString 需要初始化的指针PUNICODE_STRINGSourceString指向一个以空结尾的Unicode字符串常量,用这个字符串来初始化DestinationString。 例子PUNICODE_STRING s;RtlInitUnicodeString(s, L"宽字符");//s=L"宽字符";
IoCreateDevice 为驱动创建一个设备对象 格式如下:NTSTATUS IoCreateDevice( IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName OPTIONAL, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject );参数:DriverObject为指针调用驱动程序对象。每个驱动程序接收一个参数的指针,并将司机反对其DriverEntry例程。波分复用功能和筛选器驱动程序也可领取的AddDevice例程的驱动程序对象的指针。DeviceExtensionSize //0给_DEVICE_OBJECT.DeviceExtension指定内存空间大小,具体看自己定义结构的大小DeviceName设备名字DeviceType设备类型 这里我们用FILE_DEVICE_UNKNOWNDeviceCharacteristics设备特征信息 一般为0Exclusive是否指定设备为独占 是为TRUE,否为FALSEDeviceObject指针变量接收一个指向新创建的DEVICE_OBJECT结构。用来回传数据返回值调用成功会返回 STATUS_SUCCESS 如果出错会返回下列值STATUS_INSUFFICIENT_RESOURCES//资源不足STATUS_OBJECT_NAME_EXISTS //指定对象名存在STATUS_OBJECT_NAME_COLLISION//对象名有冲突
IoCreateSymbolicLink创建一个设备链接。驱动程序虽然有了设备名称,但是这种设备名筄只能在内核 态可见,而对于应用程序是不可见的,因此,驱动需要要暴露一个符号链接,该链接指向真正的设备名称NTSTATUS IoCreateSymbolicLink( IN PUNICODE_STRING SymbolicLinkName, IN PUNICODE_STRING DeviceName );参数:SymbolicLinkNameUnicode字符串指针,是一个用户态可见的名称。DeviceNameUnicode字符串指针,是驱动程序创建的设备对象名称。Return Value如果符号链接创建成功 返回STATUS_SUCCESS
删除符号链接IoDeleteSymbolicLink(symLinkName);VOID IoDeleteDevice( IN PDEVICE_OBJECT DeviceObject );参数DeviceObjectPDEVICE_OBJECT类型的指针,指向需要删除的设备对象无返回值
- 郁金香驱动笔记
- 郁金香
- VS2008环境编译驱动(郁金香教程)
- 郁金香驱动学习>第二课:为驱动添加卸载功能
- 郁金香驱动编程学习>第一课:第一个驱动程序
- 郁金香驱动学习>第三课:添加设备对象
- 游戏数据的捕捉(郁金香学习笔记)
- 郁金香vc++过驱动保护游戏外挂制作教程1-51课全套
- 郁金香vc++过驱动保护游戏外挂制作教程1-51课全套
- 郁金香过驱动保护 编程相关工具下载 delphi vc++ .net vs
- 加拿大渥太华郁金香节
- 荷兰郁金香泡沫
- 荷兰风车 木鞋 郁金香
- 郁金香2013网络vc++
- 驱动笔记
- 驱动笔记
- 驱动笔记
- 驱动笔记
- android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view
- 位操作符(bitwise operator)
- 查询Oracle表空间
- 深入Java单例模式
- android 获取外置SD卡的路径(非挫版)
- 郁金香驱动笔记
- 【on the way】教你五年内买车买房秘诀
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- FTP to HDFS代码示例
- Mono for Android 初学遇到的问题
- MPEG1和MPEG2码流结构分析
- 压力测试工具ab
- android有用代码片段1
- 三元操作符 if-else