Sebek源码修正档(1)

博客讲述了在antidetection中遇到的驱动加载蓝屏问题,原因是未文档化的内核函数定位不准确。通过分析代码,作者发现`mov eax, [eax+0x70]`是问题所在,并引用了Edgar Barbosa和tombkeeper的文章,提出利用FU rootkit的方法来获取内核地址,修正了代码,但指出仍可能存在一些问题。" 124867294,9921439,多模态多目标优化问题应用详解,"['多目标优化', '算法', '启发式算法', '人工智能', '优化问题']
摘要由CSDN通过智能技术生成

antidetection中出现一个小问题,导致驱动加载时蓝屏。

还是FindPsModuleList的问题。源码使用了Edgar Barbosa的文章Finding some non-exported kernel variables in Windows XP中提到的方法,对代码做了如下填充:

#if (_WIN32_WINNT == 0x0500)  //windows 2000 ~by C0KE
        pModuleListStart = *((PMODULE_ENTRY*)((DWORD)pDriverObject + PSLOADEDMODULE_OFFSET)); 
#else  //windows XP and so on~ by C0KE
        __asm { 
                mov eax, fs:[0x34]; // KdVersionBlock 
                mov eax, [eax+0x70]; // PsLoadedModuleList 
        mov pModuleListStart, eax; 
        } 
#endif

通过debug发现, mov eax, [eax+0x70]是导致蓝屏的罪魁祸首。

由于函数是undocumente的,所以要准确定位函数的内核地址。由于是驱动做这件事情,所以可以采用tombkeeper (t0mbkeeper_at_hotmail.com)文章里曾提到fuzen_op(fuzen_op@yahoo.com)的方法,利用FU rootkit获取内核地址。通过_DRIVER_OBJECT找到DriverSection(偏移0x14)结构,向后遍历,找出PsLoadedModuleList.

        PMODULE_ENTRY gul_PsLoadedModuleList = NULL;

#if (_WIN32_WINNT == 0x0500)  //windows 2000 ~by C0KE
        pModuleListStart = *((PMODULE_ENTRY*)((DWORD)pDriverObject + PSLOADEDMODULE_OFFSET)); 
#else  //windows XP and so on~ by C0KE

pModuleListStart= *((PMODULE_ENTRY*)((DWORD)pDriverObject + 0x14));
if(pModuleListStart == NULL)
    return 0;

gul_PsLoadedModuleList = pModuleListStart;

while((PMODULE_ENTRY)pModuleListStart->le_mod.Flink != gul_PsLoadedModuleList)
{
    if((pModuleListStart->unkl == 0x00000000) &&
            pModuleListStart->driver_Path.Length == 0)
        return pModuleListStart;
}
#endif

 

 

貌似还是有一点点问题的,待以后再看看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值