遍历PspCidTable表检测隐藏进程
一、PspCidTable概述 PspCidTable也是一个句柄表,其格式与普通的句柄表是完全一样的,但它与每个进程私有的句柄表有以下不同: 1.PspCidTable中存放的对象是系统中所有的进程线程对象,其索引就是PID和TID。 2.PspCidTable中存放的直接是对象体(EPROCESS和ETHREAD),而每个进程私有的句柄表则存放的是对象头(OBJECT_HEADER)。 3.P […]
一、PspCidTable概述 PspCidTable也是一个句柄表,其格式与普通的句柄表是完全一样的,但它与每个进程私有的句柄表有以下不同: 1.PspCidTable中存放的对象是系统中所有的进程线程对象,其索引就是PID和TID。 2.PspCidTable中存放的直接是对象体(EPROCESS和ETHREAD),而每个进程私有的句柄表则存放的是对象头(OBJECT_HEADER)。 3.P […]
前面我们在TerminateProcess流程追踪、PspTerminateThreadByPointer的实现这篇文章中讲到,TerminateProcess其实是通过遍历进程的线程链表,然后调PspTerminateThreadByPointer这个函数来结束进程的。 但是我们前面也说到可以hook NtTerminateProcess来实现进程防杀,如果我们直接使用PspTerminateT […]
1.EPROCESS结构体 EPROCESS块来表示。EPROCESS块中不仅包含了进程相关了很多信息,还有很多指向其他相关结构数据结构的指针。例如每一个进程里面都至少有一个ETHREAD块表示的线程。进程的名字,和在用户空间的PEB(进程环境)块等等。EPROCESS中除了PEB成员块在是用户空间,其他都是在系统空间中的。 2.查看EPROCESS结构 kd> dt_eprocessntd […]
TerminateProcess通过本机系统服务接口进入核心态,随后调用ntoskrnl的NtTerminateProcess。这部分细节我就不详述了,大家可以去看我写的《重要》从用户模式切换到内核模式的完整过程分析。 大概的流程是这样的: ①判断句柄是否为空 ②通过句柄得到进程对象 ③判断是否为临界进程 ④锁住进程 ⑤遍历进程的线程链表 ⑥调用PspTerminateThreadByPointe […]
前面我在《重要》从用户模式切换到内核模式的完整过程分析这篇文章中,已经把OpenProcess怎么从R3进入R0已经说的很详细了。 R3状态下调用OpenProcess,实际调用的是ntdll.dll中的ZwOpenProcess/NtOpenProcess。通过查看可以得知ntdll.dll中ZwOpenProcess/NtOpenProcess是对应同一个地址。通过sysenter进入R0.在 […]
我们知道ShadowSSDT的实现存在于win32k.sys中,所以我们只要分析win32k.sys文件就能获取原始的ShadowSSDT地址。 A primary default array table, KeServiceDescriptorTable, defines the core executive system services implemented in Ntosrknl.exe […]
一、获取ShadowSSDT 好吧,我们已经在R3获取SSDT的原始地址及SDT、SST、KiServiceTbale的关系里面提到:所有的SST都保存在系统服务描述表(SDT)中。系统中一共有两个SDT,一个是ServiceDescriptorTable,另一个是ServiceDescriptorTableShadow。ServiceDescriptor中只有指向KiServiceTable的S […]
在内核下SSDT地址,可能被ssdt hook或者是inline hook,如果我们的ssdt被别人hook了,怎么改会原来的ssdt地址呢?我们知道在内核文件中是保留了一份原始的ssdt表,所以我们只要通过解析内核文件获取到原始的ssdt地址即可。 首先我们得确认我们当前系统使用的内核文件是ntoskrnl.exe、ntkrnlmp.exe还是ntkrnlpa.exe?这个问题好解决,ZwQue […]
最近很多人问我到底怎么模拟登陆正方系统来抓取课表和成绩的,其实如果你知道了浏览器是怎么和服务器交互数据的话,实现起来就很简单了。 当我们输入学号、密码后点击登陆,浏览器会把我们的学号、密码或者验证码,post到服务器的一个地址,服务器接受到POST请求后,首先验证验证码是否正确,然后验证学号、密码是否正确,如果其中有一个不正确的话,直接返回验证码错误或者学号不存在或者密码错误。如果匹配正确,那么服 […]
有前面对SSDT的了解之后,如果还有不是很了解的同学,请参考SSDT详解及Win32 API到系统服务描述符表调用的完整过程。已经讲的很详细了。 一、SSDT HOOK原理 其实 SSDT Hook 的原理是很简单,从前篇的分析,我们可以知道在 SSDT 这个数组中呢,保存了系统服务的地址,比如对于 Ring0 下的 NtQuerySystemInformation 这个系统服务的地址,就保存在 […]