查看: 573|回复: 0

[易语言源码] wow64_hook_V2.94 模块源码更新:2023/2/19,具体看文字

[复制链接]
  • TA的每日心情
    郁闷
    昨天 20:48
  • 签到天数: 454 天

    [LV.9]以坛为家II

    1182

    主题

    541

    回帖

    2万

    积分

    管理员|UID:1

    金钱:8717

    贡献:5000

    威望:5020

    发表于 2023-2-21 09:38:38 | 显示全部楼层 |阅读模式
    235700bf9jhm8bzfi1zfci.png


    ' wow64_hook 源码历史更新
    ' ---------------------------------------------------------------
    ' ' 2023/2/19 模块源码2.94 更新:主要更新了枚举内核对象句柄 重写/新增了远程调用相关接口 使之支持xmm寄存器且绑定线程不在采用ntdll.dll->ZwGetContextThread转而使用ntdll.dll-->RtlRemoteCall
    ' 1:新增 X64_枚举内核对象(指定进程句柄,对象句柄信息[],过滤无名对象),失败=0 成功=返回参数二实际获得的对象句柄信息数. x86/x64通用并得到比较详细且准确的内核对象句柄信息 注意:对"套接字/命名管道/匿名管道"的对象作为无名对象处理
    ' ' ' ' ' ' ' ' ' ' ' ' ' 参数 指定进程句柄, 整数型, , 指定一个已打开的某进程句柄值
    ' ' ' ' ' ' ' ' ' ' ' ' ' 参数 对象句柄信息, 内核对象句柄信息, 参考 数组, 枚举到的内核对象信息从这个参数返回
    ' ' ' ' ' ' ' ' ' ' ' ' ' 参数 过滤无名对象, 逻辑型, 可空, 默认=真=只返回有名字的对象句柄信息,假=含无名句柄一起返回(此时涵盖了该进程中当时所有的内核对象句柄)
    ' 2:新增 x64_取内核对象属性() 原 ntdll.dll->ZwQueryObject 函数 注意:该接口参数二为1时 在碰到 "同步管道"对象时可能造成死锁现象,需做特殊处理
    ' 3:新增 x64_取内核对象名称(进程句柄,对象句柄,对象名称),成功=真 失败=假 从参数三返回对象句柄名称 注意:由于ZwQueryObject在碰到 "同步管道"对象时可能造成死锁现象  故该接口对"套接字/命名管道/匿名管道"的对象参数三返回空文本
    ' 4:新增 x64_取内核对象类型名(进程句柄,对象句柄,类型名称),成功=真 失败=假 从参数三返回对象句柄类型名称
    ' 5:新增 x64_关闭远程内核对象(进程句柄,对象句柄),关闭其他进程中的指定内核对象句柄
    ' 6:新增 x64_远程劫持线程调用机器码(进程句柄,线程句柄,机器码字节集,超时间隔),劫持其他进程中某条线程强行转移调用用户指定的字节集机器码指令,成功=返回机器码字节集执行后的RAX值,失败返回-1 超时返回-2
    ' ' ' ' ' ' ' ' ' ' ' ' ' 参数 进程句柄, 整数型, , 欲劫持执行的进程句柄,建议打开进程时给予全权2035711 注意:内部不关闭此句柄,由用户自己控制
    ' ' ' ' ' ' ' ' ' ' ' ' ' 参数 线程句柄, 整数型, , 注意:是线程句柄句柄句柄 重要的事情说三遍 必须是参数一进程中有效的劫持线程句柄,假如线程在挂起状态 调用后会恢复此线程运行.注意:内部不关闭此句柄,由用户自己控制
    ' ' ' ' ' ' ' ' ' ' ' ' ' 参数 机器码字节集, 字节集, , 提供欲需要执行的字节集机器码指令,注意16字节对齐原则,尾部必须含有 ret 指令,总大小不得超过3072字节
    ' ' ' ' ' ' ' ' ' ' ' ' ' 参数 超时间隔, 整数型, 可空, 毫秒计,默认=8000毫秒,提供小于等于零则强制性一直等待返回 否则按照给定的毫秒时间等待返回,如果超时 子程序返回 -2, *注意内部并不处理事件 自身主线程调用时结合实际情况
    ' 7:新增 X64_远程线程调用机器码(进程句柄,机器码字节集,超时间隔) 在目标进程中创建一条新线程来调用用户指定的字节集机器码指令,成功=返回机器码字节集执行后的RAX值..失败返回-1 超时返回-2 *注意内部并不处理事件 自身主线程调用时结合实际情况
    ' ' ' ' ' ' ' ' ' ' ' ' '参数 进程句柄, 整数型, , 进程句柄,建议打开进程时给予全权2035711 注意:内部不关闭此句柄,由用户自己控制
    ' ' ' ' ' ' ' ' ' ' ' ' '参数 机器码字节集, 字节集, , 提供欲需要执行的字节集机器码指令,注意16字节对齐原则,尾部必须含有 ret 指令,总大小不得超过4048字节
    ' ' ' ' ' ' ' ' ' ' ' ' '参数 超时间隔, 整数型, 可空, 毫秒计,默认=8000毫秒,提供小于等于零则强制性一直等待返回 否则按照给定的毫秒时间等待返回,如果超时 子程序返回 -2
    ' 8:重写 X64_远程调用函数(进程句柄,函数入口,寄存器值,其余参数,绑定线程,超时间隔) 远程调用指定进程中某个函数入口,支持xmm寄存器,成功=返回函数执行后的RAX值,失败返回-1 超时返回-2,本接口不需要你构造汇编,只需传入需要的参数即可,适合懒人选手及汇编水平一般性用户 *注意内部  并不处理事件 自身主线程调用时结合实际情况
    ' ' ' ' ' ' ' ' ' ' ' ' '参数 进程句柄, 整数型, , 欲调用的函数所在进程句柄,注意此句柄至少有创建线程权限,建议打开进程时给予全权2035711 注意:内部不关闭此句柄,由用户自己控制
    ' ' ' ' ' ' ' ' ' ' ' ' '参数 函数入口, 长整数型, , API函数入口或汇编函数的内存地址.
    ' ' ' ' ' ' ' ' ' ' ' ' '参数 寄存器值, 寄存器64, 参考 可空, 需要用到寄存器的值,64调用约定前4个参数不是浮点在寄存器rcx,rdx,r8,r9,浮点的在xmm0~xmm3 浮点这样转换,如果是 双精度小数型 '取字节集数据(到字节集(到数值(3.1514)),#长整数型) 如果是 小数型 '取字节集数据(到字节集(到小数(3.15)),#长整数型).注意 不支持设置RSP,RIP,RAX 这些寄存器
    ' ' ' ' ' ' ' ' ' ' ' ' '参数 其余参数, 长整数型, 参考 可空 数组, 参数大于4个时使用数组形态继续添加参数, 参数5=数组[1],参数6=数组[2].....,参数15=数组[11].最多支持11个成员数组,多余的自动忽略,加上寄存器4个参数,共支持15个参数,同样支持浮点 转换方式同上
    ' ' ' ' ' ' ' ' ' ' ' ' '参数 绑定线程, 整数型, 可空, 默认=0=创建新的远线程执行,-1=绑定进程主模块线程(初始EXE模块的线程),-2=绑定主线程(进程创建的第一个线程),其他负值(-窗口句柄)=绑定窗口线程,其他大于0值=自定义线程ID(注意是 线程ID线程ID线程ID 重要的事情说三遍 绑定线程效果以测试为准 如果线程正在沉睡 可执行代码并不会直接执行)
    ' ' ' ' ' ' ' ' ' ' ' ' '参数 超时间隔, 整数型, 可空, 毫秒计,默认=8000毫秒,提供小于等于零则强制性一直等待返回 否则按照给定的毫秒时间等待返回,如果超时 子程序返回 -2

    ' ---------------------------------------------------------------
    ' ' 2023/1/16 模块源码2.93 更新:
    ' 1:新增 X64_取进程名称() 参数二 返回进程全路径参数. 修正 自进程伪句柄-1不能使用的问题
    ' 2:修正 X64_查进程信息 ()  自进程伪句柄-1不能使用的问题 和 与其相关的几个子程序同修 X64_取进程PEB()  x64_进程句柄到进程ID()
    ' 3:新增 X64_取模块函数入口 (进程句柄,模块基址,函数名) 返回指定进程指定模块指定函数的入口指针
    ' 4:优化 X64_取进程函数入口() 由枚举形式转为递归返回,减少无用功,优化效率,对于取模块靠前函数靠前的函数入口时效率提升明显
    ' 5:新增 X64_取进程模块句柄 () 成功返回指定进程指定模块名的模块句柄  否则返回0
    ' 6:修正 X64_远程调用函数() 在绑定线程的情况可能产生的线程不恢复问题
    ' 7:新增 X64_远程调用机器码 (进程句柄,字节集机器码,绑定线程,超时间隔) 远程调用用户指定的字节集机器码指令,成功=返回函数执行后的RAX值,失败返回-1 超时返回-2(如果超时 寄存器值将不是有效返回)
    ' 8:修正 VEHDRX功能内部添加变量锁 增强自身稳定性
    ' 9:修正 VEHDRX功能组/X64_远程调用函数/X64_取线程上下文/X64_置线程上下文 可能导致的堆溢出提示内存申请失败的问题
    ' ---------------------------------------------------------------
    ' ' 2022/4/29 模块源码2.92 临时更新:
    ' 1:修正2.91版因改动穿插指令出现的一处bug,此bug可能导致hook某些目标程序时导致recv失败.
    ' ---------------------------------------------------------------
    ' ' 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有几个参数,需要什么寄存器,对应提供即可。
    ' 四:有朋友说原模块x64英文看了烦,那好吧就给改成了中文标识,弄得我自己也不习惯
    ' 五:源码内列子改了改,可以自己看,需要注意的是模块注释的很详细,使用前最好看一看,尤其是hook回调接口的写法和安装的写法最好按照模块列子中的写法来,除非你能把64hook模块组看懂一遍,对于一些对本模块一知半解的朋友请不要乱改乱发,这个模块我会继续增强的,只是工作原因时间有限,只能一点一点来
    ' --------------------------------------------------------------------

    游客,如果您要查看本帖隐藏内容请回复


    温馨提示:
    1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
    2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
    3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
    4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
    5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
    ----------------------------------------------------------------------------------------------------------------------------
    文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
    版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
    回复

    使用道具 举报

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

    本版积分规则

    关于我们

    关于我们

    免责声明

    服务条款

    服务支持

    常见问题

    论坛公告

    投诉/建议联系

    jinqike1026@163.com

    论坛仅限于编程技术相关的交流探讨与分享,严禁在此发布违规违法帖子,否则后果自负!

    关注微信公众号

    51LA统计|Archiver|手机版|小黑屋|金小颖论坛 ( 浙ICP备2022006091号 )|网站地图

    GMT+8, 2024-4-27 09:30 , Processed in 0.213559 second(s), 49 queries .

    Powered by Discuz! X3.5

    Copyright © 2001-2024 Tencent Cloud.