- 博客(28)
- 资源 (1)
- 收藏
- 关注
转载 驱动开发中应该注意的事项
1. 一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度例程返回 STATUS_PENDING。 2. 一定不要通过中断服务例程 (ISR) 调用 KeSynchronizeExecution。 它会使系统死锁。 3. 一定不要将 DeviceObject->Flags 设置为 DO_BUFFERED_IO 和 DO_D
2015-03-03 23:18:00 2025
原创 关于*P双机调试的学习
关于*P双机调试的学习 一:相关基础知识: 根据软件调试这本书上说的,Windows启动过程如下图: 系统一共调用了两次KdInitSystem()函数。 第一次调用KdInitSystem会初始化一下全局变量: 1.KdPitchDebugger:布尔类型,用来表示是否显式抑制内核调试。当启动选项中包含/DEBUG选项时,这个变量会被设置为真。
2015-01-01 00:20:54 4589 3
转载 ShellCode欺骗的艺术!
网上看到一份ShellCode 非常NICE ,用来抛砖引玉! sub sp,0x440 xor ebx,ebx push ebx push 0x74736577 push 0x6c696166 mov eax,esp push ebx push eax push eax push ebx mov e
2014-12-23 00:35:42 1587 2
原创 Win7 内核重载 1 ——内核版PELoader
重载重点,其实就是自己实现一个山寨版的Windows PELoader ,重载其实就是将一个模块自己重新加载一份到别的内存,运行它。所谓内核重载,则是将内核文件即:ntkrnlpa.exe 自己加载一份到内存,并运行它,这样的好处可以避免一切HOOK,如SSDT ,InLineHook 等等,原理就是HOOK继续HOOK主原来内核,但是实际上Windows走的是我们自己的内核。
2014-12-19 20:50:54 8463 1
原创 内核调试学习笔记
内核调试学习笔记 第一次调用KdInitSystem会初始化一下全局变量: 1.KdPitchDebugger:布尔类型,用来表示是否显式抑制内核调试。当启动选项中包含/DEBUG选项时,这个变量会被设置为真。2.KdDeBuggerEnable:布尔类型,用来表示内核调试是否被启用。当启动选项中包含/DEBUG或者/DEBUGPORT 而且不包含/NODEBUG时,这个变量会被设
2014-12-17 10:59:21 2269
原创 记录一下 关于进程隐藏摘链操作的问题
隐藏进程有好多方法,抹除句柄表,抹除csrss中的注册进程信息,摘除Active链等等,今天来记录一下摘链注意的问题。网上有很多摘链的DEMO,至于稳定性。。。。时不时的蓝~~原因为什么,很多代码都只是一味的拆除了相应进程的链表,但是却没有考虑到系统在操作动态链表的一系列问题,先看一下WRK中的销毁进程的操作,目录:WRK-v1.2\base\ntos\ps\p
2014-12-09 00:28:13 2266
原创 X64下的解析句柄表
一:X64下的句柄表的查找:关于PspCidTable的寻找,我是通过PsLookupProcessByProcessId查找特征码寻找pspCidTable和32位没什么区别。疑问:我想在KPCR中的KdVersionBlock中寻找,但是64位系统不知道为什么总是NULL,各位牛牛知道的求科普~寻找PspCidTable:SIZE_T FindCidTable(){SI
2014-12-07 17:50:16 3512 2
原创 Windows分页管理机制的学习(一)实践2
(二)针对开启PAE模式来进行分析测试机器Win7 32位系统:(Dbgview.exe程序的线性(虚拟)地址与物理地址的对应)根据读INTEL手册可知,开启了PAE模式后线性(虚拟)地址的结构发生了变化(开启PAE后PDE共4*4kb,每项8byte ): 30~31位变成了PDPTE 首先在虚拟机中打开OD,加载Dbgview.exe记录下入口点地址:00415757
2014-11-09 21:11:46 900
原创 Windows分页管理机制的学习(一)实践1
一)先来针对未开启PAE模式来进行分析测试机器XP 32位系统:(Dbgview.exe程序的线性(虚拟)地址与物理地址的对应) 这里关闭了PAE模式。 我先用OD载入Dbgview.exe程序,并且运行,看到程序入口点的线性(虚拟)地址:004153B7==> 00000000 01000001 01010011 10110111 根据INTEL手册中的定义
2014-11-08 21:06:06 1878
原创 Windows分页管理机制的学习(一)理论部分
PAE模式什么是PAE模式:PAE,物理地址扩展,是基于x86 的服务器的一种功能,它使运行 Windows Server 2003, Enterprise Edition 和 Windows Server 2003,Datacenter Edition 的计算机可以支持4GB 以上物理内存。物理地址扩展 (PAE) 允许将最多64GB 的物理内存用作常规的4 KB 页面,并扩展内核能使用的位
2014-11-08 20:55:57 1990
原创 R3修改线程上下文EIP实现的无模块注入
#include "stdafx.h"#include #include using std::cin;DWORD dwOldEip = 0;DWORD funRemote = 0;BYTE shellCode[25] = { 0x68, 0x78, 0x56, 0x34, 0x12, //push
2014-11-07 11:33:35 4064
原创 关于PspCidTable
PspCidTable为一个全局变量,其格式与普通的句柄表是完全一样的.但它与每个进程私有的句柄表有以下不同: 1.PspCidTable中存放的对象是系统中所有的进线程对象指针,其索引就是PID和CID 2.PspCidTable中存放是对象体(指向EPROCESS和ETHREAD),而每个进程私有的句柄表则存放的是对象头(OBJECT_HEADER) 3.PspCidTable
2014-10-20 00:36:49 920
原创 Windows句柄表学习笔记
遍历系统进程有一种方法就是通过解析句柄表来遍历,于是学习了一下Windows句柄表。句柄表位于EPROCESS结构的+0x0f4 偏移处(win7x86),先来看一下句柄表的结构: kd> dt 0x83d58fc0 _HANDLE_TABLEnt!_HANDLE_TABLE +0x000 TableCode : 0x94bac001 //句柄表 +0x0
2014-10-17 23:16:37 2103
原创 《Windows内核原理与实现》第三章学习笔记---KPROCESS学习
typedef struct _KPROCESS { // // The dispatch header and profile listhead are fairly infrequently // referenced. // DISPATCHER_HEADER Header; //表明KPROCESS也是一个分发器对象(dispatcher o
2014-10-16 00:48:10 2892
转载 Windows 文件过滤驱动经验总结(转)
1、获得文件全路径以及判断时机除在所有 IRP_MJ_XXX 之前自己从头创建 IRP 发送到下层设备查询全路径外,不要尝试在 IRP_MJ_CREATE 以外的地方获得全路径,因为只有在 IRP_MJ_CREATE中才会使用 ObCreateObject() 来建立一个有效的 FILE_OBJECT。而在 IRP_READIRP_WRITE 中它们是直接操作 FCB (Fil
2014-06-12 09:20:21 2101
转载 NTSTATUS codes 会有用的
00000000STATUS_SUCCESS00000000STATUS_WAIT_000000001STATUS_WAIT_100000002STATUS_WAIT_200000003STATUS_WAIT_30000003FSTATUS_WAIT_63
2014-06-06 18:41:17 1469
原创 Win7 64位的SSDTHOOK(2)---64位SSDT hook的实现
上篇文章知道了寻找SSDT表的方法,这篇记录一下如何实现SSDT表的Hook。
2014-05-23 22:48:51 11491 2
原创 Win7 64位的SSDTHOOK(1)---SSDT表的寻找
最近在学习64位驱动,涉及到了SSDT的知识,结果发现64位下的SSDT和32位下的SSDT有所不同。开始发现64位下的KeServiceDescriptorTable是未导出的函数。首先要找到KeServiceDescriptorTable的地址。方法1:读取c0000082寄存器 kd> rdmsr c0000082 msr[c0000082] = fffff800
2014-05-21 22:48:41 6805 1
转载 一种躲避运行时代码校验的方法(Reload And Run)
转自看雪。 我们有时候需要对运行中的程序打内存补丁,或者对它的代码挂一些钩子之类的工作。但是现在相当多软件进行了运行时的代码检测。一旦发现内存中的代码被修改掉,就会进行处理。本文介绍了一种比较特别的办法,用于通过这些检测。 首先需要说一下做运行时代码校验的方法。一般来说,校验者需要取得当前模块的基地址,通过分析PE结构,获得代码节的偏移和大小,然后对内存中的代码进行CRC
2014-05-02 21:26:58 2587 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人