zoukankan      html  css  js  c++  java
  • 分析NtReadVirtulMemoery(内核函数)在挂靠时如何备份和恢复APC队列的

    看了别人博客里的WRK代码,也看了逆向代码,WRK帮我把逆向没搞清楚的  搞清楚了,所以不说细节了,直接说怎么调用的

    1. 首先函数调用了NtReadVirtualMemory(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, SIZE_T NumberOfBytesToRead, PSIZE_T NumberOfBytesRead)函数
    2. 然后里面又调用了_MmCopyVirtualMemory函数
    3. _MmCopyVirtualMemory根据所读取的大小是否超过0x1ff,超过就调用_MiDoMappedCopy函数,没超过就调用_MiDoPoolCopy函数
    4. _MiDoMappedCopy函数调用了_KeStackAttachProcess
    5. _KeStackAttachProcess又调用了_KiAttachProcess函数
    6. _KiAttachProcess函数调用了_KiMoveApcState,而这个函数是将_KTHREAD偏移0x34里的_KAPC_SATE备份一遍
    7. 出了_KiMoveApcState函数后又进入了_KiAttachProcess函数,进行了一系列的初始化(我看汇编的时候没发现是宏),并且将其APCState里的Process改为要挂靠的进程Process
    8. 后面直接退到_MiDoMappedCopy函数通过KeUnstackDetachProcess函数和KeStackAttachProcess函数来detach Process和恢复Process

    源码大家可以看看habaga师傅的博客

    汇编太长了,懒得放上来了

  • 相关阅读:
    python中列表排序的方法
    pyrhon3中字符串方法
    python数据探索与数据与清洗概述
    2020年日期表-python实现
    python中字符串离散化的例子
    python中常见的日期处理方法
    如何简单地理解Python中的if __name__ == '__main__'
    我的老爸老了
    关于
    关于
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/14326573.html
Copyright © 2011-2022 走看看