首页 > 编程知识 正文

dax api是什么进程,写内存api

时间:2023-05-06 07:52:58 阅读:207433 作者:129

目录

KernelBase - > ReadProcessMemory

ntkrnlpa.exe - > NtReadVirtualMemory

MmCopyVirtualMemory

KeStackAttachProcess

KiAttachProcess


前言

异步过程调用中介绍了线程内核结构KTHREAD成员ApcStateApcStateIndexApcStatePointerSavedApcState原始状态以及挂靠状态下的含义.以及"进程挂靠".

通过逆向分析ReadProcessMemory,论证KTHREAD.ApcStatePointer[ApcStateIndex] 无论什么环境下都指向ApcState.以及替换拷贝ApcState、SavedApcState的过程.

KernelBase - > ReadProcessMemory

0实现直接调用NtReadVirtualMemory.

ntkrnlpa.exe - > NtReadVirtualMemory

校验部分在NtReadVirtualMemory中处理,校验成功后通过句柄获取进程内核对象并调用MmCopyVirtualMemory.

MmCopyVirtualMemory

函数流程稍微复杂这里只展示与本文有关部分.

各种校验通过后会执行KeStackAttachProcess附加进程.

KeStackAttachProcess

首先判断附加进程与当前线程所属进程是否相同.

相同直接跳转返回.

不同提升IRQL至DPC_LEVEL,获取APC队列锁进入自旋,满足跳出条件后通过KTHREAD.ApcStateIndex来决定使用ApcState还是SavedApcState.

KiAttachProcess

eax存储Kthread,压入附加进程以及备用APC.

KiMoveApcState中完成拷贝

拷贝完成后,交换ApcStatePointer中的值,设置ApcStateIndex为1(挂靠环境)

正常情况下:ApcStateIndex = 0ApcStatePointer[ApcStateIndex] 指向 ApcState ApcStatePointer[ApcStateIndex] 指向 SavedApcState 挂靠情况下: ApcStateIndex = 1 ApcStatePointer[ApcStateIndex] 指向 SavedApcState ApcStatePointer[ApcStateIndex] 指向 ApcState 无论什么环境下,ApcStatePointer[ApcStateIndex]都指向ApcState.

切换CR3在KiSwapProcess中实现.

至此线程操作数据已经在挂靠进程.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。