易语言远程x64位汇编call技术

易语言x64位调用call函数与 分析64位call技术

上两篇易语言对x64位进程操作的技术贴发出后,因为得知我们 Game-Ec 驱动模块8.5.3里
开发了对x64程序进程里的模块,API取地址,内存读写,内存搜索,函数hook,call函数调用等诸多命令功能后,很多写64位游戏辅助的学员激动不已。

因为这些功能预示着写64位游戏辅助不用换其他语言来写了,有了这次版本里加入的各种x64功能,易语言可以完美的开发64位游戏内存辅助了,因为可以读写内存数据,可以HOOK,可以内存搜索,最关键的是还可以远程调用x64程序进程里的指定call执行x64汇编代码。

今天就来示范讲解下这次我开发加入的 调用64位程序进程里的call的命令:
x64进程_调用函数()
这个命令有两个参数,
进程ID //目标x64位进程ID
x64汇编 //执行call的x64汇编代码

这个命令,之前一直不够稳定,所以一直测试,后来经过黑,色,衬,衣他的改良修改指点,现在完美了
({:101_195:}都怪黑色,衬,衣他太忙,不然这篇帖子能早出,哈哈)。

写法和我们已经出版的系列辅助视频教程啊教的写32位程序CALL一样简单。

首先我用vs2020写了个64位程序(mfcapplication1.exe),来作为示范用(当做64位的游戏)
布局:
在这里插入图片描述
程序源代码:
在这里插入图片描述

这个64位程序,主要功能就是构建了一个call功能:add ( ) 加法函数
然后计算出2个数的和
首先我们要来逆向分析下我写的这个X64位程序,找出我们要调用的CALL,
既然是64位程序,当然就需要个64位DUG调试工具(类似我们的OD)
我用的是 x64dbg.exe

附加我的64位程序:mfcapplication1.exe 后
我们在x64dbg.exe 工具命令栏目输入 bp MessageBoxA 来对 信息框API进行函数断点,因为方便定位,我就在源码里加了 MessageBoxA 信息框
这样我们单击 确定 按钮时候 就会断下来,然后好快速分析到 我们这个64位示范程序的 确定 按钮call函数
找到了这里:
在这里插入图片描述

从上面反汇编代码 右边的注释来看,有我们信息框的标题和内容字符,可以肯定现在我们断在了 MessageBoxA 调用位置。
但是我们要找的是 确定 按钮CALL,所以应该在这个call的上一层,所以返回上一层看看
来到了:
在这里插入图片描述

经过F2设置断点后,运行示范程序mfcapplication1.exe,点击确定按钮会被断下来,而且测试几次所mov的几个寄存器的值也是固定的不改变
所以这个应该就是我们要找的 确定 按钮call,
梳理这个call的代码为:
mov rax,000000013F8DAB90
mov rcx,000000000028F020
mov rax,000000013F8DAB90
call 13F8E7EF8
接下来就是写调用它的易语言代码了
因为我们的辅助是用易语言写,代码很简单
如下:
在这里插入图片描述

调用call的:
在这里插入图片描述

sub rsp,38
。。。。。。。
。。。。。。。

add rsp,38
ret
上面代码中的这开头和结尾这3句必须要写,因为x64汇编是必须写上的噢,否则会奔溃。

下面我们来看调用效果:
在这里插入图片描述
可以完美的调用64位程序(mfcapplication1.exe)进程里的指定CALL,好了,这节 就到这里。
更多易语言X64进程操作的技术到:http://bbs.dult.cn/forum.php?mod=viewthread&tid=24053 学习

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
x64进程远程hook,x64_远程调用函数,源码更新V1.8.2:2021/4/12 源码为下方连接帖子后续更新内容: 浅谈64位进程远程hook技术: https://bbs.125.la/forum.php?mod=viewthreadtid=14666356extra= 不管您是转载还是使用请保留版权,源码在精益论坛免费发布本人未获利,请不要用于非法途径。 --------------------------------------------------------------- 2021/4/12 模块源码 v1.8.2更新 1:修复 x64_远调用函数()在 易语言 主线程调用时造成消息无法回调,导致易语言主线程窗口卡死的问题。      感谢楼下易友发现的BUG,已经第一时间更新 2021/4/12 模块源码 v1.8.1更新 1:修复 hook全部卸载时的流程写法的一个错误,由于句柄的提前关闭导致多个hook点卸载不干净的问题 2:改写了消息回调时线程传参的代码优化,优化了其他一些小问题 3:  鉴于很多朋友需要,改写了模块自带实列,对TCP,UDP的两组封包函数做了hook实列写法 4:列子中同样增加对x64_远调用函数()的应用写了几个列子,如使用套接字取得本地或远端IP端口API调用的的应用实列 5:本hook模块不支持非模块内存区hook,如申请的动态分配页等,不是不能支持,只是觉得没有任何意义,对这方面有需求的,自行改写模块源码使用 提醒:hook回调函数中尽量减少耗时代码,时间越长返回越慢,回调中谨慎操作控件,如必须要用到可参考源码中实列写法采用线程操作 历史更新 --------------------------------------------------------------- 2021/3/1   模块源码v1.6更新: 1:修复  x64_远程调用函数()命令,在没有提供 寄存器 参数时,没有返回值的BUG。 --------------------------------------------------------------- 2021/2/28 模块源码v1.5更新: 一:修复win7 64位系统下枚举模块 出现部分模块长度出现负数的问题,从而导致部分win7用户不能使用 二:强化 远程hook64指令_安装 的稳定性:        1,穿插代码中增加对标志位的保护,避免hook位置长度下一条指令为跳转时产生跳转错乱的问题,强化了hook任意位置的定位        2,因为穿插代码中会调用API函数,而64位汇编必须遵守栈指针16字节对齐,故对穿插代码进行栈指针16字节对齐,增强稳定性        3,hook指令安装支持长度由6-127字节 变动 为 6-119字节,原因么没必要说了,代码优化造成的,稍微少了一点无所谓了        4,对模块回调进行了适当优化处理,增强稳定性 三:应支持的朋友需要故增加 x64_远程调用函数()命令,易语言可以直接远call64进程,且无需写汇编代码或机器码指令,支持15个参数,支持返回值,支持16个通用寄存器全部取得返回值       该功能调用即16字节栈对齐,不要用户管堆栈,代码内部构成,远线程执行,你只需要知道call有几个参数,需要什么寄存器,对应提供即可。 四:有朋友说原模块x64英文看了烦,那好吧就给改成了中文标识,弄得我自己也不习惯 五:源码内列子改了改,可以自己看,需要注意的是模块注释的很详细,使用前最好看一看,尤其是hook回调接口的写法和安装的写法最好按照模块列子中的写法来,除非你能把64hook模块组看懂一遍,对于一些对本模块一知半解的朋友请不要乱改乱发,这个模块我会继续增强的,只是工作原因时间有限,只能一点一点来

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值