2_多核复杂性

前置知识

为了防止中断嵌套会自动 cli

在中断能处理的时候会自动 cli -- 清除中断标记位 if。 这样如果在if = 0 的时候 ,0环死循环 那么就会造成系统假死崩溃。

实际代码验证

我们把前一次的代码设置成死循环

 

效果:

系统假死,---实际也死了,,,windbg 也下中断不下来 因为if = 0. 实际 windbg 发送请求给子系统,然后处理。但是这下处理不下来了。

windbg ctrl+break 失效 虚拟机也动不了

1570071477586

 

2 多核的复杂性 实验1

2.1 每个核 有独立的idt、gdt 所以你每次做的时候在多核情况下得都修改

使用windbg 在每一个cpu的 idt 的 0x20向量中添加不同的中断处理。

这里使用的如下:

在 0号处理器中:

1570072345677

在 1号处理器中(~在内核中是切换cpu 在3环中是切换线程):

1570072597830

 

2.2 代码展示多核中断提权处理区别

注意:使用windbg 设置双核的每个cpu idt 0x20项 修改成 IdtEntry1 地址 和 IdtEntry2地址

~0 : 在内核中是切换cpu 在3环是切换线程

 

 

2.3 效果

是每次点击 可能所处的cpu不同导致 调用的idt 处理不同,所以全局变量的修改也不同,所以输出的数据每次点击可能不一致。

由于每次所处的cpu 不同,所以中断处理不同:

1570072070679

1570072146736

 

完整代码:

前提:

使用windbg 在每一个cpu的 idt 的 0x20向量中添加不同的中断处理。

这里使用的如下:

在 0号处理器中:

1570072345677[1]

在 1号处理器中(~在内核中是切换cpu 在3环中是切换线程):

1570072597830[1]

 

 

3 多核复杂性 实验2

实验环境: 还是双核、xp

cr0 的第16位 : 0x10000 是页写保护属性WP;WP 位控制是否允许处理器向标记为只读的内存也写入数据;

写保护修改wp :

  • 0 --- 禁用写保护功能

    关闭 写保护 功能的代码

     
  • 1 --- 开启写保护功能

    恢复 写保护功能 代码

     

!pte 0xaddr // 是查看对应地址所在的页目录、页表物理页保护属性

 

 

3.1 实验2: 多核复杂性 HOOK KiFastCallEntry()

使用 pchunter 查看 驱动 模块的 的地址 ntkrnlpa.exe(注意在以前老系统中分ntkrnlpa.exe 分了单核、多核、开了pae、未开pae等版本组合;2个2进制位所以有4个不同的ntkrnlpa.exe;这里注意定位你当前使用的是哪一个ntkrnlpa.exe),然后使用 IDA 分析并加载符号;

注意: 修改ida 的加载基址为 pchunter 里面显示的基址,这样便于查看分析。

查看 KiFastCallEntry 函数;

 

3.2 实验代码

分析:

多核的时候,在 0 号核 中处理蓝屏代码;但是这里我们修改了KiFastCallEntry() 之后 把0号处理器进入了一个死循环, 使得 1号核 时间片中程序 3环进入0环调用KiFastCall ,执行我们Hook的错误代码产生的异常没有被 0 号处理器蓝屏处理。但是 使用windbg 查看 的确 1号处理器 异常产生了。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值