首页
社区
课程
招聘
[求助]各位大牛帮帮忙,蓝屏不断
发表于: 2017-5-1 00:16 2597

[求助]各位大牛帮帮忙,蓝屏不断

2017-5-1 00:16
2597


在WINDBG中手动查看dwPeBase + pBaseOffset_Name可以看到获取到的DLL模块的名称,

但调试单步过 [DWORD32 pBaseOffset_Name = pExportDir->Name]这句时必蓝屏 本人是新手,请多指教


考虑可能和IRQL以及分页有关系,但没有尝试无果

考虑和附加进程有关系,更换为KeStackAttachProcess 原来使用 KeAttachProcess


经过多次尝试无果,特此请教


//设置为不可写

void DisableWrite()

{

 __try

 {

_asm

{

 mov eax, cr0;

 or  eax, 10000h;

 mov cr0, eax;

 sti;

}

 }

 __except (EXCEPTION_EXECUTE_HANDLER) {

DbgPrint("[-] [DisableWrite]函数发生SEH错误 Code[%d]!", GetExceptionCode());

 }

}

// 设置为可写

void EnableWrite()

{

 __try

 {

_asm

{

 cli

mov eax, cr0

and eax, not 10000h //and eax,0FFFEFFFFh

mov cr0, eax

}

 }

 __except (EXCEPTION_EXECUTE_HANDLER) {

DbgPrint("[-] [EnableWrite]函数发生SEH错误 Code[%d]!", GetExceptionCode());

 }

}

BOOL PEReadMouduleName(

      DWORD32 BaseAddr,//模块在进程中的加载地址

      PEPROCESS arg_EPROCESS)//需要操作进程的执行体

{

      __try

      {

        __asm int 3;

        KAPC_STATE ks;

        KeStackAttachProcess(arg_EPROCESS, &ks);

        EnableWrite();        

        DWORD32 dwPeBase = BaseAddr;        

        PIMAGE_NT_HEADERS pNtHead = (PIMAGE_NT_HEADERS)(PBYTE(dwPeBase) + pDosHead->e_lfanew);    

   

        if (!MmIsAddressValid(&pNtHead->OptionalHeader.DataDirectory))

             return FALSE;

        /*DLL导出表中地址相对主模块的偏移*/

        DWORD32 BaseOffset_pExportDir = pNtHead->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress;

        KeLowerIrql(PASSIVE_LEVEL);//为了可以读取分页内存所以降低了IRQL.不知道有没有用

        /*获取导出表实际地址*/

        PIMAGE_EXPORT_DIRECTORY pExportDir = (PIMAGE_EXPORT_DIRECTORY)(BaseOffset_pExportDir + dwPeBase);

   

        /*从导出表中获取模块名称指针相对模块基址的偏移*/

        DWORD32 pBaseOffset_Name = pExportDir->Name;   *************这里必蓝屏*******************

        /*获取模块名称的指针*/

        PCHAR pMouduleName = PCHAR(dwPeBase + pBaseOffset_Name);

        /*擦除*/

        pMouduleName[0] = 0;

        KIRQL OldIrql;

        KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);

       

        KeUnstackDetachProcess(&ks);

        DisableWrite();

        return TRUE;

      }

      __except (EXCEPTION_EXECUTE_HANDLER){

        KeDetachProcess();

        DbgPrint("[-] [RemovePESymbol]函数发生SEH错误 Code[%d]!\r\n", GetExceptionCode());

        return -1;

      }

}



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
不知道你EnableWrite是想干吗
2017-5-1 11:25
0
雪    币: 145
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
该判断的做好判断        读取R3内存        try  +  probe  套上
2017-5-1 11:38
0
游客
登录 | 注册 方可回帖
返回
//