eWOW64Ext v1.1: 64位环境下32/64模块加载与动态调用技术解析

版权申诉
0 下载量 163 浏览量 更新于2024-11-23 收藏 348B 7Z 举报
资源摘要信息:"eWOW64Ext v1.1是一个在64位操作系统上实现加载任意32/64位模块的工具,它能够通过动态调用和64位汇编技术来实现对64位进程的读写操作。该模块利用了wow64子系统,这是一个在64位系统上模拟32位程序执行的子系统。在64位操作系统中,存在两个地址空间:32位和64位。32位程序默认访问32位地址空间,而64位程序访问64位地址空间。eWOW64Ext v1.1通过切换到64位地址空间,获取并调用ntdll.dll的相关函数,这些函数的基址是64位的,与常见的32位模块基址不同。模块的调用过程需要在一个子程序内完成,并且部分代码是基于C++开源代码wow64ext实现的,作者是rewolf。 了解eWOW64Ext v1.1模块的关键知识点包括: 1. **64位操作系统架构**: 在64位系统中,存在两个独立的地址空间,分别是32位和64位。这允许64位系统同时运行32位和64位应用程序。 2. **wow64子系统**: 一个特殊的系统组件,负责在64位Windows操作系统中模拟32位环境,从而允许32位应用程序正常运行。 3. **地址空间切换**: eWOW64Ext v1.1利用了64位和32位地址空间可以切换的原理,通过特定的方式进入到64位地址空间,并进行操作。 4. **ntdll.dll**: 是Windows系统中一个非常重要的系统动态链接库,包含了操作系统底层功能的接口。模块通过调用64位版本的ntdll.dll中的函数来执行其功能。 5. **动态调用**: 是一种在运行时动态解析和执行函数调用的技术,使得程序能够根据需要加载和调用不同的模块和函数。 6. **64位汇编语言**: 在模块中使用64位汇编代码来进行某些操作,这比使用高级语言可能更接近硬件,效率更高。 7. **进程读写**: eWOW64Ext v1.1能够读取和写入64位进程的内存,这对于调试、修改或者监控应用程序非常重要。 8. **C++开源代码**: 模块的一部分代码基于C++开源项目wow64ext,这意味着它使用了开源社区的贡献,展示了开源协作精神。 9. **作者rewolf**: 在开源社区中提供wow64ext代码的贡献者,他的代码被eWOW64Ext v1.1模块借鉴和使用。 通过对以上知识点的了解,我们可以更深入地掌握eWOW64Ext v1.1模块的运行原理和它在64位系统上运行32/64位程序时所涉及的关键技术。同时,该模块的使用也说明了现代操作系统中地址空间管理和程序兼容性技术的复杂性和先进性。"
2021-06-25 上传
没有任何实质性内容更新,仅内部架构调整,更易于派生模块使用; 首发于精易的 易语言全功能 SQLite3 数据库接口模块必须更新到本次版本后方可正常使用!下载:https://bbs.125.la/forum.php?mod=viewthread&tid=14361253 wow64 是在 64 位操作系统上允许 32 位程序(比如易编译的程序)执行的模拟器子系统;在 64 位操作系统中,不管你的程序是 32 还是 64 位的,其实都存在两个地址空间,正常情况下 32 位程序访问的自然是 32 位的地址空间,而 64 位程序访问其 64 位地址空间。 但是这两个空间是同时存在且可以切换的,本模块就是通过该原理切换到 64 位地址空间获取 ntdll.dll 相关函数进行调用(注:此基址是 64 位的,与平常获取的 32 位模块基址截然不同); 也就是:wow 环境 -> 进入 x64 环境 -> x64 函数调用 或 x64 汇编代码 -> 退出 x64 环境 -> wow 环境,以上必须在一个子程序内完成; 部分实现代码借鉴 c++ 开源代码:wow64ext,在此感谢作者 rewolf。 实现易语言纯 64 位汇编置入代码; 允许调用易程序 64 位 ntdll.dll 的所有函数,也就是你虽然开发的是 32 位程序,但可以实现很多 64 位函数所能实现的功能; 直接使用 64 位函数自由读写(注入) 64 位进程,与很多模块调用 NtWow64xxx 系列函数实现的方式有本质不同; 部分常用 ntdll.dll 函数已在模块直接提供,或以模拟 kernel32 函数的调用形式提供,v1.1 新增多个函数; 未提供函数获取地址后,可使用 X64Call 这个通用函数调用即可; 大部分提供的 64 位功能也同时提供了 32 位版本,以便兼容不同需求(模块在 32 位系统中不会开启 64 位功能引起异常,但 32 位功能依然可用); 支持加载任意 32/64 位 DLL,从此易语言可以调用外部 64 位 DLL 了(包括加载 kernel32.dll),v1.1 新增功能; 除了动态加载外,还支持 32 位 DLL 的内存加载,但 64 位只能加载本地 DLL 文件,v1.1 新增功能; 如有 BUG,请提供错误重现代码及执行环境,如非不可抗因素我都会及时更新的; 以下只是适用于 64 位的部分函数,模块中以相同命令形式实现的 32 位命令,这里就不列举了; 辅Zhu函数 fn_WOW64Enabled 如果你在代码中需要使用 64 位汇编或者操作 64 位进程,则初始化时应确保本函数返回真。实际只要是 64 位操作系统,均应返回 真 fn_ProcessIsX64 检测指定进程是否为 64 位进程 fn_CalcModOrFuncHash 使用过动态调用DLL的都清楚取模块基址和函数指针,微软默认使用字符串对比,本模块可使用哈希对比效率和易用上相对提升,本函数用于计算模块或函数哈希 X64Call 调用 64 位函数通用版本 X64CallArr 调用 64 位函数通用版本,数组方式传参,支持无限个数参数;【v1.2新增】 X64MemCopy 同类还有 X64MemCmp 函数;从 64 地址复制数据或 64 位地址与 32 位地址数据对比,但仅限进程内部 X64GetLong64 获取 64 位地址数值,同类函数还有:X64GetLong32、X64GetWord、X64GetByte X64GetTEB 取当前易程序 64 位 TEB,通过 TEB 再取 PEB,则进程和线程信息以及模块等一览无余了 GetNtdll64 ntdll.dll 在 64 位环境下的内存基址 GetModuleHandleEx64 通过模块哈希值获取其 64 位地址空间的内存基址(易进程而不是外部进程哦);同类还有 GetModuleHandle64 GetProcAddressEx64 通过函数哈希值或函数索引序号获取其 64 位调用地址;同类还有 GetProcAddress64 NtQuerySystemInformation64 cha询系统信息,可获取很多类别信息。这个 API 微软已不推荐使用并给出部分替代 API,但其个别功能十分好用且没用可替代品。cha询系统进程也是最全面的 OpenProcess64 打开进程句柄,关闭进程句柄时使用 CloseHandle64;【v1.1新增】 HeapAlloc64 堆管理函数,同类还有 GetDefaultHeap64/HeapReAlloc64/HeapFree64/HeapSize64;【v1.1新增】 malloc64 简化版默认堆管理函数,同类还有 realloc64/fre