第4讲 虚拟内存应用-例子_第1页
第4讲 虚拟内存应用-例子_第2页
第4讲 虚拟内存应用-例子_第3页
第4讲 虚拟内存应用-例子_第4页
第4讲 虚拟内存应用-例子_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、如何获取如何获取PasswordPassword? 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学1 1 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2 2 WindowsWindows进程虚拟内存空间进程虚拟内存空间 进程虚拟内存进程虚拟内存空间空间(32位位) u空间大小为空间大小为4GB(232) n用户用户区区:2GB n页交换区,可对换到外存页交换区,可对换到外存 n系统区系统区(2GB) n在核心态可访问的存储在核心态可访问的存储区区 u页面大小为页面大小为4KB(212) 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学3 3

2、 进程空间的分区进程空间的分区 用户区内的空闲区用户区内的空闲区(free, unallocated) 空闲区 空闲区 空闲区 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学4 4 和虚拟内存操作相关的函数和虚拟内存操作相关的函数 获取获取OSOS系统信息系统信息 页面大小,分配粒度页面大小,分配粒度 uGetSystemInfo( ) ( ) 分配和释放虚拟内存分配和释放虚拟内存 uVirtualAlloc( )( )和和VirtualFree( ) ( ) 获取内存状态获取内存状态【虚拟内存虚拟内存】 uGlobalMemoryStatus( ) ( ) 确定虚拟地址空间

3、的状态确定虚拟地址空间的状态 uVirtualQuery( )( )或或VirtualQueryEx( ) ( ) 改变页面的保护属性改变页面的保护属性 uVirtualProtect( )( )和和VirtualProtectEx( ) ( ) 虚拟内存的读写虚拟内存的读写 uReadProcessMemory( ) ( ) 和和WriteProcessMemory( ) ( ) 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学5 5 在应用程序中分配虚拟内存在应用程序中分配虚拟内存 LPVOID VirtualAlloc( LPVOID lpAddress, DWORD d

4、wSize, DWORD flAllocationType, DWORD flProtect ); 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学6 6 在应用程序中释放虚拟内存在应用程序中释放虚拟内存 BOOL VirtualFree( LPVOID lpAddress, DWORD dwSize, DWORD dwFreeType ); 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学7 7 改变页面的保护属性改变页面的保护属性 BOOL VirtualProtect( PVOID pvAddress, DWORD dwSize, DWORD flNewP

5、rotect, PDWORD pflOldProtect ); BOOL VirtualProtectEx( HANDLE hProcess, PVOID pvAddress, DWORD dwSize, DWORD flNewProtect, PDWORD pflOldProtect ); 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学8 8 虚拟内存的读虚拟内存的读 BOOL ReadProcessMemory( HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lp

6、NumberOfBytesRead ); 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学9 9 虚拟内存的写虚拟内存的写 BOOL WriteProcessMemory( HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesWritten ); 如何获取如何获取PasswordPassword? 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学1010 要“读取”某个控件的内容(例如编辑框编辑框)通常都是向其 发送 WM_GETT

7、EXT消息。 u如果该编辑框编辑框属于远程进程(并具有 ES_PASSWORD式 样,上面方法失效。 u 问题:如何在远程进程的地址空间执行 SendMessage( hPwdEdit, WM_GETTEXT, nMaxChars, psBuffer ); 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学1111 通常有三种方法来解决这个问题 u1.将用户代码放入某个 DLL,然后通过 Windows 钩子 映射该DLL到远程进程; u2.将用户代码放入某个 DLL,通过 CreateRemoteThread 和 LoadLibrary 技术映射该DLL到远程进程; u3.如果

8、不写单独的 DLL,可将用户代码拷贝到远程进程 (通过 WriteProcessMemory)并用 CreateRemoteThread 启动它的执行。 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学1212 方法二:方法二: 方法二:将用户代码放入 DLL,通过 CreateRemoteThread 和 LoadLibrary 技术映射该DLL到远程进程; 进程通过 LoadLibrary API 动态加载DLL。 问题:如何强制一个远程进程调用这个函数呢? u答案:CreateRemoteThread创建远程线程执行该函数。 苏曙光苏曙光. .软件学院软件学院. .华中科

9、技大学华中科技大学1313 CreateThreadCreateThread函数函数 HANDLE CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_ROUTINE ThreadFunction, LPVOID lpParameter, /线程函数的参数线程函数的参数 DWORD dwCreationFlags, LPDWORD lpThreadId ); 线程函数的原型线程函数的原型 DWORD ThreadFunction ( LPVOID lpParameter /参数

10、参数 ) 创建远程创建远程线程线程 :CreateRemoteThread u在远程进程地址空间创建一个线程在远程进程地址空间创建一个线程 HANDLE CreateRemoteThread( HANDLE hProcess, / 目标进程目标进程 LPSECURITY_ATTRIBUTES lpThreadAttributes, / 安全属性安全属性 DWORD dwStackSize, / 堆栈大小堆栈大小 LPTHREAD_START_ROUTINE ThreadFunc , / 线程函数线程函数 LPVOID lpParameter, / 线程参数线程参数 DWORD dwCreati

11、onFlags, / 创建标志创建标志 LPDWORD lpThreadId / 线程线程ID ); 把LoadLibrary/FreeLibrary作为 CreateRemoteThread函数的 线程例程。 u问题1:LoadLibrary/FreeLibrary的函数指针? nLoadLibrary和 FreeLibray两个函数都在 kernel32.dll 中。且每个进程都加载kernel32.dll, 且LoadLibrary 和 FreeLibray两个函数加载地址相同。因此,只要 获取该地址然后传递到CreateRemoteThread就可以。 u问题2:如果ThreadFun

12、c 的参数lpParameter被解释为指 针针,则它必须指向远程进程内的数据远程进程内的数据。如何实现? n通过WriteProcessMemory在远程进程虚拟内存虚拟内存中写 入DLL模块名(LoadLibrary需要的DLL名)即可。 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学1616 实际要注入的代码(例如SendMessage代码被放在DllMain 的DLL_PROCESS_ATTACH事件中)现在已经被执行。 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学1717 从目标进程中将DLL 卸载 苏曙光苏曙光. .软件学院软件学院. .华中科

13、技大学华中科技大学1818 进程间通信 问题: uDLL获取了包含密码的编辑框的文本,它必须 将它发送回原程序,以便能正确显示出来。 方法: u文件映射 uWM_COPYDATA u剪贴板 u#pragma data_seg 共享数据段 u 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学1919 总结:实现步骤总结:实现步骤 1.获取远程进程(OpenProcess)的 HANDLE; 2.为远程进程中的 DLL名分配内存(VirtualAllocEx); 3.将 DLL全路径名写入分配的内存:WriteProcessMemory; 4. CreateRemoteThread

14、 和 LoadLibrary 将DLL映射到远程进程; u在DLL的 DLL_PROCESS_ATTACH事件中获取密码 5.等待线程终止(WaitForSingleObject),即直到 LoadLibrary 调用返回; 用合适的方法接收和处理获取的密码 6.获取远程线程的退出代码(GetExitCodeThread)并释放分 配的虚拟地址(VirtualFreeEx); 7.用 CreateRemoteThread和FreeLibrary从远程进程卸载 DLL。 8. 关闭所有句柄。 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2020 新增一个大作业新增一个大作业

15、编写一个程序,能够获取普通的第三方进程中某编写一个程序,能够获取普通的第三方进程中某 个窗口上的文本编辑框(尤其是密码框)的内容。个窗口上的文本编辑框(尤其是密码框)的内容。 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2121 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2222 例子例子 功能:功能: u在在指定进程指定进程中加载中加载用户用户DLL,要进行,要进行虚拟内存读写虚拟内存读写 n在进程中创建一个在进程中创建一个远程线程远程线程(负责加载用户负责加载用户DLL)。 n远程线程远程线程:在第三方空间运行,需要在第三方空间运行,需要参数参数,

16、VM n线程函数:线程函数:LoadLibrary( “用户编写的用户编写的DLL模块模块” ) 相关函数相关函数 uOpenProcess:打开目标进程;:打开目标进程; uVirtualAllocEx/VirtualFreeEx:分配:分配/释放内存;释放内存; uWriteProcessMemory:写虚拟内存;:写虚拟内存; uLoadLibrary( ) ;装载装载DLL模块模块 uCreateRemoteThread 创建远程线程。创建远程线程。 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2323 OpenProcess OpenProcess /打开目标进程

17、打开目标进程 HANDLE hProcess = OpenProcess( PROCESS_CREATE_TH READ | PROCESS_VM_OPERATION | PROCESS_VM_W RITE, FALSE, dwProcessID ); 第一个参数指定操作权限:第一个参数指定操作权限: uROCESS_CREATE_THREAD:在该进程中创建新线程:在该进程中创建新线程 nCreateRemoteThread uPROCESS_VM_OPERATION:分配:分配/释放内存释放内存 nVirtualAllocEx/VirtualFreeEx uPROCESS_VM_WRITE

18、:向进程地址空间写:向进程地址空间写 nWriteProcessMemory 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2424 主窗口主窗口 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2525 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2626 主窗口主窗口 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2727 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2828 主窗口主窗口 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学2929 UserMonitor.dllUserMonitor.dll 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学3030 苏曙光苏曙光. .软件学院软件学院. .华中科技大学华中科技大学3131 主窗口主窗口 查找感兴趣的目标进程szTarget 准备加载 Monitor.dll 准备卸载 Monitor.dll 苏曙光苏曙光. .软件学院软件学院. .华中科

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论