易语言教程_易语言源码_易语言视频教程_易语言论坛

 找回密码
 点击注册

Vip新手入门区
新手学习指南  学员作品展示 Vip课程总纲  Vip绝密课程系列

Vip相关下载区
Vip模块下载   Vip模块绑定   Vip模块例子 魔鬼插件下载  魔鬼插件例子  教程工具下载

Vip论坛服务区
教程问题提问区   模块问题提问区 技术交流区   魔鬼插件建议   忘记密码找回

VIP会员办理QQ: 8643245   
【请先加好友,然后到好友列表双击联系客服,办理VIP会员。】
【基础篇】易语言辅助入门基础教程
VIP模块办理QQ: 7189694 办理正版魔鬼作坊VIP模块 【基础篇】OD与CE入门基础教程
办理【终身VIP会员】“秒杀价” 仅需 RMB278.00元… 【基础篇】零基础绝密汇编语言入门课程 (共26课已完成)…
办理VIP详情…猛击这里查看详情 【基础篇】VIP辅助入门基础教程-新手必学 已发布10课 ……
VIP教程免费试看章节…猛击下载 【第1款】制作“辅助挂”教程目录查看(共107+16_x64下更新课已完成)…
亲爱的VIP学员,请到此写下你学习的感受与发布作品截图… 【第2款】制作“任务挂”教程目录查看(共77+1_x64下更新课已完成)…
卍解吧!不用bp send类封包断点找CALL的各种通杀思路 【第3款】驱动过保护技术课程(共38课已完成)…
【绝密教程】VIP绝密教程系列---注意:随时会更新! 【第4款】VIP邪恶二叉树辅助课程 (共31+17_x64下更新课已完成)…
【精品第13款】3D射击游戏与页游透视 智辅课程 已完成17课… 【第5款】零基础易语言按键辅助教程 (30课已完成)…
【精品第14款】变态功能辅助是如何炼成的 已完成36课… 【第6款】从零开始学习封包辅助技术教程(20课已完成) …
【精品第15款】DNF商业变态辅助的修炼之路 已完成27课… 【第7款】大杀特杀分析来源与CALL吸血鬼课程 (56课已完成)
【精品第16款】中控台多线程多开自动化商业辅助课程 已完成66课… 【第8款】完全零基础网页辅助课程(40课已完成)
【全新精品第17款】检测原理与过游戏内存检测技术课程 已发布9课… 【第9款】自动登录与操控LUA技术课程 (共46+8_x64下更新课已完成)…
【全新精品第18款】手游全自动化任务脚本辅助课程 已发布25课…… 【第10款】网页辅助封包脱机进阶课程 已完成30课…
【全新精品第19款】D3D方框骨骼透视与自瞄辅助课程进阶篇 已发布34课…… 【第11款】VC++ Lua脚本辅助课程 已完成112课…
【全新精品第20款】 X64模拟器吃鸡游戏方框透视自瞄辅助课程 发布中... 【第12款】网游脱机封包智辅课程 已完成35课…
查看: 4143|回复: 22

eWOW64Ext v1.21 - 加载任意 32/64 模块|动态调用|64 位汇编|64 位进程读写

[复制链接]

53

主题

109

回帖

134

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
55135
发表于 2019-6-18 16:43:12 | 显示全部楼层 |阅读模式
eWOW64Ext v1.21 - 加载任意 32/64 模块|动态调用|64 位汇编|64 位进程读写


模块原理:
wow64 是在 64 位操作系统上允许 32 位程序(比如易编译的程序)执行的模拟器子系统;在 64 位操作系统中,不管你的程序是 32 还是 64 位的,其实都存在两个地址空间,正常情况下 32 位程序访问的自然是 32 位的地址空间,而 64 位程序访问其 64 位地址空间。
但是这两个空间是同时存在且可以切换的,本模块就是通过该原理切换到 64 位地址空间获取 ntdll.dll 相关函数进行调用(注:此基址是 64 位的,与平常获取的 32 位模块基址截然不同);
也就是:wow 环境 -> 进入 x64 环境 -> x64 函数调用 或 x64 汇编代码 -> 退出 x64 环境 -> wow 环境,以上必须在一个子程序内完成;
部分实现代码借鉴 c++ 开源代码:wow64ext,在此感谢作者 rewolf。


模块功能:
1.实现易语言纯 64 位汇编置入代码;
2.允许调用易程序 64 位 ntdll.dll 的所有函数,也就是你虽然开发的是 32 位程序,但可以实现很多 64 位函数所能实现的功能;
3.直接使用 64 位函数自由读写(注入) 64 位进程,与很多模块调用 NtWow64xxx 系列函数实现的方式有本质不同;
4.部分常用 ntdll.dll 函数已在模块直接提供,或以模拟 kernel32 函数的调用形式提供,v1.1 新增多个函数;
5.未提供函数获取地址后,可使用 X64Call 这个通用函数调用即可;
6.大部分提供的 64 位功能也同时提供了 32 位版本,以便兼容不同需求(模块在 32 位系统中不会开启 64 位功能引起异常,但 32 位功能依然可用);
7.支持加载任意 32/64 位 DLL,从此易语言可以调用外部 64 位 DLL 了(包括加载 kernel32.dll),v1.1 新增功能;
8.除了动态加载外,还支持 32 位 DLL 的内存加载,但 64 位只能加载本地 DLL 文件,v1.1 新增功能;
9.如有 BUG,请提供错误重现代码及执行环境,如非不可抗因素我都会及时更新的;


模块部分命令简述:
以下只是适用于 64 位的部分函数,模块中以相同命令形式实现的 32 位命令,这里就不列举了;


辅助函数
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
NtQuerySystemInformation64cha询系统信息,可获取很多类别信息。这个 API 微软已不推荐使用并给出部分替代 API,但其个别功能十分好用且没用可替代品。cha询系统进程也是最全面的
OpenProcess64打开进程句柄,关闭进程句柄时使用 CloseHandle64;【v1.1新增】
HeapAlloc64堆管理函数,同类还有 GetDefaultHeap64/HeapReAlloc64/HeapFree64/HeapSize64;【v1.1新增】
malloc64简化版默认堆管理函数,同类还有 realloc64/free64
RtlUnicodeToAnsi64内核实现的 Unicode、Ansi 结构(不是数据指针)管理函数,同类还有:RtlInitAnsiString64/RtlFreeAnsiString64、RtlInitUnicodeString64/RtlFreeUnicodeString64、RtlAnsiToUnicode64;【v1.1新增】
LoadLibraryEx64可加载任意 64 位 DLL 到当前进程,获取基址及函数地址后进行调用即可;其释放函数为:FreeLibrary64
另,本函数 32 位版本 LoadLibraryEx86/FreeLibrary86 还支持加载 32 位的内存 DLL;【v1.1新增】

外部进程命令
NtQueryProcessPEB64 获取外部 64 位进程PEB
VirtualAllocEx64 在外部 64 位进程分配内存,释放函数为 VirtualFreeEx64
VirtualQueryEx64 cha询外部 64 位进程指定内存区域的状态,一个地址是否能写入最好先测试一下,禁止写的话要更改内存属性才能开始写入
VirtualProtectEx64 更改外部 64 位进程指定内存区域的保护属性
ReadProcessMemory64 读取外部 64 位进程指定区域的内存数据
WriteProcessMemory64 向外部 64 位进程指定内存区域写入数据
NtQueryInformationProcess64cha询外部 64 位进程信息
GetThreadContext64获取线程上下文,多用于 SEH,仅供高级用户使用;相应设置函数为 SetThreadContext64


编写 64 位汇编(供汇编爱好者使用):
模块公开了几个 汇编代码 常量:
#X64_Start - 进入 x64 环境
#X64_End - 退出 x64 环境

.子程序 编写x64汇编框架, , , 返回值不限制,同 x86 相同
' 如果本子程序中需要调用 64 位函数,则此时应保存 fs 寄存器及对齐栈顶,可参考源码中的 #X64_SaveFs
置入代码 (#X64_Start)
' 在此区域内可使用 64 位纯汇编代码
置入代码 (#X64_End)  ' #X64_End 与 #X64_Start 必须在同一个子程序中成对使用
' 如果本子程序中需要调用 64 位函数,则此时应恢复 ss/fs 寄存器,可参考源码中的 #X64_RestoreFs
' 然后就是 x86 中的平栈返回或者由易子程序返回

开源协yi:
本模块源代码核心来源于 rewolf-wow64ext,为尊重其劳动成果,沿用其 LGPL 3.0 开源许可证;
你可以将本模块源代码随意用于免费或商业软件;你也可以自由修改源代码,但公开发布应予以保留原作者署名;

更新日志:
v1.21 - 2019.04.14
  • 没有任何功能上的更新,内部代码与结构调整优化,轻微提升效率与派生模块适配性;
v1.2 - 2019.03.12
  • 添加:添加了一个 X64CallArr 函数,使用数组方式调用 64 位函数,这样就相当于无限参数数量了,应易友开始学易语言的需求;
  • 更新:极大优化了 X64Call 的代码,现在的通用调用性能损失几乎可忽略不计,实际上本模块的所有代码都是一句句汇编写出来的,本身比起依赖 VC 编译器自动优化的代码都要效率很多倍;
  • 更新:修正加载本模块后无法使用易语言 “运行” 命令的 BUG,实际还有 CreateProcess API 也一同修复,感谢易友scgs3178 发现的问题;
v1.1.1 - 2019.03.03
  • 没有任何功能上的更新,只是内部接口预留了空间,便于派生模块使用,后期我如果发布以本模块为基础的功能模块时,至少要更新到该版本!
v1.1 - 2019.03.01
  • 添加:ntdll 实现的 LoadLibraryEx64/FreeLibrary64 及其 32 位版本,从此开始你的易语言可以随意加载 64 位 DLL 啦(包括 64 位的 kernel32.dll),只要你会调用 ^_^,这应该是革命性的首创吧。(要是有前辈已经公布了算我孤陋寡闻了;64 位函数没多难,只要注意参数类型、堆栈对齐和结构对齐就可以了)
  • 添加:原创的内存 DLL 加载函数,集成在 LoadLibraryEx32/FreeLibrary32 之中,不要高兴的太早,只能加载内存中 32 位的 DLL(不管是字节集还是数据指针均可);64 位的短期内实现不了了,因为 WOW64 环境切换的 64 位环境实际上除了 ntdll 就没啥了,想手动实现 Peloader 处理 DLL 所有导入库难度太大了;其实意义也不大,能加载本地 64 位 DLL 够用了;该代码参考诸多前辈开源项目,由本人综合而成,与网上流传的诸多版本最大的不同是除了 DLL 存储空间外没有申请任何额外的内存;返回的基址就是标准的 PE 格式,当然没有zc到进程加载列表,所以 API 方式的 GetProcAddress 无法获取函数,只能用本模块提供的 GetProcAddressEx(也就是传递函数哈希值)的方法获取调用函数地址,其实这也是属于隐藏加载 DLL 了;
  • 添加:OpenProcess64/CloseHandle64 及其 32 位版本,用于打开关闭进程句柄;实际上通过进程标识符打开进程句柄时 32/64 位版本是通用的;
  • 添加:ntdll 实现的 GetDefaultHeap64/HeapAlloc64/HeapReAlloc64/HeapFree64/HeapSize64 及其 32 位版本,实话说从堆申请内存而言,64 位意义不大,只是随着 32 位版本一起提供了
  • 添加:ntdll 实现的简化版默认堆申请函数 malloc64/realloc64/free64 及其 32 位版本,省的每次都得获取默认堆句柄了
  • 添加:ntdll 实现的 RtlInitAnsiString64/RtlFreeAnsiString64、RtlInitUnicodeString64/RtlFreeUnicodeString64、RtlAnsiToUnicode64/RtlUnicodeToAnsi64 字符串处理函数及其 32 位版本,虽然这些函数重要程度不高,但较多 NT-API 均需使用,因此模块予以提供;
  • 添加:绝大部分函数模拟 Windwos 机制,在调用失败后会自动设置错误码,以便调用 GetLasterror 函数可以获得错误原因
  • 更新:修正 GetProcAddressEx 系列函数针对转向 DLL 函数地址获取错误的 BUG;
  • 更新:修正 VirtualQueryEx86 函数参数 4 的描述错误(仅仅是描述而已),结构长度应为 28 而不是 24;
  • 更新:优化模块共享机制,作为底层模块,即使再多扩展模块加载本模块也只会共享相同接口,而不会占用更多资源;
  • 更新:优化了部分代码,提升了几个时钟周期的效率(( ╯□╰ ),没办法,本就是底层的东西,效率提升不了多少了)


回复后得到下载地址:
游客,如果您要查看本帖隐藏内容请回复


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?点击注册

x

0

主题

13

回帖

7

积分

编程入门

Rank: 1

魔鬼币
38
发表于 2019-6-22 21:18:18 | 显示全部楼层
来学习学习~

14

主题

36

回帖

39

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
16044
发表于 2019-7-1 08:31:50 | 显示全部楼层
不知道的萌新来访问

13

主题

96

回帖

68

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
40982
发表于 2019-8-3 16:37:44 | 显示全部楼层
111111111111111111111111111

72

主题

59

回帖

138

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
32529
发表于 2019-8-8 10:51:10 | 显示全部楼层
11111111111111111

0

主题

22

回帖

11

积分

编程入门

Rank: 1

魔鬼币
53
发表于 2019-8-24 12:17:27 | 显示全部楼层
11111111111111

4

主题

15

回帖

14

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
12605
发表于 2020-2-26 13:56:06 | 显示全部楼层
收藏了 哈哈哈

0

主题

4

回帖

2

积分

编程入门

Rank: 1

魔鬼币
43
发表于 2020-5-29 17:00:17 | 显示全部楼层
瞧一瞧,看一看

0

主题

28

回帖

14

积分

终身VIP会员

Rank: 7Rank: 7Rank: 7

魔鬼币
11289
发表于 2020-6-7 00:00:06 | 显示全部楼层
魔兽世界过检测驱动,CE附加调试不崩溃

0

主题

5

回帖

3

积分

编程入门

Rank: 1

魔鬼币
1
发表于 2020-6-16 09:28:44 | 显示全部楼层
333323333333333333333333333333333333
您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

魔鬼作坊|易语言教程|易语言源码|易语言论坛|易语言视频教程| 论坛导航|免责申明|手机版||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表魔鬼作坊立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2019 All Right Reserved.
快速回复 返回顶部 返回列表