笔记
Sunny_wwc
我是菜B
展开
-
windows内核情景分析笔记1.3 IRQL
#define PASSIVE_LEVEL 0#define LOW_LEVEL 0#define APC_LEVEL 1#define DISPATCH_LEVEL 2cpu的一个线程处于某个级别时,其操作就不能受到同级别或者更低级别操作的干扰。PASSIVE_LEVEL 是最低的级别,对应系统结构中较高的层次,cpu运行在用户空间,或者进入内核但是只运行在管理层时,都是这个级别。APC_LEVEL 是为APC函数执行准备时的级别,APC请求相当于用户原创 2010-10-12 15:37:00 · 802 阅读 · 0 评论 -
【转】常见蓝屏错误信息
┌—┐<br />│ 1│<br />└—┘0x0000000A:IRQL_NOT_LESS_OR_EQUAL <br />◆错误分析:重要是由问题的驱动程序、出缺陷或不兼容的硬件与软件造成的. 从技术角度道. 标明在内核模式中存在以太高的进程内部恳求级别(IRQL)拜访其没有权限造访的内存地址. <br />◇解决方案:请用前面引见的解决方案中的2、3、5、8、9方案尝试消除. <br />┌—┐ <br />│ 2│ <br />└—┘0x00000012:TRAP_CAUSE_UNKNOWN <br转载 2011-04-09 16:30:00 · 1264 阅读 · 0 评论 -
apc
NTKERNELAPIVOIDKeInitializeApc ( IN PRKAPC Apc, IN PKTHREAD Thread, IN KAPC_ENVIRONMENT Environment, IN PKKERNEL_ROUTINE KernelRoutine, IN PKRUNDOWN_ROUTINE RundownRoutine OPTIONAL, IN PKNORMAL_ROUTINE NormalRoutine OPTIONAL, IN KPROCE原创 2011-03-15 16:52:00 · 1299 阅读 · 0 评论 -
MmProbeAndLockPages
MmProbeAndLockPages 到底锁定什么?<br />驱动程序有时候需要锁定内存页以使得它们在特定的操作期间驻留在内存中,例如在 DPC 例程中将数据从设备复制到数据缓冲区或者对缓冲区进行 DMA。MmProbeAndLockPages 例程使得一个指定的内存范围驻留(如果尚未驻留),确认内存页允许以指定的访问模式执行指定的操作,并锁定内存中的页以使得它们不能被页交换出去。<br />MmProbeAndLockPages 通过在页帧号 (page frame number) 数据库(描述物理内原创 2011-03-14 16:43:00 · 5763 阅读 · 2 评论 -
枚举PspCidTable利用API
<br />看Windows内核情景分析的时候看到讲PspCidTable中会保存每个进程和线程的CID,就在想可以通过这个表来获取到每个进程的PID及相关信息,然后网上一搜,已经有N多人通过这种方法来获取进程列表了,Iceword也是有这种方法来枚举进程的。Anyway,还是自己实现一遍吧。当然也借鉴了别人的代码。<br />NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)<br />转载 2011-01-19 10:32:00 · 1709 阅读 · 1 评论 -
CsrssWalker
<br /> <br />学习了一下古老的CsrssWalker,写点笔记~~<br />在Csrss.exe中,保存着所有Win32子系统进程的进程信息,这些信息以链表的形式保存。<br />正常情况下,每一个新创建的进程都会通知Csrss.exe,Csrss.exe接收这些信息然后保存起来,所以遍历这个链表就可以得到所有Win32子系统进程的信息。首先就是找链表头了,链表头为CsrssRootProcess,在CSRSRV.DLL导出的函数中有对CsrssRootProcess的操作,因此可以通过CSR转载 2011-01-20 15:50:00 · 1043 阅读 · 0 评论 -
win7对象头那些事儿
<br />http://www.debugman.com/discussion/5239/%E5%8E%9F%E5%88%9Bwin7%E5%8F%AF%E5%8F%98%E5%AF%B9%E8%B1%A1%E5%A4%B4%E7%BB%93%E6%9E%84%E4%B9%8Binfomask%E8%A7%A3%E6%9E%90/<br /> 对Windows对象管理有一定了解的人都知道,在固定对象头(OBJECT_HEADER)前面是一块可变区域,称为可变对象头,它所包含的结构内容并不固定。在Win7之转载 2011-01-18 20:09:00 · 1970 阅读 · 0 评论 -
对象目录相关的
<br />kd> !object /driver/pci<br />Object: 82b9bf38 Type: (82ba33b0) Driver<br /> ObjectHeader: 82b9bf20 (old version)<br /> HandleCount: 0 PointerCount: 81<br /> Directory Object: e1013880 Name: PCI<br />kd> dt _OBJECT_HEADER 82b9bf38-0x18 <br原创 2011-01-13 16:29:00 · 836 阅读 · 0 评论 -
遍历线程调度链表辅助检测进程
<br />以前就有了,只是还是自己实现了一下,当做复习吧,大侠飘过。进程的隐藏一直是木马程序设计者不断探求的重要技术,目前Rootkit使用的主要的进程隐藏技术有:通过hook内核API来来隐藏,通过从进程链表上摘除自身来隐藏。这样对于进程普通的API列举将不会得到真实的数据,为了获取可信进程信息,就要要采用其他的方法。<br />众所周知,windows执行的基本单位是线程,而不是进程,所以才有从进程链表上摘除自身的进程隐藏方法,这是虽然从进程链表上摘除了自身,但不会影响操作系统的调度,所以不影响程序运转载 2011-01-11 17:25:00 · 2337 阅读 · 0 评论 -
IceSword&Rootkit Unhooker驱动简析
IceSword版本:1.20cn 修订号:061022 <br />----------------------------------------------------<br /><br />0. 进程 <br /> (略) <br /><br />1. 端口 <br /> IS调用IoBuildDeviceIoControlRequest分别向Tcpip.sys所创建的TCP设备对象和UDP设备对象发送IRP,在输出缓冲区中将返回端口/IP/状态/PID的结构数组(DS也是这么搞的,只不过没关联转载 2011-01-11 17:34:00 · 932 阅读 · 0 评论 -
rku逆向分析 膜拜XueTr的linxer大牛
这个驱动本来准备端午节搞的,但后来端午节去了躺北京玩了几天,也就搁置了...最近连续花了4个晚上,大致把它搞的差不多了,有些收获...初学window驱动,水平很菜,有些东西我也未必清明,加上3环的代码还没有吃透,期间也没有用调试器跟踪,全是IDA(F5)静态分析的,谬误在所难免,高手请飘过,希望对菜鸟学习有点帮助.<br /><br />1.SSDT检测<br /><br />这个功能有三个IoControlCode与之对应,他们分别是22000fh(拷贝KeServiceDescriptorTable)转载 2011-01-11 17:21:00 · 6658 阅读 · 0 评论 -
学习进程的句柄表
<br />首先打开任务管理器随便选一个进程<br /><br />以explorer.exe为例<br />pid为1388<br />十六进制为56C<br /> <br />用windbg找到对应的EPROCESS<br />kd>!process 1388<br />得到EPROCESS为81e69688 <br /> <br /><br /> <br />再查看进程的EPROCESS<br /><br /> <br />再查看进程的句柄表HANDLE_TABLE<br /><br /> <br原创 2010-11-02 16:08:00 · 1203 阅读 · 0 评论 -
inline hook KiFastCallEntry
#include "ntddk.h"#include "sysenterhook.h"#if DBG#define dprintf DbgPrint#else#define dprintf(x)#endif#define BYTE unsigned char #define MEM_TAG 'CQ'#define NT_DEVICE_NAME L"//Device//sysenterhook"#define DOS_DEVICE_NAME L"//DosDevices//sysenterhook"NTSTA原创 2010-10-14 17:51:00 · 4557 阅读 · 1 评论 -
KiFastCallEntry
<br /> PUBLIC _KiFastCallEntry<br />_KiFastCallEntry proc<br /> <br />;此时:<br />;eax指向服务编号<br />;edx指向当前用户栈,edx+8为参数列表<br />;<br />; Sanitize the segment registers<br />;<br /> mov ecx, KGDT_R3_DATA OR RPL_MASK <br /> push KG原创 2010-10-14 01:31:00 · 3102 阅读 · 0 评论 -
通过KTHREAD获得SSSDT表
首先看下KTHREAD的结构在Windows 2003 sp1的系统下 ServiceTable的偏移0x118如果当前获得的KTHREAD是图形应用程序中的线程,那么ServiceTable就会指向KeServiceDecriptorTableShadow这个结构再看下KeServiceDecriptorTableShadow 这个结果在当前内存中的地址编写一个mfc小程序,与驱动程序通信,在驱动程序中调用PsGetCurrentThread获得ETHREAD,或者调用KeGetCurrentThread原创 2010-10-13 15:02:00 · 1647 阅读 · 1 评论 -
int2e解释
图片说明了一切原创 2010-10-12 18:36:00 · 917 阅读 · 0 评论 -
获得操作系统版本 r3
<br /><br />typedef enum tagWin32SysType{<br /> Windows32s,<br /> WindowsNT3,<br /> Windows95,<br /> Windows98,<br /> WindowsME,<br /> WindowsNT4,<br /> Windows2000,<br /> WindowsXP,<br /> WindowsVista,<br /> Windows7,<br /> Nothing<br />}Win32SysType;<br原创 2010-10-13 16:40:00 · 692 阅读 · 0 评论 -
获得kernel32基地址的通用办法
win7上也能用的定位kernel32基址的方法 2010-10-21 13:12<br />看雪上看到的,挺不错,转至<br />------------------------------------------------------------------------------------------------<br />通过在InInitializationOrderModuleList中查找kernel32.dll模块名称的长度来定位它的基地址,因为"kernel32.dll"的最后一个字符转载 2011-04-24 20:34:00 · 1934 阅读 · 1 评论