hook pte_菜鸟开始学习SSDT HOOK((附带源码)

看了梦无极的ssdt_hook教程,虽然大牛讲得很细,但是很多细节还是要自己去体会,才会更加深入。在这里我总结一下我的分析过程,若有不对的地方,希望大家指出来。

首先我们应该认识 ssdt是什么?从梦无极的讲解过程中,我联想到了这样一个场景:

古时候有一户人家,姓李,住在皇宫外面,他们家有一个女儿进皇宫当宫女。有一天,李家的老大爷要送东西给他女儿,我们假定他可以进皇宫,于是就开始了这样一个过程。进皇宫只有一条路,那就是走正门,于是李大爷带着东西从家走到了城外,进皇宫前必须从这门口进去,通过一条路后才能到达皇宫,守门的侍卫挺友善的,把老大爷的东西让一个侍卫拿到一个地方去放着,然后叫了一个手下带着老大爷往里走,当走到皇宫门口时,守城门的侍卫就离开了,让另一个人带着老大爷继续走,然后老大爷就进了皇宫,进了皇宫后,有一个侍卫来问李大爷的女儿是在哪边,这里皇宫只有东边和西边。于是李大爷跟他说在东边,于是侍卫把李大爷带到了东边,然后见到一个总管,李大爷给出女儿是几号房的,总管根据一个皇室总表,找到了李大爷的女儿住址,于是李大爷就找到了他女儿,总管还告诉他,你带的东西可以在哪 里去取。

这里拿OpenProcess函数比作李大爷,NtOpenProcess比作李大爷的女儿,OpenProcess通过普通的调用规则进行调用来到城外,再通过ZwOpenProcess进行接见,带着它往皇宫走,然后遇到KiFastSystemCall,带他进入了皇宫。进了ring0后,需要知道是ssdt还是shawssdt,于是分东边的西边,我们假定ssdt就是东西。于是从东边 的路走过去,遇到总管KiFastCallEntry,给出函数偏移号,总管手里的皇室总表就是ssdt这个数据结构,于是找到了NtOPenProcess,而OpenProcess的参数即李大爷带的东西在ParamTableBase这里去找。

好吧,故事讲完了,我们继续分析。

ssdt竟然是一个数组,那么我们就需要先得到这个数组的首地址,于是这个结构就出来了。

代码:

typedef struct ServiceDescriptorEntry {

unsigned int *ServiceTableBase;

unsigned int *ServiceCounterTableBase;

unsigned int NumberOfServices;

unsigned char *ParamTableBase;

} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;

这个结构只需要知道两个参数的作用,一个是ServiceTableBase,这个参数是ssdt数组的基址,有了它,我们再给出具体函数的偏移,就能找到正确的函数地址了。

另一个是NumberOfService,这个是ssdt这个数组的最大值,也就是ssdt中函数的个数。

有了这个结构过后,按照偏移就可以找到想要Hook的函数的地址了。但是hook之前,需要修改内核保护,否则会无情蓝屏。

代码:

void PageProtectOff()

{

__asm{

cli

mov  eax,cr0

and  eax,not 10000h

mov  cr0,eax

}

}

Cli表示让其他人都休息,看我一个人表演。

Cro这个寄存器就保存了内核保护的标志位,用 10000h取反再和他进行与运算,就使标志位从1变成0了,就可以修改内核了。当然,完成后得修改回来,否则会出现这样的情况,你在上面跳舞,别人看你表演,你跳完了,别人还一直盯着舞台,以为你还在表演。

代码:

void PageProtectOn()

{

__asm{

mov  eax,cr0

or   eax,10000h

mov  cr0,eax

sti

}

}

修改了内核保护后ÿ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: DFT(Design for Testability,可测试性设计)是一种在集成电路设计中用于简化测试和验证过程的方法。而hookup_pin是其中一种用于连接测试设备和电路芯片的方法。 在集成电路设计中,测试设备需要与电路芯片中的信号引脚(Pin)进行连接,以便能够向芯片输入测试信号或者读取芯片的输出信号。这些信号引脚通常是设计中的输入输出端口,也可能是专门为测试而设计的引脚。 使用hookup_pin时,首先需要确定需要连接的测试引脚。然后,根据测试设备的需求,确定测试引脚的电气连接方式,例如需要使用特定的电阻、电容或者电压。接下来,将测试设备的连接线与测试引脚进行物理连接,确保连接线能够稳定地传递测试信号。 使用hookup_pin时,需要注意以下几点: 1. 确保连接线的质量和稳定性,防止信号传输的失真或者干扰。 2. 根据测试需求,合理选择连接方式和参数,以保证测试的准确性和可靠性。 3. 在设计电路芯片时,要考虑到测试引脚的位置和数量,以便在实际连接时能够方便地访问到它们。 4. 进行测试时,要注意测试设备和测试引脚的电气兼容性,避免产生不正常的电气相互作用。 总之,使用hookup_pin时,需要根据测试要求选择合适的测试引脚并进行正确的物理连接,以保证测试信号的有效传递和测试的可靠性。这样可以提高集成电路设计的可测试性,并降低测试成本和时间。 ### 回答2: DFT是Design for Testability(可测试性设计)的缩写,是电子设计中一个重要的概念。在设计过程中,为了方便测试电路的功能和性能,通常会在芯片设计的每个功能模块中添加一些特殊的信号引脚,这些引脚被称为DFT hookup pin(测试引脚)。 DFT hookup pin的作用是为测试提供额外的接口和信号。通过这些引脚,测试工程师可以在实际测试中获取电路内部的状态信息,控制电路的各个模块,以及监测电路的性能指标。这些信号可以用来诊断故障、测试电路的可靠性和性能,以及辅助电路的制造和调试。 DFT hookup pin的使用方法取决于具体的设计需求和测试目标。在设计过程中,设计工程师需要考虑和定义测试采集的信号类型、时机和触发条件。通常,测试信号可以是控制信号、状态信号或者是测试模式生成器所需的信号。这些引脚需要与测试芯片的引脚互连,并且在设计时需要做好信号隔离和保护,以确保测试的准确性和可靠性。 在测试阶段,测试工程师会使用特定的测试设备和工具,连接到芯片的DFT hookup pin上,以进行功能测试、逻辑诊断、时序测试等。通过这些引脚,测试工程师可以访问电路的内部,改变电路的状态,并获取测试结果。同时,还可以通过DFT hookup pin进行扫描链测试、BIST(内建自测试)等功能测试,以提高测试效率和覆盖率。 综上所述,DFT hookup pin在芯片设计中起到了关键的作用,可以为测试工程师提供有效的测试接口和信号。合理使用DFT hookup pin可以提高测试的效率、可靠性和覆盖率,从而降低产品的故障率,提高制造和测试流程的效率。 ### 回答3: dft (Design for Testability,可测试性设计)是一种设计技术,它旨在使电路设计能够更容易进行测试和诊断。 dft hookup_pin是一种用于电路设计中的接线和连线标识。在进行电路设计时,我们通常需要在设计中添加一些特定的电路元件来实现测试和调试的功能。这些电路元件可以是诊断点、检测电路、测量电路等。 dft hookup_pin的使用方法如下: 1. 标识测试点:在设计电路图中,我们可以使用dft hookup_pin来标识测试点。测试点是用于进行测试和诊断的特定电路节点。通过在设计中添加dft hookup_pin来标识测试点,测试工程师可以更容易地访问这些关键节点。 2. 连接测量仪器:在进行测试时,我们需要将测量仪器(如示波器、多用表等)连接到测试点来进行测量和分析。通过使用dft hookup_pin,我们可以将测量仪器与电路设计中标识的测试点连接起来,以实现对测试点的测量。 3. 实现测试模式切换:在某些情况下,我们可能需要在设计中添加一些特殊的电路元件来实现测试模式的切换。通过使用dft hookup_pin,我们可以将这些特殊的电路元件与设计中的特定节点连接起来,以实现测试模式的切换。 总之,dft hookup_pin是一种有助于实现电路测试和调试的设计标识。通过在设计中添加dft hookup_pin来标识测试点和连接测试仪器,我们可以更容易地进行电路测试和诊断工作,提高设计的可测试性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值