:57.687KB : :1 :2023-01-02 14:36:17
要理解本程序的实现过程首先需要了解什么是KernelCallbackTable。
实现过程:
首先利用NtQueryInformationProcess获取进程Peb。
然后向进程写入ShellCode。
接着将Peb->KernelCallbackTable->__fnDWORD改写为写入的ShellCode地址。
向程序窗口发送重画消息,此后win32k.sys会处理消息,并且使用KeUserModeCallback从R0切换到R3并且调用ntdll!KiUserCallbackDispatcher,KiUserCallbackDispatcher接着会根据ApiNumber调用KernelCallbackTable中的函数,此时KernelCallbackTable->__fnDWORD已经被修改,导致程序调用LoadLibraryA实现Dll的注入。
ShellCode已经编写好,调用第一次时自动恢复KernelCallbackTable,InjectedDll在调用完成后会立刻释放ShellCode。
PS:
因为借助Peb->KernelCallbackTable->__fnDWORD实现,所以InjectedDll暂时只能针对32位有窗口程序。
10-17Windows内核实验教程
10-15linux内核注释
10-13嵌入式Linux内核裁剪和移植
10-13深入剖析Linux内核与设备驱动
10-10深入Linux内核架构
08-09华为正式发布基于微内核的操作系统鸿蒙OS