揰掵佲 发表于 2023-2-21 08:35:12

wow64_hook_2.94模块源码

.版本 2

' 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=数组,参数6=数组.....,参数15=数组.最多支持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失败.


**** Hidden Message *****

pvsazspo 发表于 2023-2-27 15:07:48


支持开源~!感谢分享
页: [1]
查看完整版本: wow64_hook_2.94模块源码