精易论坛

标题: wow64_hook_V2.91 2022/4/27 更新,x64_远程hook,x64_硬断hook,x64_调用函数 [打印本页]

作者: 树上的鱼儿    时间: 2022-4-27 12:03
标题: wow64_hook_V2.91 2022/4/27 更新,x64_远程hook,x64_硬断hook,x64_调用函数
wow64_hook 源码历史更新
' ---------------------------------------------------------------
' ' 2022/4/26 模块源码2.91 更新:
' 1: 修复 hook组织短跳代码() 负跳计算BUG
' 2: 修正 易程序与目标程序之间因权限原因引起的hook回调失败的问题
' 3: 新增 远程hook64指令_前置指令() 命令 本接口仅供高级用户使用 作用是进入我方穿插指令前 事先执行 用户提供的汇编指令,触发时寄存器环境=hook触发时环境,[前置指令]运行结果影响[穿插指令],如果你希望还能继续执行[穿插指令]请不要在[前置指令]尾部使用ret,参数三 默认={}=清除[前置指令] 用户提供的前置汇编指令字节集 *注意:对于汇编能力一般的用户慎用 除非您能清楚的知晓您加入的[前置指令]在您的掌控范围...且对于[穿插指令]的影响
' 4: 增加并公开了更多个 命令 具体忘记记载了
' 5:VehDrx_hook64() 功能组命令增加绑定线程安装 参数
' 6: 此版本往后 使用模块命令前  必须先调用模块命令 help_初始化模块() 以便用户自行决定何时初始化模块  以应对一些冲突环境问题
' 7: 对封包实列 做了适当微调  包含但不限以下
' 对数据报类封包情况 需要处理错误码的情况 详见   recv回调接口内代码
' 对 远程hook64指令_前置指令() 命令的应用 做了 send recv 只回调指定套接字的实列写法
' ---------------------------------------------------------------
' 2021/10/10  模块源码2.82 更新:
' 1:修改 X64_远程调用函数() 远线程调用指定进程中某个函数入口,成功=返回函数执行后的RAX值,其他寄存器值通过参数三返回.失败返回-1 超时返回-2(如果超时 寄存器值将不是有效返回)
' ---增加 绑定线程 参数,可空.默认=0=创建新的远线程执行,-1=绑定进程主模块线程(初始EXE模块的线程),-2=绑定主线程(进程创建的第一个线程),其他负值(-窗口句柄)=绑定窗口线程,其他大于0值=自定义线程ID(负数功能建议代码外部构成提供线程ID 其他线程效果以测试为准 如果线程正在沉睡 可执行代码并不会立即执行),可用于这方面防护的突破
' ---增加 超时间隔 参数,可空.毫秒计,默认=8000毫秒,提供小于等于零则强制性一直等待返回 否则按照给定的毫秒时间等待返回,如果超时 子程序返回 -2, *注意内部并不处理事件 自身主线程调用时结合实际情况
' 2:删除 call_OpenThread() call_ZwClose() call_ZwGetContextThread() call_ZwSetContextThread() x64_取线程上下文结构体() x64_置线程上下文结构体() 这些都不需要了
' 3:修复 X64_取线程上下文() X64_置线程上下文() 在wow64环境下调用偶尔成功偶尔失败的问题 替代了(2:)中删除的子程序
' 4:新增 X64_进程注入dll() 把x64dll注入到x64进程中去,支持绑定线程注入,成功返回模块基址  失败返回-1  超时并不代表注入失败
' 5:新增 X64_进程卸载dll() 卸载通过 X64_注入dll() 加载的dll,支持绑定线程卸载
' 6:新增 x64_内存注入dll() 支持以字节集的方式将dll内存注入到目标进程 支持绑定线程注入 使之无影无踪 成功返回模块基址  失败返回-1
' ---该功能 参考引用网络开源的 X64_ShellCode 跳板指令 结合我方源码实现
' ---注入成功返回的模块基址 亦可用我方模块命令枚举出导出函数
' ---其他方式难以再次获得内存注入的模块基址 如需另做它用 务必在注入时保存
' 7:新增 x64_内存释放dll () 释放 通过 x64_内存注入dll() 注入的内存dll *注意 如果此时dll有线程代码在执行 可能导致目标进程崩溃
' 8:新增 X64_构造保护寄存器指令集 () 返回将15个通用寄存器和1个标志寄存器压入栈中临时保护的字节集汇编指令 与 X64_构造恢复寄存器指令集() 配对使用
' 9:新增 X64_构造恢复寄存器指令集() 返回将15个通用寄存器和1个标志寄存器从栈中弹出并恢复到各寄存器的字节集汇编指令  与 X64_构造保护寄存器指令集() 配对使用
' 10:新增 X64_构造rip跳转指令集()构造一个 jmp[rip] 的长跳转指令集 jmp qword ptr ds[rip] 占6字节 紧随其后需要8字节跳转地址 共返回14字节
' 11:新增 X64_取进程主模块()根据进程句柄 取进程主模块信息 成功由参数二返回模块信息
' 12:新增 X64_取进程主线程ID()成功=返回 进程第一个创建的线程ID 失败=0 *注意:(它不绝对等于EXE主模块线程)
' 13:新增 X64_取进程主模块线程ID()成功=返回执行进程EXE主模块的线程ID 失败=0 *注意:进程主模块线程ID(不绝对等于)进程主线程ID
' 14:新增 dll定义 取窗口线程ID_ () user32.dll-->GetWindowThreadProcessId 返回=线程ID,参数二 能返回进程ID
' 15:新增 X64_取进程名称 () 进程句柄取进程名,成功返回进程名,失败=“”
' 16:新增 X64_构造保护XMM寄存器指令集() 返回 16个XMM寄存器压入到栈中临时保护的字节集指令 指令执行后rsp-0x100
' 17:新增 X64_构造恢复XMM寄存器指令集() 返回 从栈中取出临时保存的XMM寄存器值到XMM寄存器中 指令执行后 rsp+0x100
' ---------------------------------------------------------------
' 2021/10/3  模块源码2.6 更新:
' 1:增加 drx硬件断点hook VehDrx_hook64_安装() 每个进程限4个hook位置 VehDrx_hook64_恢复() VehDrx_hook64_卸载() VehDrx_hook64_暂停()
' r3层 硬件断点hook 在安装时对进程目标所有线程有效 后创建的新线程不会引发断点 除非再次安装 硬断不会改写目标进程执行代码 不会引发crc检测机制 但是会被检测drx机制检测
' 由于易语言的特殊性 数据之间依然存在通讯 实际应该称为x64远程硬件断点hook 这种方式只建议特殊情况使用 在效率和稳定性上不如 远程hook64指令_安装()
' 2:增加 x64_进程句柄到进程ID()成功返回对应进程的PID,失败返回-1
' ---------------------------------------------------------------
' 2021/9/30  模块源码2.5 更新:
' 1:修正 内存64_读字节集() 一个写法错误,修正为一次性读取指定长度的字节集
' 2:增加 本地加载64位dll演示() 的一个参考代码
' 3:增加 X64_查线程信息() ntdll.dll->ZwQueryInformationThread 实现
' 4:增加 X64_打开线程() ntdll.dll->ZwOpenThread
' 5:增加 X64_枚举进程() 全面的枚举系统进程信息,返回比较详细的进程信息结构,成功返回当前枚举到的进程个数,失败为0
' 参数 进程信息, 进程信息64, 数组, 从这个参数返回枚举到进程信息结构体数组
' 成员 线程数目, 整数型
' 成员 创建时间, 长整数型 可用 FileTime转为时间格式()转换为北京时间
' 成员 用户时间, 长整数型
' 成员 内核时间, 长整数型
' 成员 进程名, 文本型
' 成员 基本优先级, 长整数型
' 成员 进程PID, 长整数型
' 成员 父进程PID, 长整数型
' 成员 句柄数目, 整数型
' 成员 虚拟内存统计
' 成员 IO操作统计
' 6:增加 X64_枚举线程() 枚举进程线程信息,返回比较详细的线程信息结构,成功返回指定进程枚举到的线程个数,失败为0
' 参数 进程PID, 整数型, , 必须是一个目前正在运行的进程PID
' 参数 线程信息, 线程信息64, 数组, 从这个参数返回枚举到线程信息结构体数组
' 成员 内核时间, 长整数型
' 成员 用户时间, 长整数型
' 成员 创建时间, 长整数型 可用 FileTime转为时间格式()转换为北京时间
' 成员 等待时间, 长整数型
' 成员 启动地址, 长整数型, 线程在R3层第一条指令地址,一般是RtlUserThreadStart函数线程进程安全入口.如需获得真实线程入口 使用 X64_取线程入口()
' 成员 进程ID, 长整数型
' 成员 线程ID, 长整数型
' 成员 线程优先级, 整数型
' 成员 基本优先级, 整数型
' 成员 切换计数, 整数型
' 成员 线程状态, 整数型
' 成员 等待原因, 整数型
' 7:增加 X64_取线程TEB() 返回指定线程句柄对应的线程TEB结构所在内存地址 返回结果到参数二
' 参数 线程句柄, 整数型, , 提供目标线程句柄, -2=易语言执行线程句柄
' 参数 线程TEB, 长整数型, 参考, 返回TEB构所在内存地址
' 8:修改 原WoW64模块的 X64_取线程上下文() ntdll.dll->ZwGetContextThread 相当于 GetThreadContext函数 需要获得线程上下文必须先挂起线程 并根据CONTEXT64结构ContextFlags成员获得相应信息 wow64环境下有很大几率调用失败,不建议使用本接口 以供参考或临时使用
' 9:修改 原WoW64模块的 X64_置线程上下文() ntdll.dll->ZwSetContextThread 相当于 SetThreadContext函数 置上下文成员必须先挂起线程 并根据CONTEXT64结构ContextFlags成员决定重置项 wow64环境下有很大几率调用失败,不建议使用本接口 以供参考或临时使用
' 10:增加 x64_取线程上下文结构体()  wow64环境下有很大几率调用失败,不建议使用本接口 以供参考或临时使用
' 11:增加 x64_置线程上下文结构体()  wow64环境下有很大几率调用失败,不建议使用本接口 以供参考或临时使用
' 12:增加 X64_取线程真实入口() 根据线程句柄返回线程的入口地址,失败返回0
' 13:增加 X64_线程句柄到进程ID() 成功返回对应进程的PID,失败返回0
' 14:增加 X64_线程句柄到线程ID() 成功返回对应的线程ID,失败返回0
' 15:增加 FileTime转为时间格式() 将18位长整数型的File系统文件创建时间 转换成日期时间型 如 132762591809225412 转为  2021年9月16日19时46分
' 16:另增加了一些参与的变量类型转指针接口;增加或修正一些必要的数据类型;增加一些dll命令 暂停线程__()等
' 17:开辟一个新程序集 [Veh_hook64]本程序集时间原因未完成开发 预留备用 VEH+硬断 hook
' 内部有一些 预备子程序 如有需要可以参考
' call_OpenThread() 在目标进程打开指定线程,返回打开后的线程句柄值,这个句柄在我方进程不能使用,权限属于目标进程,我们只是需要获得这个值,已做它用
' call_ZwClose() 在目标进程中调用 ZwClose 函数关闭目标进程中某个已经打开的对象句柄
' call_ZwGetContextThread() 根据 线程句柄 找到 线程所属进程 中去调用 ZwGetContextThread 函数取得上下文后 从参数二返回 CONTEXT64结构体 调用本接口请挂起线程 否则该数据将不是即时有效的 本接口能稳定获得上下文
' call_ZwSetContextThread() 根据 线程句柄 找到 线程所属进程 中去调用 ZwSetContextThread 函数 重写CONTEXT64结构体,本接口重置所有寄存器,确保在同一次挂起线程中配合call_ZwGetContextThread()改写,否则后果自负 本接口能稳定获得上下文
' call_RtlAddVectoredExceptionHandler() 在目标进程中远线程执行RtlAddVectoredExceptionHandler函数,注册一个向量化异常处理接口,成功返回注册的向量异常处理程序的句柄
' call_RtlRemoveVectoredExceptionHandler()取消注册向量异常处理程序。如果函数成功,则返回值非零。
' ---------------------------------------------------------------
' 2021/5/5  模块源码2.3 更新:
' 1: hook通讯模式由消息模式 改为 线程模式,线程模式相比消息模式更自由,不存在堵塞的可能性,安装时没有了窗口句柄参数
' 2:远程hook64指令_安装()中 hook长度 参数 现在支持最小 5字节hook,且支持了不在模块区域的可执行代码中hook
' 3  回调接口 现在传回4个参数 必须为 可空 参考 分别是 control_寄存器;自定义回调值;目标进程句柄值;触发Hook线程ID,写的时候参考源码实例
' 4:新增 子程序 x64_申请指定内存()
' 该接口可以在目标进程指定地址处分配内存 如果该地址不可申请会在附近2G偏移内寻找一处申请 失败返回0 成功返回指针
' 5:修复hook过程中因自身进程意外关闭而导致目标进程卡住或崩溃的问题
' 6:修复 远程hook64指令_全部卸载()在调试模式调用时出现的系统报告异常问题
' 7:实例中 对 call_send()特殊处理了一下,这个调用可以根据设置是否绕过hook位置,如果参数四为真不会触发send回调
' 8:实例中 简单增加了几个子程序,封包寻找替换规则() call_API() call_WSASend()这几个给予参考,未用于实例应用,WSASend没有找到目标进程所以未经测试
' 9:提示:X64_取进程函数入口()这个调用返回是比较慢的,因为要在所有的DLL中寻找出对应的DLL然后再去找对应的函数,所以此接口在循环中慎用。正确的方式是:因为系统API接口 在每个进程的地址是一样的,所以只需取得一次保存地址给后续调用使用即可
' 10:实例中 多进程hook由原先的菜单方式 改为 高级表格 选择框快速操作
' ---------------------------------------------------------------
' 2021/4/16  模块源码1.8.7 更新:
' 1:重新架构了穿插汇编指令,优化了一些代码和流程
' 2:在 远程hook64指令_安装()时新增可回调的3个自定义参数值,这些值在回调接口的[寄存器64.自定义值1;2;3]里可获取到该值
' 3:修复 寻找无效8字节指令地址()中一个重要BUG,此BUG极大可能导致之前版本在 远程hook64指令_安装()时即导致目标程序崩溃的现象
' 建议使用者全部更新到此版本............
' ---------------------------------------------------------------
' 2021/4/15  模块源码1.8.6 更新:
' 1:新增3组函数:X64_取模块代码区起始地址(),X64_取模块入口地址(),X64_取模块代码执行段大小()
' 2:自定义类型:模块信息64,的成员构成新增改动为 以下,在枚举模块中亦可直接取得
' 成员 模块基址, 长整数型, , , 模块映像的内存地址 也称为句柄
' 成员 模块长度, 整数型, , , 整个模块文件长度
' 成员 模块入口, 长整数型, , , 模块入口函数地址 如 Mian/DllMain
' 成员 模块代码入口, 长整数型, , , 模块代码执行区起始地址
' 成员 模块代码长度, 整数型, , , 模块代码执行区的长度
' 成员 模块名称, 文本型, , , 文件名称
' 成员 模块路径, 文本型, , , 完整的路径地址
' 3:新消息接口()远程返回_调用回调子程序()优化了代码严谨性,减少hook目标崩溃的可能性
' 4:寻找无效8字节指令地址()由之前的全模块查找 改动为 在模块代码执行区查找
' 5:改写模块实列为 一对多的模式
' 6:模块实列操作控件的方式由变量改为堆内存,避免引起多线程自身崩溃
' 7:模块实列 对 recv,recvfrom两个函数的hook方式由原先 在回调内 暂停recv-->recv_call-->恢复recv,的方式改为经过特殊改造的 recv_call,这个call经过特殊处理,在recv回调函数内调用,用来取得真实长度,这个调用会绕过hook位置,所以不会触发 recv回调,详见源码
' 8:修改了一些已知可能出现的问题
' ---------------------------------------------------------------
' 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有几个参数,需要什么寄存器,对应提供即可。
' 四:源码内列子改了改,可以自己看,需要注意的是模块注释的很详细,使用前最好看一看,尤其是hook回调接口的写法和安装的写法最好按照模块列子中的写法来,除非你能把64hook模块组看懂一遍,对于一些对本模块一知半解的朋友请不要乱改乱发,这个模块我会继续增强的,只是工作原因时间有限,只能一点一点来
' --------------------------------------------------------------------
模块源码回复可见,不喜勿碰



补充内容 (2022-4-29 16:06):
2022/4/29 模块源码2.92 临时更新:
2.91版因改动穿插指令出现的一处bug,此bug可能导致hook某些目标程序时导致recv失败.
本帖无法编辑,需要的朋友进群下载
作者: xjshuaishuai    时间: 2022-4-27 13:06
谢谢分享!
作者: 不苦小和尚    时间: 2022-4-27 13:06
不容易啊,终于更新了,看看抓包如何
作者: 撒加    时间: 2022-4-27 13:07
感谢大佬分享!
作者: 灵海雪缘    时间: 2022-4-27 13:09
看看看看看看扩扩扩扩扩
作者: liuhailong    时间: 2022-4-27 13:12

作者: Shanks    时间: 2022-4-27 13:13

作者: asfor78    时间: 2022-4-27 13:20
谢谢分享!
作者: 深爱者    时间: 2022-4-27 13:22
支持开源!感谢分享,论坛有你更精彩~
作者: zjmowu    时间: 2022-4-27 13:30
支持开源!感谢分享,论坛有你更精彩~

作者: 揰掵佲    时间: 2022-4-27 13:30
            
作者: kagari    时间: 2022-4-27 13:32
支持开源!感谢分享,论坛有你更精彩~
作者: TLDream    时间: 2022-4-27 13:34
支持开源!感谢分享,论坛有你更精彩~
作者: Movax    时间: 2022-4-27 13:36

作者: 1175699306    时间: 2022-4-27 13:38
模块源码回复可见,不喜勿碰

作者: sinewtec    时间: 2022-4-27 13:38
666666666666
作者: gaoqing    时间: 2022-4-27 13:39
谢谢分享
作者: Fate    时间: 2022-4-27 13:47
感谢分享
作者: 已注销400338    时间: 2022-4-27 13:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: leiwawa001    时间: 2022-4-27 13:51
谢谢分享。
作者: xbwdl    时间: 2022-4-27 13:56
谢谢分享。
作者: xbwdl    时间: 2022-4-27 13:58
这个能用来干啥
作者: 梦想ol    时间: 2022-4-27 14:04
支持开源~!感谢分享
作者: 内个打杂滴    时间: 2022-4-27 14:10
不明觉厉。。
作者: 狸楚殇    时间: 2022-4-27 14:11
感谢分享
作者: 菜就多多练    时间: 2022-4-27 14:36
支持开源~!感谢分享
作者: 135544    时间: 2022-4-27 14:39
支持开源~!感谢分享
作者: 猪滴寳貝哝    时间: 2022-4-27 14:41
非常牛逼的源码分享!
作者: dzscuz    时间: 2022-4-27 14:45
看看,学学,支持楼主
作者: 易神    时间: 2022-4-27 14:45
非常牛逼的源码分享!
作者: kuangshen1    时间: 2022-4-27 14:50
支持开源~!感谢分享
作者: 牙子    时间: 2022-4-27 14:56

作者: pjm123    时间: 2022-4-27 15:00
谢谢分享
作者: feiyu2005    时间: 2022-4-27 15:00
感谢分享!收藏学习。
作者: 酷易自绘    时间: 2022-4-27 15:05
RE: wow64_hook_V2.91 2022/4/27 更新,x64_远程hook,x64_硬断hook,x64_调用函数
作者: 冰棍好烫啊    时间: 2022-4-27 15:09
有没有32位的远程vehhook
作者: huikaiminzhou    时间: 2022-4-27 15:12
非常牛逼的源码分享
作者: 初晴雨后    时间: 2022-4-27 15:15
支持下。。。。
作者: 杰西卡技术传媒    时间: 2022-4-27 15:21
支持开源~!感谢分享
作者: shuogege    时间: 2022-4-27 15:26
牛逼666666666666666666666666666666
作者: kentfung    时间: 2022-4-27 15:27
谢谢分享,下载来学习一下
作者: huixin    时间: 2022-4-27 15:34
        支持开源~!感谢分享
作者: ttyyy06    时间: 2022-4-27 15:45
好东西啊好东西
作者: incwin    时间: 2022-4-27 15:48
好东西啊好东西

作者: 小明无敌    时间: 2022-4-27 15:49
32位可以吗        
作者: SD1228    时间: 2022-4-27 15:54
支持开源~!感谢分享
作者: jerichoyin    时间: 2022-4-27 15:55
这个厉害了
作者: ssxpvicp    时间: 2022-4-27 15:56
支持开源~!感谢分享
作者: quary888    时间: 2022-4-27 16:00
谢谢楼主分享!!! 好人一生平安!!!
作者: Sugar沐橙    时间: 2022-4-27 16:00
支持一下
作者: 凡如哥哥    时间: 2022-4-27 16:01
新,x64_远程hook,x64_硬断hook,x64_调用函数 [修改]
作者: chen302511519    时间: 2022-4-27 16:08
111111111111111111
作者: 指尖流淌    时间: 2022-4-27 16:11
支持开源~!感谢分享
作者: dawang2014    时间: 2022-4-27 16:29
支持开源~!感谢分享
作者: MYSTERDEVIL    时间: 2022-4-27 16:45

作者: 2313291647    时间: 2022-4-27 16:46
6666666666666666666666666666666666666666666
作者: 胜屿    时间: 2022-4-27 16:48

作者: wgleiz    时间: 2022-4-27 17:01
感谢分享
作者: 小花匠    时间: 2022-4-27 17:12
        支持开源~!感谢分享
作者: 汉族    时间: 2022-4-27 17:22
赞一个  谢谢分享
作者: 看人看书    时间: 2022-4-27 17:29
大佬,32位,有截取,发送请求没有,自己写的又不成功,有没有例子能发发
作者: huayinzhe    时间: 2022-4-27 17:57
确实牛蛙
作者: tjxiaowu    时间: 2022-4-27 17:59
        支持开源~!感谢分享
作者: 冰棍好烫啊    时间: 2022-4-27 18:06
冰棍好烫啊 发表于 2022-4-27 15:09
有没有32位的远程vehhook

@树上的鱼儿 请问哪里有32位vehhook的源码吗,我在论坛上找了一圈没找到,都是调用dll的,我本来打算看着你的模块里的64位改的,居然已经有源码那我就没必要闭门造车了
作者: 中一文    时间: 2022-4-27 18:22
        感谢分享,很给力!~
作者: 划落的天空    时间: 2022-4-27 18:26
看下这个源码
作者: jelly315    时间: 2022-4-27 18:32
支持开源~!感谢分享
作者: 想学易语言    时间: 2022-4-27 19:34
不懂,如何用呢。
作者: bianyuan456    时间: 2022-4-27 19:45
感谢分享
作者: 网络注册络员    时间: 2022-4-27 19:48
        感谢分享
作者: melekh    时间: 2022-4-27 19:58

        感谢分享
作者: 深圳梦    时间: 2022-4-27 20:08
谢谢分享
作者: ゞωǒ天堂牧心    时间: 2022-4-27 20:11
hook组织短跳代码
作者: 灵猫作者    时间: 2022-4-27 20:12
谢谢分享
作者: a377179415    时间: 2022-4-27 20:16
鱼哥又更新好东西
作者: shituo    时间: 2022-4-27 20:33
wow64_hook 源码历史更新 ' --------------------------------------------------------------- ' ' 2022/4/26 模块源码2.91 更新: ' 1: 修复 hook组织短跳代码() 负跳计算BUG ' 2: 修正 易程序与目标程序之间因权限原因引起的hook回调失败的问题 ' 3: 新增 远程hook64指令_前置指令() 命令 本接口仅供高级用户使用 作用是进入我方穿插指令前 事先执行 用户提供的汇编指令,触发时寄存器环境=hook触发时环境,[前置指令]运行结果影响[穿插指令],如果你希望还能继续执行[穿插指令]请不要在[前置指令]尾部使用ret,参数三 默认={}=清除[前置指令] 用户提供的前置汇编指令字节集 *注意:对于汇编能力一般的用户慎用 除非您能清楚的知晓您加入的[前置指令]在您的掌控范围...且对于[穿插指令]的影响 ' 4: 增加并公开了更多个 命令 具体忘记记载了 ' 5:VehDrx_hook64() 功能组命令增加绑定线程安装 参数 ' 6: 此版本往后 使用模块命令前  必须先调用模块命令 help_初始化模块() 以便用户自行决定何时初始化模块  以应对一些冲突环境问题 ' 7: 对封包实列 做了适当微调  包含但不限以下 ' 对数据报类封包情况 需要处理错误码的情况 详见   recv回调接口内代码 ' 对 远程hook64指令_前置指令() 命令的应用 做了 send recv 只回调指定套接字的实列写法 ' --------------------------------------------------------------- ' 2021/10/10  模块源码2.82 更新: ' 1:修改 X64_远程调用函数() 远线程调用指定进程中某个函数入口,成功=返回函数执行后的RAX值,其他寄存器值通过参数三返回.失败返回-1 超时返回-2(如果超时 寄存器值将不是有效返回) ' ---增加 绑定线程 参数,可空.默认=0=创建新的远线程执行,-1=绑定进程主模块线程(初始EXE模块的线程),-2=绑定主线程(进程创建的第一个线程),其他负值(-窗口句柄)=绑定窗口线程,其他大于0值=自定义线程ID(负数功能建议代码外部构成提供线程ID 其他线程效果以测试为准 如果线程正在沉睡 可执行代码并不会立即执行),可用于这方面防护的突破 ' ---增加 超时间隔 参数,可空.毫秒计,默认=8000毫秒,提供小于等于零则强制性一直等待返回 否则按照给定的毫秒时间等待返回,如果超时 子程序返回 -2, *注意内部并不处理事件 自身主线程调用时结合实际情况 ' 2:删除 call_OpenThread() call_ZwClose() call_ZwGetContextThread() call_ZwSetContextThread() x64_取线程上下文结构体() x64_置线程上下文结构体() 这些都不需要了 ' 3:修复 X64_取线程上下文() X64_置线程上下文() 在wow64环境下调用偶尔成功偶尔失败的问题 替代了(2:)中删除的子程序 ' 4:新增 X64_进程注入dll() 把x64dll注入到x64进程中去,支持绑定线程注入,成功返回模块基址  失败返回-1  超时并不代表注入失败 ' 5:新增 X64_进程卸载dll() 卸载通过 X64_注入dll() 加载的dll,支持绑定线程卸载 ' 6:新增 x64_内存注入dll() 支持以字节集的方式将dll内存注入到目标进程 支持绑定线程注入 使之无影无踪 成功返回模块基址  失败返回-1 ' ---该功能 参考引用网络开源的 X64_ShellCode 跳板指令 结合我方源码实现 ' ---注入成功返回的模块基址 亦可用我方模块命令枚举出导出函数 ' ---其他方式难以再次获得内存注入的模块基址 如需另做它用 务必在注入时保存 ' 7:新增 x64_内存释放dll () 释放 通过 x64_内存注入dll() 注入的内存dll *注意 如果此时dll有线程代码在执行 可能导致目标进程崩溃 ' 8:新增 X64_构造保护寄存器指令集 () 返回将15个通用寄存器和1个标志寄存器压入栈中临时保护的字节集汇编指令 与 X64_构造恢复寄存器指令集() 配对使用 ' 9:新增 X64_构造恢复寄存器指令集() 返回将15个通用寄存器和1个标志寄存器从栈中弹出并恢复到各寄存器的字节集汇编指令  与 X64_构造保护寄存器指令集() 配对使用 ' 10:新增 X64_构造rip跳转指令集()构造一个 jmp[rip] 的长跳转指令集 jmp qword ptr ds[rip] 占6字节 紧随其后需要8字节跳转地址 共返回14字节 ' 11:新增 X64_取进程主模块()根据进程句柄 取进程主模块信息 成功由参数二返回模块信息 ' 12:新增 X64_取进程主线程ID()成功=返回 进程第一个创建的线程ID 失败=0 *注意:(它不绝对等于EXE主模块线程) ' 13:新增 X64_取进程主模块线程ID()成功=返回执行进程EXE主模块的线程ID 失败=0 *注意:进程主模块线程ID(不绝对等于)进程主线程ID ' 14:新增 dll定义 取窗口线程ID_ () user32.dll-->GetWindowThreadProcessId 返回=线程ID,参数二 能返回进程ID ' 15:新增 X64_取进程名称 () 进程句柄取进程名,成功返回进程名,失败=“” ' 16:新增 X64_构造保护XMM寄存器指令集() 返回 16个XMM寄存器压入到栈中临时保护的字节集指令 指令执行后rsp-0x100 ' 17:新增 X64_构造恢复XMM寄存器指令集() 返回 从栈中取出临时保存的XMM寄存器值到XMM寄存器中 指令执行后 rsp+0x100 ' --------------------------------------------------------------- ' 2021/10/3  模块源码2.6 更新: ' 1:增加 drx硬件断点hook VehDrx_hook64_安装() 每个进程限4个hook位置 VehDrx_hook64_恢复() VehDrx_hook64_卸载() VehDrx_hook64_暂停() ' r3层 硬件断点hook 在安装时对进程目标所有线程有效 后创建的新线程不会引发断点 除非再次安装 硬断不会改写目标进程执行代码 不会引发crc检测机制 但是会被检测drx机制检测 ' 由于易语言的特殊性 数据之间依然存在通讯 实际应该称为x64远程硬件断点hook 这种方式只建议特殊情况使用 在效率和稳定性上不如 远程hook64指令_安装() ' 2:增加 x64_进程句柄到进程ID()成功返回对应进程的PID,失败返回-1 ' --------------------------------------------------------------- ' 2021/9/30  模块源码2.5 更新: ' 1:修正 内存64_读字节集() 一个写法错误,修正为一次性读取指定长度的字节集 ' 2:增加 本地加载64位dll演示() 的一个参考代码 ' 3:增加 X64_查线程信息() ntdll.dll->ZwQueryInformationThread 实现 ' 4:增加 X64_打开线程() ntdll.dll->ZwOpenThread ' 5:增加 X64_枚举进程() 全面的枚举系统进程信息,返回比较详细的进程信息结构,成功返回当前枚举到的进程个数,失败为0 ' 参数 进程信息, 进程信息64, 数组, 从这个参数返回枚举到进程信息结构体数组 ' 成员 线程数目, 整数型 ' 成员 创建时间, 长整数型 可用 FileTime转为时间格式()转换为北京时间 ' 成员 用户时间, 长整数型 ' 成员 内核时间, 长整数型 ' 成员 进程名, 文本型 ' 成员 基本优先级, 长整数型 ' 成员 进程PID, 长整数型 ' 成员 父进程PID, 长整数型 ' 成员 句柄数目, 整数型 ' 成员 虚拟内存统计 ' 成员 IO操作统计 ' 6:增加 X64_枚举线程() 枚举进程线程信息,返回比较详细的线程信息结构,成功返回指定进程枚举到的线程个数,失败为0 ' 参数 进程PID, 整数型, , 必须是一个目前正在运行的进程PID ' 参数 线程信息, 线程信息64, 数组, 从这个参数返回枚举到线程信息结构体数组 ' 成员 内核时间, 长整数型 ' 成员 用户时间, 长整数型 ' 成员 创建时间, 长整数型 可用 FileTime转为时间格式()转换为北京时间 ' 成员 等待时间, 长整数型 ' 成员 启动地址, 长整数型, 线程在R3层第一条指令地址,一般是RtlUserThreadStart函数线程进程安全入口.如需获得真实线程入口 使用 X64_取线程入口() ' 成员 进程ID, 长整数型 ' 成员 线程ID, 长整数型 ' 成员 线程优先级, 整数型 ' 成员 基本优先级, 整数型 ' 成员 切换计数, 整数型 ' 成员 线程状态, 整数型 ' 成员 等待原因, 整数型 ' 7:增加 X64_取线程TEB() 返回指定线程句柄对应的线程TEB结构所在内存地址 返回结果到参数二 ' 参数 线程句柄, 整数型, , 提供目标线程句柄, -2=易语言执行线程句柄 ' 参数 线程TEB, 长整数型, 参考, 返回TEB构所在内存地址 ' 8:修改 原WoW64模块的 X64_取线程上下文() ntdll.dll->ZwGetContextThread 相当于 GetThreadContext函数 需要获得线程上下文必须先挂起线程 并根据CONTEXT64结构ContextFlags成员获得相应信息 wow64环境下有很大几率调用失败,不建议使用本接口 以供参考或临时使用 ' 9:修改 原WoW64模块的 X64_置线程上下文() ntdll.dll->ZwSetContextThread 相当于 SetThreadContext函数 置上下文成员必须先挂起线程 并根据CONTEXT64结构ContextFlags成员决定重置项 wow64环境下有很大几率调用失败,不建议使用本接口 以供参考或临时使用 ' 10:增加 x64_取线程上下文结构体()  wow64环境下有很大几率调用失败,不建议使用本接口 以供参考或临时使用 ' 11:增加 x64_置线程上下文结构体()  wow64环境下有很大几率调用失败,不建议使用本接口 以供参考或临时使用 ' 12:增加 X64_取线程真实入口() 根据线程句柄返回线程的入口地址,失败返回0 ' 13:增加 X64_线程句柄到进程ID() 成功返回对应进程的PID,失败返回0 ' 14:增加 X64_线程句柄到线程ID() 成功返回对应的线程ID,失败返回0 ' 15:增加 FileTime转为时间格式() 将18位长整数型的File系统文件创建时间 转换成日期时间型 如 132762591809225412 转为  2021年9月16日19时46分 ' 16:另增加了一些参与的变量类型转指针接口;增加或修正一些必要的数据类型;增加一些dll命令 暂停线程__()等 ' 17:开辟一个新程序集 [Veh_hook64]本程序集时间原因未完成开发 预留备用 VEH+硬断 hook ' 内部有一些 预备子程序 如有需要可以参考 ' call_OpenThread() 在目标进程打开指定线程,返回打开后的线程句柄值,这个句柄在我方进程不能使用,权限属于目标进程,我们只是需要获得这个值,已做它用 ' call_ZwClose() 在目标进程中调用 ZwClose 函数关闭目标进程中某个已经打开的对象句柄 ' call_ZwGetContextThread() 根据 线程句柄 找到 线程所属进程 中去调用 ZwGetContextThread 函数取得上下文后 从参数二返回 CONTEXT64结构体 调用本接口请挂起线程 否则该数据将不是即时有效的 本接口能稳定获得上下文 ' call_ZwSetContextThread() 根据 线程句柄 找到 线程所属进程 中去调用 ZwSetContextThread 函数 重写CONTEXT64结构体,本接口重置所有寄存器,确保在同一次挂起线程中配合call_ZwGetContextThread()改写,否则后果自负 本接口能稳定获得上下文 ' call_RtlAddVectoredExceptionHandler() 在目标进程中远线程执行RtlAddVectoredExceptionHandler函数,注册一个向量化异常处理接口,成功返回注册的向量异常处理程序的句柄 ' call_RtlRemoveVectoredExceptionHandler()取消注册向量异常处理程序。如果函数成功,则返回值非零。 ' --------------------------------------------------------------- ' 2021/5/5  模块源码2.3 更新: ' 1: hook通讯模式由消息模式 改为 线程模式,线程模式相比消息模式更自由,不存在堵塞的可能性,安装时没有了窗口句柄参数 ' 2:远程hook64指令_安装()中 hook长度 参数 现在支持最小 5字节hook,且支持了不在模块区域的可执行代码中hook ' 3  回调接口 现在传回4个参数 必须为 可空 参考 分别是 control_寄存器;自定义回调值;目标进程句柄值;触发Hook线程ID,写的时候参考源码实例 ' 4:新增 子程序 x64_申请指定内存() ' 该接口可以在目标进程指定地址处分配内存 如果该地址不可申请会在附近2G偏移内寻找一处申请 失败返回0 成功返回指针 ' 5:修复hook过程中因自身进程意外关闭而导致目标进程卡住或崩溃的问题 ' 6:修复 远程hook64指令_全部卸载()在调试模式调用时出现的系统报告异常问题 ' 7:实例中 对 call_send()特殊处理了一下,这个调用可以根据设置是否绕过hook位置,如果参数四为真不会触发send回调 ' 8:实例中 简单增加了几个子程序,封包寻找替换规则() call_API() call_WSASend()这几个给予参考,未用于实例应用,WSASend没有找到目标进程所以未经测试 ' 9:提示:X64_取进程函数入口()这个调用返回是比较慢的,因为要在所有的DLL中寻找出对应的DLL然后再去找对应的函数,所以此接口在循环中慎用。正确的方式是:因为系统API接口 在每个进程的地址是一样的,所以只需取得一次保存地址给后续调用使用即可 ' 10:实例中 多进程hook由原先的菜单方式 改为 高级表格 选择框快速操作 ' --------------------------------------------------------------- ' 2021/4/16  模块源码1.8.7 更新: ' 1:重新架构了穿插汇编指令,优化了一些代码和流程 ' 2:在 远程hook64指令_安装()时新增可回调的3个自定义参数值,这些值在回调接口的[寄存器64.自定义值1;2;3]里可获取到该值 ' 3:修复 寻找无效8字节指令地址()中一个重要BUG,此BUG极大可能导致之前版本在 远程hook64指令_安装()时即导致目标程序崩溃的现象 ' 建议使用者全部更新到此版本............ ' --------------------------------------------------------------- ' 2021/4/15  模块源码1.8.6 更新: ' 1:新增3组函数:X64_取模块代码区起始地址(),X64_取模块入口地址(),X64_取模块代码执行段大小() ' 2:自定义类型:模块信息64,的成员构成新增改动为 以下,在枚举模块中亦可直接取得 ' 成员 模块基址, 长整数型, , , 模块映像的内存地址 也称为句柄 ' 成员 模块长度, 整数型, , , 整个模块文件长度 ' 成员 模块入口, 长整数型, , , 模块入口函数地址 如 Mian/DllMain ' 成员 模块代码入口, 长整数型, , , 模块代码执行区起始地址 ' 成员 模块代码长度, 整数型, , , 模块代码执行区的长度 ' 成员 模块名称, 文本型, , , 文件名称 ' 成员 模块路径, 文本型, , , 完整的路径地址 ' 3:新消息接口()远程返回_调用回调子程序()优化了代码严谨性,减少hook目标崩溃的可能性 ' 4:寻找无效8字节指令地址()由之前的全模块查找 改动为 在模块代码执行区查找 ' 5:改写模块实列为 一对多的模式 ' 6:模块实列操作控件的方式由变量改为堆内存,避免引起多线程自身崩溃 ' 7:模块实列 对 recv,recvfrom两个函数的hook方式由原先 在回调内 暂停recv-->recv_call-->恢复recv,的方式改为经过特殊改造的 recv_call,这个call经过特殊处理,在recv回调函数内调用,用来取得真实长度,这个调用会绕过hook位置,所以不会触发 recv回调,详见源码 ' 8:修改了一些已知可能出现的问题 ' --------------------------------------------------------------- ' 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有几个参数,需要什么寄存器,对应提供即可。 ' 四:源码内列子改了改,可以自己看,需要注意的是模块注释的很详细,使用前最好看一看,尤其是hook回调接口的写法和安装的写法最好按照模块列子中的写法来,除非你能把64hook模块组看懂一遍,对于一些对本模块一知半解的朋友请不要乱改乱发,这个模块我会继续增强的,只是工作原因时间有限,只能一点一点来 ' -------------------------------------------------------------------- 模块源码回复可见,不喜勿碰
作者: 谈谈的味道    时间: 2022-4-27 20:37
模块源码回复可见,不喜勿碰

作者: 740949011    时间: 2022-4-27 20:46
我来看看,谢谢分享!!!!
作者: muye84    时间: 2022-4-27 21:08
        支持开源~!感谢分享
作者: 283688410    时间: 2022-4-27 21:16
谢谢楼主分享
作者: qq444255022    时间: 2022-4-27 21:50
谢谢楼主分享
作者: good123    时间: 2022-4-27 22:09
感谢楼主分享
作者: cwgwww    时间: 2022-4-27 22:17
谢谢楼主分享!!
作者: 84327633    时间: 2022-4-27 22:21
谢谢楼主分享!!
作者: 忧伤的木木时代    时间: 2022-4-27 22:33
支持开源,感谢分享
作者: yiyuyan003    时间: 2022-4-27 22:43

作者: 2477386211    时间: 2022-4-27 23:24
好东西666
作者: 794229345    时间: 2022-4-27 23:34
看下隐藏内容~~
作者: huben    时间: 2022-4-27 23:48
        支持开源~!感谢分享
作者: 一世深情一世美    时间: 2022-4-28 00:00
        支持开源~!感谢分享
作者: snufgpl    时间: 2022-4-28 00:01
小小心意,意思一下
作者: fyh505099    时间: 2022-4-28 00:13
感谢大佬分享 ,支持支持!
作者: 281844769    时间: 2022-4-28 00:30
必须支持
作者: qqrazc    时间: 2022-4-28 01:00
小小心意,意思一下
作者: 8wy721719    时间: 2022-4-28 01:09
支持开源~!感谢分享
作者: llxx00xxll    时间: 2022-4-28 01:09
下载看看~
作者: 至尊嘎嘎    时间: 2022-4-28 01:12
新技能已get√
作者: fiter    时间: 2022-4-28 01:37
66666666666666666666
作者: 风云思星    时间: 2022-4-28 01:41
楼主辛苦了,谢谢楼主,感谢楼主分享,楼主好人一生平安!!!
作者: 一尘不染    时间: 2022-4-28 01:55
楼主辛苦了,谢谢楼主,感谢楼主分享,楼主好人一生平安!!!




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4