[发明专利]一种程序处理方法及相关设备有效
申请号: | 201810720086.3 | 申请日: | 2018-07-03 |
公开(公告)号: | CN110673899B | 公开(公告)日: | 2022-06-21 |
发明(设计)人: | 周志刚;张文明;陈少杰 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F9/448 | 分类号: | G06F9/448 |
代理公司: | 北京众达德权知识产权代理有限公司 11570 | 代理人: | 刘杰 |
地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 程序 处理 方法 相关 设备 | ||
1.一种程序处理方法,其特征在于,包括:
编写无作用汇编指令,所述无作用汇编指令为不影响程序的执行功能的指令;
根据所述无作用汇编指令编写跳转代码和跳转桩代码,所述跳转代码包括第一跳转代码和第二跳转代码,所述第一跳转代码用于从所述程序中待挂钩hook原始代码跳转到所述跳转桩代码,所述第二跳转代码用于从所述跳转桩代码跳转到所述待hook原始代码,所述跳转桩代码包括需插入的inlinehook逻辑代码,所述跳转桩代码用于保存所述程序中待hook原始代码的执行环境;
备份所述待hook原始代码,将所述待hook原始代码修改为所述第一跳转代码;
当执行到所述待hook原始代码时,根据所述第一跳转代码从所述待hook原始代码跳转到所述跳转桩代码,并暂停所述程序中所有的线程;
执行完成所述跳转桩代码后,根据所述第二跳转代码从所述跳转桩代码跳转到备份的所述待hook原始代码;
恢复所述程序中所有的线程,以继续执行所述待hook原始代码。
2.根据权利要求1所述的方法,其特征在于,所述根据所述无作用汇编指令编写跳转代码和跳转桩代码包括:
根据所述跳转桩的内存地址和所述待hook原始代码的内存地址计算跳转的偏移地址;
根据所述跳转的偏移地址和所述无作用汇编指令编写所述跳转代码;
根据所述inlinehook逻辑代码和所述inlinehook逻辑代码的内存地址生成初始跳转桩代码;
调用系统的API函数byTrpJmpPadCode存储所述初始跳转桩代码;
将所述无作用汇编指令插入所述初始跳转桩代码,以得到所述跳转桩代码。
3.根据权利要求1所述的方法,其特征在于,所述将所述待hook原始代码修改为所述第一跳转代码包括:
调用系统API函数VirtualProtectEx将所述待hook原始代码的内存属性从只读可执行修改为可写可执行;
通过系统API函数WriteProcessMemory将所述待hook原始代码修改为所述第一跳转代码。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述暂停所述程序中所有的线程包括:
调用系统API函数CreatToolhelp32Snapshot获取所述程序的进程线程快照信息,所述进程线程快照信息包括进程快照句柄;
根据所述进程快照句柄获取所述进程线程快照中的第一个线程;
通过do while循环从所述第一个线程遍历完所述程序中所有的进程,以暂停所述所有的进程。
5.一种程序处理设备,其特征在于,包括:
编写单元,用于编写无作用汇编指令,所述无作用汇编指令为不影响程序的执行功能的指令;
所述编写单元还用于根据所述无作用汇编指令编写跳转代码和跳转桩代码,所述跳转代码包括第一跳转代码和第二跳转代码,所述第一跳转代码用于从所述程序中待hook原始代码跳转到所述跳转桩代码,所述第二跳转代码用于从所述跳转桩代码跳转到所述待hook原始代码,所述跳转桩代码包括需插入的inlinehook逻辑代码,所述跳转桩代码用于保存所述程序中待hook原始代码的执行环境;
修改单元,用于备份所述待hook原始代码,将所述待hook原始代码修改为所述第一跳转代码;
暂停单元,当执行到所述待hook原始代码时,用于根据所述第一跳转代码从所述待hook原始代码跳转到所述跳转桩代码,并暂停所述程序中所有的线程;
跳转单元,还用于执行完成所述跳转桩代码后,根据所述第二跳转代码从所述跳转桩代码跳转到备份的所述待hook原始代码;
恢复单元,用于恢复所述程序中所有的线程,以继续执行所述待hook原始代码。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810720086.3/1.html,转载请声明来源钻瓜专利网。