跨进程内存读取.doc

跨进程内存读取.doc

ID:59332132

大小:458.00 KB

页数:9页

时间:2020-09-04

跨进程内存读取.doc_第1页
跨进程内存读取.doc_第2页
跨进程内存读取.doc_第3页
跨进程内存读取.doc_第4页
跨进程内存读取.doc_第5页
资源描述:

《跨进程内存读取.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、跨进程内存空间的读写通常,跨进程读写内存,用到ReadProcessMemory,WriteProcessMemory,但需要进程句柄,如果目标进程受到保护,可能获得进程句柄会失败.不同的进程的虚拟地址被映射到了物理内存中不同的页面.每个进程的虚拟地址的范围是相同的,但是实际的映射却是物理内存内中的不同部分.假如我们直接读取目标进程的虚拟地址映射的物理地址,是否可以达到预期的要求.当然这是肯定的,!首先要获得目标进程的cr3寄存器,即页目录基地址(开启PAE,页目录指针表),每个进程在内核里都有一个EPROCESS结构.nt!_EPROCE

2、SS+0x000Pcb:_KPROCESS+0x06cProcessLock:_EX_PUSH_LOCK+0x070CreateTime:_LARGE_INTEGER+0x078ExitTime:_LARGE_INTEGER+0x080RundownProtect:_EX_RUNDOWN_REF…….Pcb中就有我们想要得到的CR3nt!_KPROCESS+0x000Header:_DISPATCHER_HEADER+0x010ProfileListHead:_LIST_ENTRY+0x018DirectoryTableBase:[2]Ui

3、nt4B+0x020LdtDescriptor:_KGDTENTRY+0x028Int21Descriptor:_KIDTENTRY………那只需要获得目标进程EPROCESS就可以得到CR3了假定目标进程就是当前进程,可以遍历EPROCESS里的ActiveProcessLinks的链表获取指定进程的EPROCESS//获得EPROCESS信息ULONGuEprocess=0;__asm{moveax,fs:[0x124]//_ethreadmoveax,[eax+0x44]//_kprocessmovuEprocess,eax}nt!_E

4、THREAD+0x000Tcb:_KTHREAD…..nt!_KTHREAD+0x000Header:_DISPATCHER_HEADER……+0x034ApcState:_KAPC_STATEnt!_KAPC_STATE+0x000ApcListHead:[2]_LIST_ENTRY+0x010Process:Ptr32_KPROCESS这就是我们需要的ERPOCESS了……获得了CR3,,接下来,就是根据分页机制,把虚拟地址转换为物理地址勒.在转换之前要判断是否开启PAE,非PAE和开启PAE的转换有所不同控制寄存器CR4的第5位标记是

5、否开启PAE//获得CR4的值__asm{_emit0x0F_emit0x20_emit0xE0movuCR4,eax}未开启PAE情况通过CR3寄存器定位到页目录的基地址线性地址的高10位作为获取页目录表项的索引,获得一个页目录的一个表项注:windows的保护实现基本不使用分段机制,主要是通过分页机制来实现保护,这里的就线性地址等于虚拟地址,这是我的一点理解,可能有误,!//获得页目录表项(PDE)dwPageDirIndex=(dwVirtualAddr&0xffc00000)>>22;DWORDdwPageDirEntry=Read

6、PageDirEntryNoPAE(dwPageDirIndex);if(dwPageDirEntry==0){return;}根据PDE获得页表基地址或者页基地址当没有开启PAE时,有两种PDE格式,分别指向4KB的页表,和4MB的内存页页目录项的第7位判断页大小//获得页大小DWORDCReadMemoryDlg::GetPageSizeNoPAE(DWORDdwAddr){if((dwAddr&0x00000080)==0x00000080){returnMBSIZE;}else{returnKBSIZE;}}4KB时,页目录项的高2

7、0位为页表基地址.线性地址的12位到21位作为选取页表的一个表项.(PTE)dwPageTableIndex=(dwVirtualAddr&0x0003ff000)>>12;DWORDdwPageTableBaseAddr=dwPageDirEntry&0xfffff000;//获得页表DWORDdwPageTable=ReadPageTableNoPAE(dwPageTableBaseAddr,dwPageTableIndex);if(dwPageTable==0){return;}if(IsPresentNoPAE(dwPageTabl

8、e)==FALSE){return;}取PTE的高20位,作为内存页的基地址,线性地址的低12作为页中偏移得到物理地址//页的基地址DWORDdwPageBaseAddr=dwP

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。