前两天面试,一位面试官老师提到了RING3到RING0的跟踪,自己以前是windbg跟踪过一次,想着再用OD跟踪一下
就在当复习一下,当时答面试官哥哥进R0是哪个函数的时候,竟然想不起来,只知道说是Ki开头的那个函数,真是汗颜,不珍惜机会啊
好好记住吧
OD加载咱们的notepad 下断点到CreateFileW,迷惑于是CreateFileW还是CreateFileA可以用PEID看一下,或者OD自己查找不过OD在这里不是太好用
然后OD运行(F9)到这里,看EIP很清晰就是该函数
继续往下调试就很顺利看到调用的NT函数,当然中间的这两个函数需要注意,如下,用它毕竟是因为该函数和字符串,路径有关
然后就看到调用的函数是NtCreateFile,最终是ZwCreateFile,当然他们的入口地址是一样的,如下
现在还还没进去R0呢就再去跟进esi,可以看到他的索引号(42),和调用的KiFastSystemCall,索引号的意思是要在SSDT找位置,对应的位置找对应的函数地址,所以我们懂了实际上R3就是找索引号,然后陷进去到R0,找对应SSDT的位置得真正运行函数地址
KiFastSystemCall是进R0得关键
这是KiFastSystemCall的实现,sysenter就是中断进R0了调用NtCreateFile,返回
返回后记得释放啊
最后retn看到CreateFileW了
借用曾是土木人的一张图: