复习

1.b获取自身句柄
2.b得到自己的imagebase/sizeofimage
3.b创建缓冲区 将自己复制进去
4.b打开要注入的进程
5. 在a进程申请内存,大小sizeofiamge
6.修复b的重定位表
7.将修复后的数据 拷贝到A进程中
8.创建远程线程 执行b中的entry函数
9.entry修复IAT表  表中地址记录的函数地址的值

3环:FS:[0]指向的是TEB 加偏移 找到PEB
0环:FS:[0]指向KPCR  64位在GS中  IA64在0x00000000fff00000
KiWatiListHead 等待链表1个   调度链表32(线程优先级)个(服务器版本每个核有个调度链表) 正在跑的线程在cpu的kpcr中
线程切换的三种情况:
1.当前线程主动调用API:
API函数-》KiSwapThread->KiSwapContext->SwapContext
2.当前线程时间片到期:
KiDisPatchInterrupt->KiQuantumEnd->SwapContext
3.有备用线程(KPCR.PrcbData.NextThread)
KiDispatchInterrupt->SwapContext
FS[30]->TEB  切换时 改变的段描述符的基址

CR3页目录表基址 当前进程的KPROCESS.DirectoryTableBase 0x18
dt _KAPC_STATE
ntdll!_KAPC_STATE
   +0x000 ApcListHead      : [2] _LIST_ENTRY
   +0x010 Process          : Ptr32 _KPROCESS
   +0x014 KernelApcInProgress : UChar
   +0x015 KernelApcPending : UChar
   +0x016 UserApcPending   : UChar
0x44进程的 CR3     0x220父进程
进程挂靠
ntreadvirtualmemory
kiattachprocess
修改父进程的值为要读取的进程
修改CR3的值  swapprocess
不同进程的高2G数据 物理地址 几乎相同

DriverSection  指向了驱动链表 LDR_TABLE_ENTRY  成功LIST_ENTRY

KeServiceDescriptorTable

重载内核   拷贝系统服务表 HOOK KiFastCallEntry

Mutex 当前线程可以重复进入 MmUnloadSystemImage KeReleaseMutant(x,y,Abandom,z) 被丢弃  不会造成其他线程死锁
Mutant APcDisable =0
Mutex APcDisable =1

PSPCidTAble object_handle  tablecode 第一位0代表多少分级

CPU异常  查IDT 执行中断处理函数  CommonDispathcExce  KiDispatchException IRETD返回3环
throw ->kiRaiseException->KiDispatchException 系统调用返回3环

3环 KiUserExceptionDispatcher ->RTLDispatchException 返回true 调用zwcontinue 进入0环  再次进入3环 从修正后的位置执行
返回假  调用zwraiseexception 第二轮异常分发

VEH AddVectorExceptionHanddler

SEH

UnhandlerExceptionFilter   NtQueryINformationProcess  debugport有调试就回调给调试器
没调试 就走 SetUnhandlerExceptionFilter 顶层回调
没设置SetUnhandlerExceptionFilter 就会走系统的结束进程线程
调试器进程 0xf24 存储 Debug_Object对象句柄
被调试进程的 DebugPort存储的是 _Debug_Object的地址
调试事件采集函数 DbgK_函数  DbgKSendApiMessage(a(7种消息类型),b(要不要挂起其他线程))  ->add _Debug_Object+30的链表位置   
调试进程的时候  BeingDebug      设置DebugBreakPoint
DebugActiveProcess  FakeProcess


软件断点: INT 3  IDT中断处理函数  CommonDispathcExce  KiDispatchException DbgkForwordException DbgKSendApiMessage
内存断点:VirtualProtectEx  物理页的 影响整个页 PTE PAGE_NOACCESS P=0 PAGE_EXECUTE_READ (P=1 R/W=0)
CPU访问内存 引起缺页异常  引起 IDT  E号中断
硬件断点CPU检测到DR寄存器 触发单步异常 1号中断 调试寄存器 Dr0-Dr3(线性地址 L0 G0 -L3 G3 置1 G影响全局 L影响一次) D4-D5(保留)   
Dr7 32位 L0G0-L3G3  R/W 0 -RW3 (00 执行断点 01写入断点 11访问断点)LEN(00 1字节 01 2字节 11 4字节)
Dr6 B0-B3位 区分是EFlag的TF位 引起的异常 还是硬件断点引起的 单步异常

单步异常 :EFLAG的 TF置1  CPU每执行一步 触发一个异常
单步步过:硬件断点 或 软件断点 遇到call等 计算指令长度 在下一行下断点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值