
驱动学习
文章平均质量分 88
pandamac
关注移动安全,写一些分享
展开
-
郁金香驱动笔记
配置好双机调试DriverEntry设置断点 __asm int 3;加载驱动 断下u 查看 汇编F8 步入F10 步过shift+F11 跳出函数 返回到上层callF5 运行bp 下CC断点 bp 模块名!函数名bl 显示断点bd 禁用断点bc 清除断点a 地址 之后 输入指令 之后回车WINGDBGSSDT的全称是System Services Desc原创 2013-08-20 17:56:58 · 832 阅读 · 0 评论 -
内核模式 定时器学习
1)i/0定时器例程 每间隔1S 调用一次I/O定时器例程 可以定义初始值 为N 每次进入定时器例程 计数-- 就变化成 NS定时器2)DPC例程 MS级别间隔,US级别间隔I/O定时器 学习NTSTATUS IoInitializeTimer( IN PDEVICE_OBJECT DeviceObject, //I/O定时器关联 设备对原创 2013-09-24 16:25:39 · 1114 阅读 · 0 评论 -
SSDT结构
SSDT的全称是System Services Descriptor Table,系统服务描述符表 在ntoskrnl.exe导出KeServiceDescriptorTable 这个表typedef struct ServiceDescriptorTable { PVOID ServiceTableBase; //System Service Dispatch Table 的基地址转载 2013-10-24 23:00:27 · 660 阅读 · 0 评论 -
寒江独钓-键盘过滤学习1传统型的键盘过滤
最顶层的设备对象是驱动 Kbdclass 生成的设备对象 中间层的设备对象是驱动i8042prt生成的设备对象最底层的设备对象是驱动ACPI生成的设备对象键盘过滤分为几种方式:1 传统型的键盘过滤 (本次笔记)2 修改IDT + IOAPIC重定位表截获PS2键盘中断的例子CPP文件:#include #include #include "ctrl原创 2013-12-07 12:14:49 · 1261 阅读 · 0 评论 -
寒江独钓-键盘过滤学习2修改IDT + IOAPIC重定位表截获PS2键盘中断
分析在源码上直接上源码吧读取出了扫描码 其实就知道了 按了哪些健了 一般按一下 有两个 扫描码 一个是 按下 一个是弹起我将原来的源码改写可以输出 ASCII码····························主要是如果台式机的USB键盘可能就不支持了 但想来大多数都是用的 PS/2系列键盘的吧?修改IDT-- 说白了就是HO原创 2013-12-07 14:40:27 · 1945 阅读 · 0 评论 -
寒江独钓-串口过滤
直接上源码注释什么的都在源码上:因为没有 打印机 实现 下载程序 超级终端 可以看到http://download.youkuaiyun.com/download/yfly13/863785#include #define NTSTRSAFE_LIB#include #ifndef SetFlag#define SetFlag(_F,_SF) ((_F)原创 2013-12-05 21:07:05 · 728 阅读 · 0 评论 -
派遣函数学习2)直接读写
直接方式读写设备,操作系统会将用户模式下的缓冲区锁住。然后操作系统将这段缓冲区在内核模式地址再次映射一遍这样 ,用户模式的缓冲区和内核模式的缓冲区指向的是同一区域的物理内存。在创建完设备对象后,在设置设备对象的时候,设置为 DO_DIRECT_IO 而不是DO_BUFFERED //创建设备 status = IoCreateDevice( pDriverObject,原创 2013-09-05 17:43:33 · 626 阅读 · 0 评论 -
ObReferenceObjectByName 函数解析
一、由于ObReferenceObjectByName没有文档化,故在使用前先做声明:#ifdef __cplusplusextern "C"{#endif#include NTKERNELAPINTSTATUSObReferenceObjectByName( IN PUNICODE_STRING ObjectName, IN ULONG Attributes,转载 2013-12-05 22:22:23 · 734 阅读 · 0 评论 -
WDF框架下 硬盘的虚拟
什么是WDF驱动开发框架?如所周知,自Windows 2000开始,开发驱动程序必以WDM为基础的,但其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易。为改善这种局面,微软推出了新的驱动程序开发环境。WDF是Vista及其以后OS的驱动模型,意为Windows Driver Foundation,此模型比WDM更先进、合理(微软是这样说的),将WDF中关于电源、PnP等一些复杂的细原创 2014-03-03 14:06:19 · 707 阅读 · 0 评论 -
枚举所有进程所有模块,删除制定进程
环境: VS2008中配置WDK7600驱动开发环境包含文件 #include #include 需要在 #include 之前 那么就不会出错程序大体流程:PsGetCurrentProcess() 得到本进程EPROCESS 通过EPROCESS +0x174 得到进程名通过EPROCESS +0x84 得到进程ID Ps原创 2014-03-31 15:27:24 · 1682 阅读 · 0 评论 -
内核漏洞学习
一个内核漏洞的学习过程: 漏洞重现,漏洞分析,漏洞利用,漏洞总结原创 2014-05-05 21:52:32 · 679 阅读 · 0 评论 -
VS2012、VS2013 WDK7.1驱动开发模板
转载至 http://bbs.pediy.com/showthread.php?p=1289293在vs2012、vs2013下一直没找到好的开发winxp~win7驱动的模板,于是乎自己写了个~。还发现了一个小秘密,vs2012、vs2013已经支持导出vc++的模板了。不用再用那个自定义向导写模板了~注意:本模板配合WDK 7.1(WINDDK 7600.16385.转载 2014-09-20 22:59:30 · 2483 阅读 · 0 评论 -
windbg各种命令学习
1 dt命令:dt _peb 直接显示lkd> dt _pebnt!_PEB +0x000 InheritedAddressSpace : UChar +0x001 ReadImageFileExecOptions : UChar +0x002 BeingDebugged : UChar +0x003 SpareBool : UChar原创 2013-11-23 13:42:34 · 1448 阅读 · 0 评论 -
中断服务例程 学习
设备触发中断后进入的例程当进入中断服务例程后,IRQL会提升到设备对应的IRQL级别传统PC用2片 中断控制器8259A 芯片级联-》16个中断信号源 0-15 多个设备可以共享一个中断号新的PC使用新的中断控制器,将中断信号扩展到24个Windows 将中断的概念继续拧扩展 32个中断级别 IRQL0-2 级别 PASSIVE_LEVEL 到 DISPATCH原创 2013-09-22 23:32:43 · 1398 阅读 · 0 评论 -
自定义StartIO
使用系统定义的StartIO例程只能使用一个队列,这个队列会将所有的IRP进行处理 读写操作 都会混在一起进行串行处理,但我们需要将读写分别进行串行处理 ,就需要自定义StartIo当自定义StartIO时,需要我们自己负责”入队“ + ”出队“使用前初始化队列:VOID KeInitializeDeviceQueue(原创 2013-09-22 16:59:33 · 773 阅读 · 0 评论 -
使用VS2010 + VirtualDDK 调试驱动
总的说来比 WINDBG要简单的多可以看到详细的调试内容但是好像不知道怎么弄成一般的工程···························待定···········今天玩了一下 感觉还是有点麻烦···················网站:http://techird.blog.163.com/blog/static/1215640362011112385241568/转载 2013-09-22 16:14:50 · 698 阅读 · 0 评论 -
WDM驱动笔记
WDM的 DRIVER_OBJECT 不同于网上的 typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; // // The following links all of the devices created by a single driver // together on a li原创 2013-08-21 12:14:48 · 577 阅读 · 0 评论 -
驱动 内存管理 学习
H头文件:#pragma once //只要在头文件的最开始加入这条杂注, //就能够保证头文件只被编译一次#ifdef __cplusplusextern "C"{#endif#include #ifdef __cplusplus}#endif#define PAGECODE code_seg("PAGE")#define LOCKEDCODE code_seg原创 2013-08-24 22:20:45 · 613 阅读 · 0 评论 -
派遣函数学习3)其他方式读写设备
首先 既不设置 DO_DIRECT_IO / DO_BUFFER_IO派遣函数直接读写应用程序提供的缓冲区地址。 直接操应用程序的缓冲区地址是很危险的只有驱动程序与应用程序运行再相同线程上下文的时候,才能用这种方式探测可读可写用: ProbeForWrite + try 块NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pD原创 2013-09-05 21:39:20 · 599 阅读 · 0 评论 -
内核模式下的字符串操作
代码: KdPrint(("ANSI:\n")); CHAR *string = "Hello"; KdPrint(("%s\n",string)); WCHAR *string2 = L"Hello2"; KdPrint(("%S\n",string2)); ANSI_STRING ansistring ; CHAR *charstring = "hello"; Rtl原创 2013-08-31 09:33:19 · 721 阅读 · 0 评论 -
内核模式 文件操作
文件创建:#pragma INITCODEVOID MyCreaFile(){ OBJECT_ATTRIBUTES obj_attr; UNICODE_STRING Obj_Attr_Name; IO_STATUS_BLOCK iostatus; HANDLE hFile; RtlInitUnicodeString(&Obj_Attr_Name,L"\\??\\C:\\1.log原创 2013-08-31 10:21:29 · 686 阅读 · 0 评论 -
内核模式 注册表编程
//////////////////////////////////////////////////////////////////////////////创建或打开某注册表项目:#define MY_REG_SOFTWARE_KEY_NAME L"\\Registry\\Machine\\Software\\Zhangfan"#pragma INITCODEVOID CreateRe原创 2013-09-02 15:20:51 · 962 阅读 · 0 评论 -
HOOK地址还原
H头文件////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////typedef struct _ServiceDescriptorTable { PVOID Servi原创 2013-09-09 23:37:45 · 1050 阅读 · 0 评论 -
派遣函数学习1)缓冲区方式读写
符号 \??\HelloDDK -》\\.\\??\HelloDDK ->\\.\HelloDDK -> C语言字符串 \\\\.\\HelloDDKHANDLE hDevice = CreateFile("\\\\.\\HelloDDK", GENERIC_READ | GENERIC_WRITE, 0, // share mode原创 2013-09-05 16:31:30 · 678 阅读 · 0 评论 -
驱动程序的同步学习
中断请求: IRQ1)外部中断=硬件产生的中断 一般16个中断信号2)由软件指令int n 产生的中断可编程中断控制器: PIC高级可编程控制器 APIC 兼容PIC IRQ增加到了24个 设备管理器可以查看到这些每个IRQ有个字的优先级别 正在运行的线程随时可以被中断打断进入中断处理程序中断请求级 IRQL WINDOWS将中断的概念进行原创 2013-09-13 17:29:30 · 918 阅读 · 0 评论 -
应用程序对设备 + IRP 的同步异步学习
对设备的的操作转换为IRP请求,而一般IRP都是由操作系统异步发送的。异步处理IRP有助于提高效率,但有时会导致逻辑错误,需要将异步的IRP进行同步化StartIOl例程,使用中断服务例程等。应用程序对设备的同步+异步操作大部分IRP是由应用=程序的WIN32 API 函数发起的。这些API EG: ReadFile,WriteFile,DeviceIOControl原创 2013-09-21 23:45:35 · 768 阅读 · 0 评论 -
StartIO例程学习
能够保证各个并行的IRP顺序执行,即串行化。很多时候,对设备的操作必须是串行化,驱动程序有必要将并行的请求变成串行的请求,需要用到队列。并行运行(函数执行交织在一起) 如果想一次处理每个IRP,必须采用队列将处理串行化。采用“先来先服务”原则typedef struct _KDEVICE_QUEUE {原创 2013-09-22 14:23:19 · 1025 阅读 · 0 评论 -
Windbg符号设置
使用Windbg第一步要做的,就是设置符号文件的位置,就是pdb文件。符号路径设置:Ctrl+S在弹出的窗口中输入你的符号路径,路径的格式只要符合Windows操作系统路径格式即可,路径可以多个,中间以分号间隔,d:\symbols\win2k3_en;Windbg可以自动到Microsoft的服务器上下载符号表文件(.dbg或.pdb,有时DLL和EXE也会下载),只要在符合表路转载 2013-09-22 14:26:02 · 801 阅读 · 0 评论 -
IO设备控制IOCTL操作
除了 读设备和 写设备 外 还可以有一个API DeviceIoControl 操作设备 创建一个IRP_MJ_DEVICE_CONTROL 类型的IRP DeviceIoControlhDevice Long,设备句柄dwIoControlCode Long,应用程序调用驱动程序的控制命令,就是IOCTL_XXX IOCTLs。lpInBuffer Any,应用程序传递给驱动原创 2013-09-07 12:40:46 · 1043 阅读 · 0 评论