POOL驱动不能处理异常的解决方法

相信越来越多的人都喜欢把驱动代码放到Pool里执行,但由此会产生一个问题,在Pool里的驱动代码是不能出异常的,所有的异常处理都会失效,在有些我们不得不使用异常,如操作Ring3内存,这时我们就必须解决掉这个问题。

X86和x64在异常处理上稍有一些不同,先来看x86上的异常处理。

系统捕获到异常后会执行到函数RtlDispatchException,函数RtlDispatchException再调用RtlLookupFunctionEntry,RtlLookupFunctionEntry函数再调用RtlLookupFunctionTable。RtlLookupFunctionTable这个函数的作用是在PsLoadedModuleList链在根据异常的EIP地址找到发生异常的模块。由于Pool里执行的代码不属于任何一个模块,这个函数就会返回失败,异常处理就会失去作用,产生一个蓝屏。

......

ObRegisterCallbacks返回0xC0000022(拒绝访问)解决方案

ObRegisterCallbacks这个函数是在Vista sp1之后的版本中添加的,可用来监控系统中对进线程句柄的操作,如打开进程、复制线程句柄等。

但是使用这个函数对驱动有特殊的要求,必须使用特殊的签名才行!否则这个函数会返回0xC0000022(拒绝访问),逆向此函数可以看到以下是有关是否加签名的判断:

...

进程创建过程 关键函数执行顺序

监控下一个进程的创建过程,关键函数的执行先后关系如下:

XP sp3下:

1.NtCreateProcessEx

2.NtCreateThread

3.CreateProcessNotify,调用创建进程回调函数,在PspCreateThread中调用

4.CreateThreadNotify,调用创建线程回调函数,在PspCreateThread中调用

Vista、Win7下:

1.NtCreateUserProcess->PspInsertThread

...

双向链表的添加、查找、删除算法

前段时间看一个很早前写的驱动,发现对双向链表的操作还有BUG,删除时会蓝屏,修正了一下,把修正后的代码贴出来,方便日后使用前直接复制,大牛不用看了。

 
 
typedef struct _FILELIST
{
     LIST_ENTRY ListEntry;
...

利用0day在win7下从user权限提升到system权限演示

此演示完成user权限下以system权限运行指定程序,利用的是前几篇文章说的那个系统驱动的溢出漏洞。

利用成功后可看到Services.exe以system权限运行了C:\Users\test\Desktop\1.exe。

编写不影响继续执行的栈溢出shellcode,拒绝不返回,拒绝崩溃

上次说的溢出0day的shellcode终于写完了,开始遇到了不少困难,但都一一解决了。

一开始,像大多数其它溢出那样,执行完shellcode后就sleep等死,可是这里不行,在进入有漏洞的函数前,系统占了一个锁,如果等死了,整个系统也立马卡死。函数调用是像下面这样的:

call func2()
{
    getlocker();
    bugfunc();//存在溢出的函数
...

驱动枚举所有快捷键

在win32k中存在一个单向链表,这个链表中保存着当前子系统下的所有快捷键,保存这个单向链表的头的全局变量为_gphkFirst,这个全局变量在_RegisterHotKey、IsHotKey等函数中有使用。

下面是我在xp下逆向分析出的这个链表的结构:

typedef struct _HOTKEY
{
    PVOID Win32Thread;
    ULONG gptiCurrent;
...

分析学习木马鬼影

昨天分析了下鬼影的驱动文件atixx.sys,分析了大概8、9成,学到了一些东西。

1.从这个木马里看到了一条IDA不认识的指令,mov     eax,cr0它对应的机器码是0f20c0;

2.还有指令lock jmp,非常干扰IDA的分析;

3.另外返回使用jmp     dword ptr [esp-4]会对动态调试造成影响

4.驱动文件执行一段加密一段,干扰静态分析。

...

分页:[«]1[2][»]

Powered By Z-Blog 2.0 bate Build Theme by toboku

Copyright langouster. Some Rights Reserved.   苏ICP备06046736号