遍历win7 需要在win7 64位系统正常使用
番茄系统家园 · 2021-08-14 23:50:16

代码遍历SSDT
在64位系统里面并未导出。
可以通过函数来找到服务表的地址而也是未导出的。
找到函数的方法是读取寄存器的值。这样就可以找到服务表地址了
{;//服务函数地址表基址;;//服务函数的个数PLONGParamTableBase;//服务函数参数表基址}KSYSTEM_SERVICE_TABLE,*PKSYSTEM_SERVICE_TABLE;VOIDEnumssdt64(){ULONGi0;PKSYSTEM_SERVICE_TABLEpServiceTableNULL;PCHARBase;PCHARFuncAddr;LONGoffset;LONGfunoffset;KdBreakPoint();//读取KiSystemCall64的地址Base(PCHAR)__readmsr(0xc0000082);//偏移313是dff9地址-4就是服务表偏移Base313;//获得服务表偏移offset*(PLONG)(Base-4);//服务表的地址baseoffsetpServiceTable(PKSYSTEM_SERVICE_TABLE)(Baseoffset);for(i0;ipServiceTable-NumberOfService;i){//取出服务表中函数的偏移funoffsetpServiceTable-ServiceTableBase[i];//偏移右移4位funoffset4;//函数地址FuncAddr(PCHAR)((PCHAR)(pServiceTable-ServiceTableBase)funoffset);KdPrint((%d\t0x%p
,i,FuncAddr));}}
需要注意的是服务表里面存放的是函数的偏移大小是4字节。真正的函数地址服务表基址偏移
免责声明: 凡标注转载/编译字样内容并非本站原创,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如果你觉得本文好,欢迎推荐给朋友阅读;本文链接: https://m.nndssk.com/post/33650.html。
