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师傅的博客

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

  • 相关阅读:
    读取csv文件时编码错误
    ubuntu keras
    ubuntu19.1 tensorflow
    随机数random
    获取文件夹下所有文件名
    np.random.send()
    tensorflow---识别图像特征(吴恩达课程)
    Springboot项目热部署-Devtools
    Hadoop综合大作业
    分布式文件系统HDFS 练习
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/14326573.html
Copyright © 2011-2022 走看看