开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 24566|回复: 115
收起左侧

[易语言纯源码] 易写 64 位子程序|易读写 64 位进程 - eWOW64Ext 模块纯源码

  [复制链接]
发表于 2019-2-22 15:40:30 | 显示全部楼层 |阅读模式   辽宁省大连市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 shier2817 于 2019-2-22 16:07 编辑

首发精易。

本模块的核心作用简单描述是:允许你在一个易语言子程序内进入 64 位环境!
也就是:wow 环境 -> 进入 x64 环境 -> x64 函数调用 或 x64 汇编代码 -> 退出 x64 环境 -> wow 环境,以上必须在一个子程序内完成;
简述:其实这种技术多年前就有,易语言上也有类似的模块,个别模块是有误的,还有的长期未更新或优化,也有可用但总有与处理器优化手册上规则相悖的代码,总之都不能令我满意,因此自己从头编写了这样一个模块,部分实现代码借鉴 wow64ext,在此感谢 rewolf。
原理:wow64 是在 64 位操作系统上允许 32 位程序(比如易编译的程序)执行的模拟器子系统,在 64 位操作系统中,不管你的程序是 32 还是 64 位的,其实都存在两个地址空间,正常情况下 32 位程序访问的自然是 32 位的地址空间,而 64 位程序访问其 64 位地址空间。
但是这两个空间是同时存在且可以切换的,本模块就是通过该原理切换到 64 位地址空间获取 ntdll.dll 相关函数进行调用(注:此基址是 64 位的,与平常获取的 32 位模块基址截然不同);

扩展延申功能:
1、可以直接使用 64 位函数自由读写(注入) 64 位进程,与很多模块调用 NtWow64xxx 系列函数实现的方式有本质不同;
2、正是由于其原理本模块允许你的易程序使用 64 位 ntdll.dll 的所有函数,也就是你虽然开发的是 32 位程序,但可以实现很多 64 位函数所能实现的功能;
3、我公开了部分常用函数可直接调用,其余函数获取地址后,使用 X64Call 这个通用函数调用即可;
4、通过本模块的框架代码,可以轻松在易语言中实现 x64 汇编的置入代码;与很多语言不同,易的置入代码接受的是硬编码(即编译后的 opcode)而不是汇编助记符,虽然直观性没有了,但可以使我们更灵活的在一段子程序中使用 x86/x64 混编,也就是你可以使用 64 位的通用寄存器来编写 x64 汇编而不必使用 REX 前缀;
5、后续会考虑增加必要的功能,根据易友的反馈;
6、本模块按使用难易度划分的话,属于中高级用户群,如果 Win32 API 都用不明白的怕是意义不大;
7、稍后会开发个给初中级用户便捷使用的中文版 x86/x64 通用进程读写模块,如果需要的人多的话;
8、如有 BUG,请提供错误重现代码及执行环境,如非不可抗因素我都会及时更新的;
模块部分命令简述:

辅Zhu函数:
  
子程序名返回值类型公开备 注
fn_WOW64Enabled逻辑型 如果你在代码中需要使用 64 位汇编或者操作 64 位进程,则初始化时应确保本函数返回真。实际只要是 64 位操作系统,均应返回 真;

子程序名返回值类型公开备 注
fn_ProcessIsX64逻辑型 检测指定进程是否为 64 位进程

子程序名返回值类型公开备 注
fn_CalcModOrFuncHash整数型 使用过动态调用DLL的都清楚取模块基址和函数指针,微软默认使用字符串对比,本模块可使用哈希对比效率和易用上相对提升,本函数用于计算模块或函数哈希



易内部命令:
  
子程序名返回值类型公开备 注
X64Call长整数型 调用 64 位函数,进程内外均可;实际我在项目中均是针对单独功能单独编写调用以提升效率,本函数仅供缺乏汇编知识的用户通用

子程序名返回值类型公开备 注
X64MemCopy 同类还有 X64MemCmp 函数;从 64 地址复制数据或 64 位地址与 32 位地址数据对比,但仅限进程内部

子程序名返回值类型公开备 注
X64GetLong64长整数型 获取 64 位地址数值,同类函数还有:X64GetLong32、X64GetWord、X64GetByte

子程序名返回值类型公开备 注
X64GetTEB长整数型 取当前易程序 64 位 TEB,通过 TEB 再取 PEB,则进程和线程信息以及模块等一览无余了

子程序名返回值类型公开备 注
GetNtdll64长整数型 ntdll.dll 在 64 位环境下的内存基址,其实在易中进行 64 位编程主要就靠它的函数了,因为 kernel32 是获取不到的

子程序名返回值类型公开备 注
GetModuleHandleEx64长整数型 通过模块哈希值获取其 64 位地址空间的内存基址(易进程而不是外部进程哦);同类还有 GetModuleHandle64、GetProcAddress64、GetProcAddressEx64

子程序名返回值类型公开备 注
NtQuerySystemInformation64整数型 cha询系统信息,可获取很多类别信息。这个 API 微软已不推荐使用并给出部分替代 API,但其个别功能十分好用且没用可替代品。cha询系统进程也是最全面的



外部进程命令:
  
子程序名返回值类型公开备 注
NtQueryProcessPEB64长整数型 获取外部 64 位进程PEB

子程序名返回值类型公开备 注
VirtualAllocEx64长整数型 在外部 64 位进程分配内存,释放函数为 VirtualFreeEx64

子程序名返回值类型公开备 注
VirtualQueryEx64整数型 cha询外部 64 位进程指定内存区域的状态

子程序名返回值类型公开备 注
VirtualProtectEx64逻辑型 更改外部 64 位进程指定内存区域的保护属性

子程序名返回值类型公开备 注
ReadProcessMemory64逻辑型 读取外部 64 位进程指定区域的内存数据

子程序名返回值类型公开备 注
WriteProcessMemory64逻辑型 向外部 64 位进程指定内存区域写入数据

子程序名返回值类型公开备 注
NtQueryInformationProcess64整数型 cha询外部 64 位进程信息

子程序名返回值类型公开备 注
GetThreadContext64逻辑型 获取线程上下文,多用于 SEH,仅供高级用户使用;相应设置函数为 SetThreadContext64


以上只是适用于 64 位的部分函数,同样我在模块中也实现了大多数命令相同形式的 32 位命令,用于操作 32 位进程,合计公开函数有 50 多个,这里就不列举了;

编写 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 中的平栈返回或者由易子程序返回


其他:
由于本模块并非提供给初级用户使用,因此没有写太详尽的 demo,只提供了一份编写测试时用于测试的 test,参考其代码可获得模块使用方法;
开源协yi:
本模块源代码核心来源于 rewolf-wow64ext,为尊重其劳动成果,沿用其 LGPL 3.0 开源许可证;
你可以将本模块源代码随意用于免费或商业软件;你也可以自由修改源代码,但公开发布应予以保留原作者署名;
关于赞助:
本人从 04 年左右开始接触易语言,随着技术的不断进步,近期特别热衷于编写底层高效的模块、支持库等;当然这离不开汇编,从最开始的自学能取个指针,到后来我把很多 C/C++ 开源模块以汇编形式转成了易,再后来通读了 Intel 开发手册和优化手册后又发现,在汇编代码的指令选用及语句顺序、分支跳转上还有那么多可优化的方面,因此最近这段时间就想把以前的代码重新整理出来;
因为大多数是成熟稳定的开源代码,我也秉承其开源精神,准备无偿发布给有需要的易友使用,为易语言略尽绵力;
每次公开的源码可以说只是相对一部分的功能而不是完整软件,或者您认为这没什么价值,这也是仁者见仁智者见智吧;高效稳定的模块或支持库下编写的软件,相信会对开发者甚至易语言都是个好的开始;
但不得不说这是个相当耗时且没用回报的工作,仅仅是出于个人爱好,我现在几乎很少接单做成品软件了,可毕竟要生活,如果这份源码您用的上并且也给您带来部分利益,我接受任何形式的打赏与赞助(点击下方“打赏”按钮选择适合您的方式即可),以便我有更多时间和精力整理余下的源码;
当然如果您只希望无偿使用,只要好用以后能点个赞,我也倍感欣慰!凡是交易币/微信/zfb打赏的用户可私信索取我的联系方式!
enjoy it!

npzs(shier2817) 2019-02-22 于大连

eWOW64Ext.rar (289.39 KB, 下载次数: 503)

点评

支持开源~!感谢分享   江西省上饶市  发表于 2019-3-21 23:36
该版本停用,新版本 - https://bbs.125.la/forum.php?mod=viewthread&tid=14322538   辽宁省大连市  发表于 2019-3-6 15:45

评分

参与人数 29好评 +23 精币 +71 收起 理由
anchor1986 + 1 新技能已get√
小程呈 + 1 支持开源~!感谢分享
日勿日勿 + 1 + 2 支持开源~!感谢分享
陈大奶么么哒 + 1 + 3 支持开源~!感谢分享
酸爽泡面 + 1 感谢分享,很给力!~
花老板 + 1 可以
dulang + 1 + 2 感谢分享,很给力!~
福仔 + 1 + 4 新技能已get√
流星暴雨 + 1 + 2 支持开源~!感谢分享
yyqingying + 1 + 1 感谢分享,很给力!~
shizhong0117 + 1 这是高手!
Taisy + 1 + 5 新技能已get√
niulin1 + 2 支持开源~!感谢分享
gongtengbsg + 1 执行后貌似为0,不会用,楼主发个新手实用的吧。搜索了很多类似的只能读内存,写内存
rainbar + 1 + 1 支持开源~!感谢分享
天空飞翔 + 2 支持开源~!感谢分享
被封禁言 + 1 支持开源~!感谢分享
wyd134 + 1 + 1 感谢分享,很给力!~
fnp902003 + 1 + 1 我是为结尾得奋斗史给分的.
vioer + 1 + 2 支持开源~!感谢分享
左哼哼 + 1 + 1 支持开源~!感谢分享
sinewtec + 1 + 2 支持开源~!感谢分享
戏雨流年 + 1 + 2 支持开源~!感谢分享
zl2017 + 1 + 2 感谢分享,很给力!~
1500150300 + 1 + 2 支持开源~!感谢分享
精易客服 + 1 + 5 支持开源~!感谢分享
AdGame + 1 + 3 支持开源~!感谢分享
司徒西 + 1 + 2 感谢分享,很给力!~
冰点 + 1 + 20 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

发表于 2024-9-3 14:46:43 | 显示全部楼层   广东省广州市
666666666666666
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
发表于 2024-6-19 14:57:54 | 显示全部楼层   内蒙古自治区鄂尔多斯市
6666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2024-6-13 23:44:34 | 显示全部楼层   江西省南昌市
大佬有实力
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2024-2-9 13:46:45 | 显示全部楼层   山东省济南市
学习一下
回复 支持 反对

使用道具 举报

发表于 2024-2-8 21:08:34 | 显示全部楼层   广东省佛山市
感谢分享,很给力!
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2023-11-2 10:29:47 | 显示全部楼层   广东省江门市
这个版本不是很牛
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2023-11-1 19:09:30 | 显示全部楼层   广东省江门市
你很强知道吗神人
回复 支持 反对

使用道具 举报

发表于 2023-9-8 06:08:21 | 显示全部楼层   内蒙古自治区呼伦贝尔市
虽然看不懂但是感觉牛逼
回复 支持 反对

使用道具 举报

结帖率:15% (2/13)

签到天数: 12 天

发表于 2023-3-23 12:15:29 | 显示全部楼层   湖南省郴州市
谢谢!!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

结帖率:0% (0/4)

签到天数: 17 天

发表于 2023-3-18 23:49:18 | 显示全部楼层   湖南省湘潭市
感谢分享  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表