CN111913742A - 一种程序处理方法及相关设备 - Google Patents
一种程序处理方法及相关设备 Download PDFInfo
- Publication number
- CN111913742A CN111913742A CN201810717126.9A CN201810717126A CN111913742A CN 111913742 A CN111913742 A CN 111913742A CN 201810717126 A CN201810717126 A CN 201810717126A CN 111913742 A CN111913742 A CN 111913742A
- Authority
- CN
- China
- Prior art keywords
- code
- hook
- original
- original code
- jump
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 25
- 230000006870 function Effects 0.000 claims description 79
- 230000009191 jumping Effects 0.000 claims description 24
- 238000004590 computer program Methods 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 11
- 230000004048 modification Effects 0.000 claims description 9
- 238000012986 modification Methods 0.000 claims description 9
- 238000000605 extraction Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 6
- 230000001788 irregular Effects 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000001343 mnemonic effect Effects 0.000 description 2
- 101150026173 ARG2 gene Proteins 0.000 description 1
- 101100005166 Hypocrea virens cpa1 gene Proteins 0.000 description 1
- 101100379633 Xenopus laevis arg2-a gene Proteins 0.000 description 1
- 101100379634 Xenopus laevis arg2-b gene Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 101150088826 arg1 gene Proteins 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007935 neutral effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例公开了一种程序处理方法及相关设备,用与在对待hook原始代码执行inlinehook操作时能兼容各操作系统。本发明实施例方法包括:确定待hook原始代码的内存地址;提取所述待hook原始代码的特征码,所述特征码用于在各操作系统中定位所述待hook原始代码;在目标操作系统中,从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码,所述目标操作系统包含于所述各操作系统;当查找到所述特征码并匹配成功时,确定目标偏移量,所述目标偏移量为从所述起始位置到查找到所述特征码的位置的偏移量;根据所述目标偏移量确定所述待hook原始代码在所述目标操作系统中的精确内存地址;根据精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作。
Description
技术领域
本发明涉及控制技术领域,尤其涉及一种程序处理方法及相关设备。
背景技术
目前,对于基于Windows平台开发的一些软件来说,其功能也越来越丰富。同时,基于Windows平台的强大支撑,可以开发一些特殊功能的软件,如监控某个程序的所有读写文件,监控键盘输入,监控网络流量等等。然而对于Windows平台来说,很多功能都需要通过hook的方式来实现,例如监控一个程序打开的所有文件,则可以通过hook该打开文件的应用程序编程接口(application programming interface,API)函数,从而可以得到该打开文件的所有文件名。目前来说,hook的方式有很多种,而通过inlinehook则可以实现的功能更多,所谓inlinehook,指通过修改代码,来增加jump指令修改执行流程跳转到hook功能逻辑中。
然而,对于inlinehook来说,首先需要知道其需要hook模块的内存地址,而内存地址通常都需要通过查看该hook模块,通过具体函数找到。但是对于一个通用兼容更多操作系统版本的inlinehook来说,不同的系统版本可能其函数所在的模块的偏移是不一样的,从而对于不同的系统需要查看不同的函数地址,以及偏移。这样给inlinehook的通用性和兼容性都带来了麻烦,由于操作系统版本众多,如windows xp,windows 7,windows8,windows 10等等其他还有很多小版本,一旦某个系统没有兼容到,则可能导致程序在该系统上崩溃。那么如何编写一个通用的智能的兼容更多操作系统的inlinehook来说,则是非常重要的。
发明内容
本发明实施例提供了一种程序处理方法及相关设备,用于在对待hook原始代码执行inlinehook操作时能兼容各操作系统。
本发明实施例的第一方面提供了一种程序处理的方法,包括:确定待hook原始代码的内存地址;提取所述待hook原始代码的特征码,所述特征码用于在各操作系统中定位所述待hook原始代码;在目标操作系统中,从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码,所述目标操作系统包含于所述各操作系统;当查找到所述特征码并匹配成功时,确定目标偏移量,所述目标偏移量为从所述起始位置到查找到所述特征码的位置的偏移量;根据所述目标偏移量确定所述待hook原始代码在所述目标操作系统中的精确内存地址;根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作。
在一种可能的实施例中,所述确定当前程序是否被调试包括:所述确定待hook原始代码的内存地址包括:调用系统API函数GetModuleHandle获取所述待hook原始代码所在系统模块的内存地址;根据所述待hook原始代码所在系统模块的内存地址,调用系统API函数GetProcAddress获取所述待hook原始代码的内存地址。
在一种可能的实施例中,所述根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作包括:分配跳转桩代码的内存,所述跳转桩代码包括需插入的inlinehook逻辑代码,所述跳转桩代码用于保存所述待hook原始代码的执行环境;根据所述精确内存地址,调用系统API函数VirtualProtectEx将所述待hook原始代码的内存属性从只读可执行修改为可写可执行;修改所述待hook原始代码为第一跳转代码,所述第一跳转代码用于从所述待hook原始代码跳转到所述跳转桩代码;执行完成所述跳转桩代码后,根据第二跳转代码从所述跳转桩代码跳转到所述待hook原始代码,以继续执行所述待hook原始代码。
在一种可能的实施例中,所述从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码包括:调用系统API函数ReadProcessMemory读取所述待hook原始代码所在内存,以得到所述待hook原始代码;通过if循环判断所述待hook原始代码所在内存中是否存在机器码与所述特征码是否一致;若存在,则确定查找到所述特征码并匹配成功;若不存在,则确定匹配所述特征码失败。
本发明实施例的第二方面提供了一种程序处理设备,包括:确定单元,用于确定待hook原始代码的内存地址;提取单元,用于提取所述待hook原始代码的特征码,所述特征码用于在各操作系统中定位所述待hook原始代码;查找单元,用于在目标操作系统中,从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码,所述目标操作系统包含于所述各操作系统;所述确定单元,还用于当查找到所述特征码并匹配成功时,确定目标偏移量,所述目标偏移量为从所述起始位置到查找到所述特征码的位置的偏移量;根据所述目标偏移量确定所述待hook原始代码在所述目标操作系统中的精确内存地址;处理单元,用于根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作。
在一种可能的实施例中,所述确定单元具体用于:调用系统API函数GetModuleHandle获取所述待hook原始代码所在系统模块的内存地址;根据所述待hook原始代码所在系统模块的内存地址,调用系统API函数GetProcAddress获取所述待hook原始代码的内存地址。
在一种可能的实施例中,所述处理单元包括:分配模块,用于分配跳转桩代码的内存,所述跳转桩代码包括需插入的inlinehook逻辑代码,所述跳转桩代码用于保存所述待hook原始代码的执行环境;修改模块,用于根据所述精确内存地址,调用系统API函数VirtualProtectEx将所述待hook原始代码的内存属性从只读可执行修改为可写可执行;修改所述待hook原始代码为第一跳转代码,所述第一跳转代码用于从所述待hook原始代码跳转到所述跳转桩代码;跳转模块,用于执行完成所述跳转桩代码后,根据第二跳转代码从所述跳转桩代码跳转到所述待hook原始代码,以继续执行所述待hook原始代码。
在一种可能的实施例中,所述查找单元包括:获取模块,用于调用系统API函数ReadProcessMemory读取所述待hook原始代码所在内存,以得到所述待hook原始代码;判断模块,用于通过if循环判断所述待hook原始代码所在内存中是否存在机器码与所述特征码是否一致;确定模块,用于若存在,则确定查找到所述特征码并匹配成功;若不存在,则确定匹配所述特征码失败。
本发明第三方面提供了一种电子设备,包括存储器、处理器,其特征在于,所述处理器用于执行存储器中存储的计算机管理类程序时实现如上述任意一项所述的程序处理方法的步骤。
本发明第四方面提供了一种计算机可读存储介质,其上存储有计算机管理类程序,其特征在于:所述计算机管理类程序被处理器执行时实现如上述任意一项所述的程序处理方法的步骤。
从以上技术方案可以看出,本发明实施例具有以下优点:确定待hook原始代码的内存地址;提取所述待hook原始代码的特征码,所述特征码用于在各操作系统中定位所述待hook原始代码;在目标操作系统中,从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码,所述目标操作系统包含于所述各操作系统;当查找到所述特征码并匹配成功时,确定目标偏移量,所述目标偏移量为从所述起始位置到查找到所述特征码的位置的偏移量;根据所述目标偏移量确定所述待hook原始代码在所述目标操作系统中的精确内存地址;根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作。本发明实施例中,动态的查找出在不同的操作系统上待hook原始代码的偏移,使得对待hook原始代码执行inlinehook操作时能兼容各操作系统。
附图说明
图1为本发明实施例提供的一种可能的程序处理方法的流程图;
图2为本发明实施例提供的一种可能的程序处理设备的结构示意图;
图3为本发明实施例提供的一种可能的程序处理设备的硬件结构示意图;
图4为本发明实施例提供的另一可能的程序处理设备的硬件结构示意图。
具体实施方式
本发明实施例提供了一种程序处理方法及相关设备,用于在对待hook原始代码执行inlinehook操作时能兼容各操作系统。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参阅图1,为本发明实施例提供的一种可能的程序处理方法的流程图,具体包括:
101、确定待hook原始代码的内存地址;
本发明实施例中,若需要hook系统函数,则首先需要获取系统函数在内存中的地址。为便于描述,将需要hook的系统函数称为待hook原始代码,或者称为其他名字,具体此处不做限定。例如需要hook系统模块Kernel32.dll中的CreateFile函数,并且需要获取到其中的传入的参数等其他数据。那么则需要选择在此函数内部进行inlinehook,从而比较方便的对所有的CreateFile函数的调用进行监控,并且能知道打开了那些文件。因此,本发明实施例中,需要获取CreateFile在内存中的内存地址。具体则可以通过系统提供的API函数GetModuleHandle来获取。函数原型如下:
HMODULE GetModuleHandle(PCTSTR pszModule);
其中输入参数为模块的名称,本发明实施例中可以是“Kernel32.dll”;返回值则是此模块在内存中的地址。在获取到此模块在内存中的地址后,获取具体的函数CreateFile地址,可通过系统API函数GetProcAddress来获取。函数原型如下:
其中参数hModule用于表示模块的句柄;参数lpProcName用于表示函数的名称。
Address=GetProcAddress(hModule,“CreateFile”);
因此通过传入模块句柄和函数名称,便可以得到具体的函数即待hook原始代码的内存地址。
102、提取待hook原始代码的特征码;
在确定待hook原始代码的内存地址后,提取待hook原始代码的特征码该特征码用于在各操作系统中定位待hook原始代码。
具体的,对于操作系统不同的版本来说,其每个函数可能存在一些细微的差别,但是其实现的功能都是一样的,因此对于本发明实施例中的inlinehook则是需要找到每个系统具体的需要hook的位置。同时需要获取一些函数的参数数据。因此,本发明实施例中,本文会对具体待hook原始代码的hook点提取出其对应的特征码,从而对于不同的操作系统版本,则可以通过特征码来查找到具体对应的位置,从而能够实现inlinehook的功能。
由于inlinehook都是在已经发布的程序中进行inlinehook,所以对应的都是编译器已经编译好的代码,所以其都是汇编代码。本发明实施例中,从中找到了一段代码做为此函数的特征码。如下:
其中,左边的8b 53 10是具体的机器指令码;右边的mov edx,[ebx+10h]则是汇编代码助记符。由于在不同的系统中,有可能加入了不同的操作导致内部数据的偏移或者跳转的代码是不一样的,因此选择这段代码做为特征码在不同的系统中从函数CreateFile开始搜查,在有的系统可能搜查不到这段代码。对于本文的mov edx,[ebx+10h]指令来说,其中是从ebx+10h偏移处读取数据到寄存器dex中。那么在不同的操作系统中,其中的10h可能是不一样的,例如对于windows7可能是10h,对于windows8则可能是15h,对于windows10则又可能是30h。基于此,本发明实施例中,设计特征码时则也需要考虑通配符的情况,是指该处可以匹配任意字符,从而可以兼容到不同操作系统不同版本的情况下偏移不一致的情况。例如,本发明实施例中,可以用一个?作为通配符,故具体特征码则对应的是机器码。具体如下:
Byte pbyCodeBuff[]={8B,53,?,C1,EA,03,72,D5,83,FA,38}
其中本发明实施例中的?则对应的是mov edx,[ebx+10h]指令的10h,因为此段偏移可能再不同的操作系统版本中不一样。
因此,通过步骤102,实现了特征码的设计,以及具有通配符的功能。
103、在目标操作系统中,从待hook原始代码的内存地址的起始位置查找并匹配特征码;
104、当查找到特征码并匹配成功时,确定目标偏移量;
105、根据目标偏移量确定待hook原始代码在目标操作系统中的精确内存地址;
针对特定的目标操作系统,其中,该目标操作系统可为Windows7,Windows8或者windows10等,从待hook原始代码的内存地址的其实位置查找并匹配特征码。具体的,进行inlinehook时,在获取到了待hook原始代码的内存地址后,则需要从该待hook原始代码的内存地址的起始地址进行特征码的匹配工作,直到匹配上了,则找到了inlinehook的具体位置,从而可以进行后续的inlinehook。
具体方法则是首先获取函数的内存地址,然后从内存代码起始开始匹配特征码。具体实现如下:
在步骤101中已经通过Address=GetProcAddress(hModule,“CreateFile”);
来获取到了CreateFile即待hook原始代码在内存中的地址Address。
然后需要读取该待hook原始代码开始的内存。读取内存则可以调用系统API函数ReadProcessMemory来读取。具体则可以通过系统API函数ReadProcessMemory来读取内存。
BOOL bRet=ReadProcessMemory(hProcess,(LPVOID)Address,&bySrcCode,dwLen,&nRead);
其中参数hProcess用于表示本进程的句柄;参数Address用于表示获取到的待hook原始代码的起始的内存地址;参数bySrcCode则用于存储原始代码;参数dwLen则表示读取的长度。
读取到待hook原始代码后,则可以进行特征码搜索匹配的工作。
bool bCodeFund=true;
定义一个变量bCodeFund作为是否找到的标记。
DWORD ni=0;
定义一个变量用于存储找到时距离函数起始位置的偏移。
直到查找到最后,如果没有查找到则bCodeFund为false,如果查找到则bCodeFund为ture,其中,ni则表示具体的偏移。
通过查找后,具体的函数地址则是Address+ni。
这个地址则是inlinehook需要具体进行hook的内存地址。
106、根据无作用汇编指令编写跳转桩代码;
首先,为了保证编写的跳转桩代码为随机的,且无规律的,因此可以编写无作用汇编指令来使得编写的跳转桩代码均不同。其中该无作用汇编指令为不影响程序的执行功能的指令,即无作用的指令是指其不会影响程序的任何功能,执行之后等于没有执行的指令。为便于理解,例如对于一个变量进行加法操作,然后进行同样操作数的减法操作,从而变量的值并没有发生变化。这些无作用汇编指令的目的是为了后续产生随机可变的inlinehook的跳转桩的指令。本发明实施例中,对于inlinehook只能使用汇编指令,因此本发明实施例中都是基于汇编指令。
需要说明的是,无作用汇编指令可以包括以下方法:
1.空操作:nop指令,表示空操作,那么则可以是任意多条nop指令。可以是:nop,即一条指令。也可以是多条:nop nop nop等等,nop指令的条数具体此处不做限定。
2.加减指令操作:
add eax,5;将寄存器EAX值加5;
sub eax,5;将寄存器EAX值减5;
那么这对指令则是属于无作用指令。
需要说明的是,也可以采用其他的寄存器,操作数5也可以是其他数据,如操作数8等。
3.赋值指令操作:将寄存器的值赋值给自己。
mov edi,edi
mov eax,eax
mov ebx,ebx
以上3条指令则是将寄存器自己的值赋值给自己,所以相当于无作用指令。
4.跳转指令操作:通过跳转指令,从而跳转指令后的指令不被执行:
jz label跳转指令,判断ZF标志位为0则跳转到label处开始执行;
jnz label跳转指令,判断ZF标志位为1则跳转到label处开始执行;
mov eax,5
add eax,ebx
sub eax,ecx
label:
mov eax,3
由于在指令开头处编写了跳转指令,并且编写了2条跳转指令,因此不管ZF标志位为0还是为1都会跳转到label标签处。那么处在jnz和label标签处的代码,包括mov eax,5;add eax,ebx;sub eax,ecx,这几条指令都不会被执行,因此可以在此之间增加任意的指令。
5.通过堆栈操作:
本发明实施例中,提供了多种无作用汇编指令的举例,并且可以随意的进行组合,同时也可以随意的增加任意多条指令。那么构造无作用汇编指令则可以构造出任意多条,并且基本不会重复。因此,编写无作用汇编指令的方式具体此处不做限定。
在得到无作用汇编指令后,根据该无作用汇编指令编写跳转桩代码,跳转桩代码包括需插入的inlinehook逻辑代码,跳转桩代码用于保存所述程序中待hook原始代码的执行环境。具体地,对于inlinehook来说,会将需要hook的代码修改成一个jump指令,而对于jump的位置,则是需要先跳转到跳转桩代码,然后从跳转桩来跳转到inlinehook逻辑代码,inlinehook逻辑代码执行完成后,再执行待hook原始代码,然后再跳转到hook后的位置。从而实现了在原始代码执行流程中,插入了一段自己编写的逻辑代码功能。那么跳转桩的代码则需要完成保存当前执行的待hook原始代码的执行环境,包括所有寄存器的保存,标志寄存器的保存,同时为了方便在inlinehook逻辑代码中执行相应的逻辑,需要传入参数,本文则考虑传入3个参数给hook逻辑代码。同时在跳转代码中需要调用hook逻辑代码,执行完成后则恢复寄存器的保存到寄存器中。其中,跳转桩代码实现如下:
需要说明的是,代码使用一个变量byTrpJmpPadCode来存储。此段代码中保存的是汇编指令对应的机器码。其中左边的16进制数据是机器码。而右边的则是对应的汇编代码助记符。例如0x60则对应的汇编代码是pushad;pushad用于表示将所有寄存器压入到堆栈中;Pushfd用于表示将标志寄存器压入到堆栈中;其中push arg3用于表示将参数3压入堆栈中;push arg2用于表示将参数2压入堆栈中;push arg1用于表示将参数1压入堆栈中;call 0x90909090用于表示调用hook的逻辑代码,0x90909090用于表示填入hooklogicfunc函数的内存地址;add esp,0xc用于表示堆栈平衡,将之前压入的3个参数从堆栈中弹出来;popfd用于表示从堆栈中之前保存的值还原到标志寄存器中;popad用于表示从堆栈中之前保存的所有寄存器的值还原到寄存器中。需要说明的是,这些代码则是最基本的代码,能够正常的完成功能。
本发明实施例中,需要做到每次hook的跳转桩的代码是不一样的,产生更多的随机性,从而给安全厂商无法找到任何规律,或者无法计算hash值,可以在上述代码中插入在步骤101中编写的无作用汇编指令。需要说明的是,该无作用汇编指令可以包括但不限于上述步骤101中列举的一种或者多种,,且该无作用汇编指令可以插入任意条和任意位置,具体本发明实施例不做限定。
例如可以在
0x60,//pushad
0x9c,//pushfd
插入步骤101编写的无作用指令,从而使得跳转桩的代码多样化和多变化。
107、根据无作用汇编指令编写跳转代码;
需要说明的是,跳转代码包括第一跳转代码和第二跳转代码,该第一跳转代码用于从程序中待hook原始代码跳转到跳转桩代码,第二跳转代码用于从跳转桩代码跳转到待hook原始代码,
对于第一跳转代码,具体实现如下:
BYTE byJmpPadCode[HOOKFUNC_JMP_TRP_CODE_SIZE]={
0xe9,0x90,0x90,0x90,0x90//jmp xxxx
};
其中该第一跳转代码的核心代码是一条跳转指令,用于从待hook原始代码跳转到跳转桩代码中。而在此跳转代码中则可以插入步骤101编写的无作用汇编指令,用于得到无规律、随机的第一跳转代码。
同时对于第一跳转代码需要计算跳转的偏移地址。
具体实现则是通过如下公式:
Offset=dwJumpPad-dwHookAddr-0x5;
其中偏移offset则是由第一跳转桩的代码地址减去待hook原始代码的内存地址再减去5个字节,需要说明的是,由于跳转指令本身是5个字节,如果对于插入了随机代码,则跳转指令本身的5个字节也要随着增加)。
对于第二跳转代码的具体实现,即用于从跳转桩代码跳转至待hook原始代码。在执行完成从待hook原始代码跳转到跳转桩后,再执行完成inlinehook逻辑代码,则接着会从第二跳转桩跳转到待hook原始代码处,以继续执行该待hook原始代码处的代码。对于第二跳转代码的具体实现如下:
BYTE byJmpSrcCode[HOOK_JMP_SRC_CODE_SIZE]={
0xe9,0x90,0x90,0x90,0x90//jmp xxxx
};
其代码核心代码也是一条跳转指令,用于从待hook原始代码跳转到第二跳转桩代码中。而在此第二跳转代码中也可以插入步骤101编写的无作用汇编指令,用于得到无规律、随机的第二跳转代码。同时对于第二跳转代码需要计算跳转的偏移地址,具体计算方式与第一跳转代码的偏移地址的计算方式类似,具体此处不再赘述。
108、备份待hook原始代码,将该待hook原始代码修改为第一跳转代码;
在上述步骤中,编写了进行inlinehook所需要的基本功能的代码,当需要对待hook原始代码执行hook操作时,备份该待hook原始代码,并将该待hook原始代码修改为第一跳转代码。
具体的,本发明实施例中,由于待hook原始代码会被修改成第一跳转代码,所以在修改前先需要进行备份该待hook原始代码,从而执行完成跳转桩代码后继续执行该待hook原始代码。具体则可以通过系统API函数ReadProcessMemory来读取内存。
BOOL bRet=ReadProcessMemory(hProcess,(LPVOID)dwHookAddr,&bySrcCode,dwHookLen,&nRead);
其中参数hProcess表示本进程的句柄;参数dwHookAddr表示hook的内存地址;参数bySrcCode则用于存储原始代码;其中参数dwHookLen则表示读取的长度。
需要说明的是,为将该待hook原始代码修改为第一跳转代码,必须修改待hook处原始代码的代码属性。由于程序中代码都是只读可执行的内存属性,如果需要对待hook原始代码进行hook那么则需要修改成可以写可以执行的内存属性,系统API函数提供了修改内存属性的方法VirtualProtectEx。
VirtualProtectEx(hProcess,(LPVOID)dwHookAddr,dwHookLen,PAGE_EXECUTE_READWRITE,&dwOld);
其中修改的地址是待hook原始代码的地址dwHookAddr,dwHookLen则待hook原始代码其长度。其中修改的属性则是PAGE_EXECUTE_READWRITE,用于表示可以读写可以执行。
109、当执行到待hook原始代码时,根据第一跳转代码从待hook原始代码跳转到跳转桩代码;
在程序的运行过程中,当执行到待hook原始代码时,根据第一跳转代码从待hook原始代码跳转到跳转桩代码,并暂停程序中所有的线程。具体的,本发明实施例中,跳转桩的代码是动态分配可以执行的内存,因此跳转桩代码是一种动态代码,没有固定位置,随着系统内存的空闲内存变化而变化。
具体可以通过系统API函数来分配内存,并且需要分配可以读写可以执行的内存属性。
BYTE*VirtualMem=VirtualAlloc(NULL,dwVirtualSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
其中参数dwVirtualSize则是跳转桩代码的大小。
其中返回值则是分配的具体内存地址。
在为跳转桩代码分配内存后,跳转到该跳转桩代码,可选的,还可以暂停程序中所有其他的线程。
另外,本发明实施例中,通过系统函数WriteProcessMemory则可以修改待hook原始代码为第一跳转代码。
WriteProcessMemory(hProcess,(LPVOID)dwHookAddr,&byJmpPadCode,HOOK_JMP_SRC_CODE_SIZE,&nWrite);
即本发明实施例中,在待hook原始代码处写入第一跳转代码,就会根据该第一跳转代码跳转到编写的跳转桩代码。
110、执行完成跳转桩代码后,根据第二跳转代码从跳转桩代码跳转到备份的待hook原始代码;
执行完成跳转桩代码后,根据步骤107编写的第二跳转代码从跳转桩代码跳转到已备份的待hook原始代码中。
111、恢复程序中所有的线程,以继续执行待hook原始代码。
在从跳转桩代码跳转到备份的待hook原始代码时,还可编写循环遍历所有的线程来恢复所有线程,以继续执行待hook原始代码。
上面从程序处理的方法的角度对本发明实施例进行了描述,下面从程序处理设备的角度对本发明实施例进行描述。
请参阅图2,图2为本发明实施例提供的一种可能的程序处理设备的实施例示意图,该程序处理设备,具体包括:
确定单元201,用于确定待hook原始代码的内存地址;
提取单元202,用于提取所述待hook原始代码的特征码,所述特征码用于在各操作系统中定位所述待hook原始代码;
查找单元203,用于在目标操作系统中,从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码,所述目标操作系统包含于所述各操作系统;
所述确定单元201,还用于当查找到所述特征码并匹配成功时,确定目标偏移量,所述目标偏移量为从所述起始位置到查找到所述特征码的位置的偏移量;根据所述目标偏移量确定所述待hook原始代码在所述目标操作系统中的精确内存地址;
处理单元204,用于根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作。
可选的,在一些可能的实现方式中,所述确定单元201具体用于:
调用系统API函数GetModuleHandle获取所述待hook原始代码所在系统模块的内存地址;根据所述待hook原始代码所在系统模块的内存地址,调用系统API函数GetProcAddress获取所述待hook原始代码的内存地址。
可选的,在一些可能的实现方式中,所述处理单元204包括:
分配模块2041,用于分配跳转桩代码的内存,所述跳转桩代码包括需插入的inlinehook逻辑代码,所述跳转桩代码用于保存所述待hook原始代码的执行环境;
修改模块2042,用于根据所述精确内存地址,调用系统API函数VirtualProtectEx将所述待hook原始代码的内存属性从只读可执行修改为可写可执行;修改所述待hook原始代码为第一跳转代码,所述第一跳转代码用于从所述待hook原始代码跳转到所述跳转桩代码;
跳转模块2043,用于执行完成所述跳转桩代码后,根据第二跳转代码从所述跳转桩代码跳转到所述待hook原始代码,以继续执行所述待hook原始代码。
可选的,在一些可能的实现方式中,所述查找单元203包括:
获取模块2031,用于调用系统API函数ReadProcessMemory读取所述待hook原始代码所在内存,以得到所述待hook原始代码;
判断模块2032,用于通过if循环判断所述待hook原始代码所在内存中是否存在机器码与所述特征码是否一致;
确定模块2033,用于若存在,则确定查找到所述特征码并匹配成功;若不存在,则确定匹配所述特征码失败。
请参阅图3,图3为本发明实施例提供的电子设备的实施例示意图。
如图3所示,本发明实施例提供了一种电子设备,包括存储器310、处理器320及存储在存储器320上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时实现以下步骤:确定待hook原始代码的内存地址;提取所述待hook原始代码的特征码,所述特征码用于在各操作系统中定位所述待hook原始代码;在目标操作系统中,从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码,所述目标操作系统包含于所述各操作系统;当查找到所述特征码并匹配成功时,确定目标偏移量,所述目标偏移量为从所述起始位置到查找到所述特征码的位置的偏移量;根据所述目标偏移量确定所述待hook原始代码在所述目标操作系统中的精确内存地址;根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作。
可选的,在一种可能的实施例中,所述处理器具体用于:
调用系统API函数GetModuleHandle获取所述待hook原始代码所在系统模块的内存地址;根据所述待hook原始代码所在系统模块的内存地址,调用系统API函数GetProcAddress获取所述待hook原始代码的内存地址。
可选的,在一种可能的实施例中,所述处理器具体用于:分配跳转桩代码的内存,所述跳转桩代码包括需插入的inlinehook逻辑代码,所述跳转桩代码用于保存所述待hook原始代码的执行环境;根据所述精确内存地址,调用系统API函数VirtualProtectEx将所述待hook原始代码的内存属性从只读可执行修改为可写可执行;修改所述待hook原始代码为第一跳转代码,所述第一跳转代码用于从所述待hook原始代码跳转到所述跳转桩代码;执行完成所述跳转桩代码后,根据第二跳转代码从所述跳转桩代码跳转到所述待hook原始代码,以继续执行所述待hook原始代码。
可选的,在一种可能的实施例中,所述处理器具体用于:调用系统API函数ReadProcessMemory读取所述待hook原始代码所在内存,以得到所述待hook原始代码;通过if循环判断所述待hook原始代码所在内存中是否存在机器码与所述特征码是否一致;若存在,则确定查找到所述特征码并匹配成功;若不存在,则确定匹配所述特征码失败。
在具体实施过程中,处理器320执行计算机程序311时,可以实现图1对应的实施例中任一实施方式。
由于本实施例所介绍的电子设备为实施本发明实施例中一种程序处理设备所采用的设备,故而基于本发明实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本发明实施例中的方法不再详细介绍,只要本领域所属技术人员实施本发明实施例中的方法所采用的设备,都属于本发明所欲保护的范围。
请参阅图4,图4为本发明实施例提供的一种计算机可读存储介质的实施例示意图。
如图4所示,本实施例提供了一种计算机可读存储介质400,其上存储有计算机程序411,该计算机程序411被处理器执行时实现如下步骤:确定待hook原始代码的内存地址;提取所述待hook原始代码的特征码,所述特征码用于在各操作系统中定位所述待hook原始代码;在目标操作系统中,从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码,所述目标操作系统包含于所述各操作系统;当查找到所述特征码并匹配成功时,确定目标偏移量,所述目标偏移量为从所述起始位置到查找到所述特征码的位置的偏移量;根据所述目标偏移量确定所述待hook原始代码在所述目标操作系统中的精确内存地址;根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:调用系统API函数GetModuleHandle获取所述待hook原始代码所在系统模块的内存地址;根据所述待hook原始代码所在系统模块的内存地址,调用系统API函数GetProcAddress获取所述待hook原始代码的内存地址。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:分配跳转桩代码的内存,所述跳转桩代码包括需插入的inlinehook逻辑代码,所述跳转桩代码用于保存所述待hook原始代码的执行环境;根据所述精确内存地址,调用系统API函数VirtualProtectEx将所述待hook原始代码的内存属性从只读可执行修改为可写可执行;修改所述待hook原始代码为第一跳转代码,所述第一跳转代码用于从所述待hook原始代码跳转到所述跳转桩代码;执行完成所述跳转桩代码后,根据第二跳转代码从所述跳转桩代码跳转到所述待hook原始代码,以继续执行所述待hook原始代码。
可选的,在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:调用系统API函数ReadProcessMemory读取所述待hook原始代码所在内存,以得到所述待hook原始代码;通过if循环判断所述待hook原始代码所在内存中是否存在机器码与所述特征码是否一致;若存在,则确定查找到所述特征码并匹配成功;若不存在,则确定匹配所述特征码失败。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
Claims (10)
1.一种程序处理方法,其特征在于,包括:
确定待hook原始代码的内存地址;
提取所述待hook原始代码的特征码,所述特征码用于在各操作系统中定位所述待hook原始代码;
在目标操作系统中,从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码,所述目标操作系统包含于所述各操作系统;
当查找到所述特征码并匹配成功时,确定目标偏移量,所述目标偏移量为从所述起始位置到查找到所述特征码的位置的偏移量;
根据所述目标偏移量确定所述待hook原始代码在所述目标操作系统中的精确内存地址;
根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作。
2.根据权利要求1所述的方法,其特征在于,所述确定待hook原始代码的内存地址包括:
调用系统API函数GetModuleHandle获取所述待hook原始代码所在系统模块的内存地址;
根据所述待hook原始代码所在系统模块的内存地址,调用系统API函数GetProcAddress获取所述待hook原始代码的内存地址。
3.根据权利要求1所述的方法,其特征在于,所述根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作包括:
分配跳转桩代码的内存,所述跳转桩代码包括需插入的inlinehook逻辑代码,所述跳转桩代码用于保存所述待hook原始代码的执行环境;
根据所述精确内存地址,调用系统API函数VirtualProtectEx将所述待hook原始代码的内存属性从只读可执行修改为可写可执行;
修改所述待hook原始代码为第一跳转代码,所述第一跳转代码用于从所述待hook原始代码跳转到所述跳转桩代码;
执行完成所述跳转桩代码后,根据第二跳转代码从所述跳转桩代码跳转到所述待hook原始代码,以继续执行所述待hook原始代码。
4.根据权利要求1所述的方法,其特征在于,所述从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码包括:
调用系统API函数ReadProcessMemory读取所述待hook原始代码所在内存,以得到所述待hook原始代码;
通过if循环判断所述待hook原始代码所在内存中是否存在机器码与所述特征码是否一致;
若存在,则确定查找到所述特征码并匹配成功;
若不存在,则确定匹配所述特征码失败。
5.一种程序处理设备,其特征在于,包括:
确定单元,用于确定待hook原始代码的内存地址;
提取单元,用于提取所述待hook原始代码的特征码,所述特征码用于在各操作系统中定位所述待hook原始代码;
查找单元,用于在目标操作系统中,从所述待hook原始代码的内存地址的起始位置查找并匹配所述特征码,所述目标操作系统包含于所述各操作系统;
所述确定单元,还用于当查找到所述特征码并匹配成功时,确定目标偏移量,所述目标偏移量为从所述起始位置到查找到所述特征码的位置的偏移量;根据所述目标偏移量确定所述待hook原始代码在所述目标操作系统中的精确内存地址;
处理单元,用于根据所述精确内存地址在所述目标操作系统中对所述待hook原始代码执行inlinehook操作。
6.根据权利要求5所述的程序处理设备,其特征在于,所述确定单元具体用于:
调用系统API函数GetModuleHandle获取所述待hook原始代码所在系统模块的内存地址;根据所述待hook原始代码所在系统模块的内存地址,调用系统API函数GetProcAddress获取所述待hook原始代码的内存地址。
7.根据权利要求5所述的程序处理设备,其特征在于,所述处理单元包括:
分配模块,用于分配跳转桩代码的内存,所述跳转桩代码包括需插入的inlinehook逻辑代码,所述跳转桩代码用于保存所述待hook原始代码的执行环境;
修改模块,用于根据所述精确内存地址,调用系统API函数VirtualProtectEx将所述待hook原始代码的内存属性从只读可执行修改为可写可执行;修改所述待hook原始代码为第一跳转代码,所述第一跳转代码用于从所述待hook原始代码跳转到所述跳转桩代码;
跳转模块,用于执行完成所述跳转桩代码后,根据第二跳转代码从所述跳转桩代码跳转到所述待hook原始代码,以继续执行所述待hook原始代码。
8.根据权利要求5所述的程序处理设备,其特征在于,所述查找单元包括:
获取模块,用于调用系统API函数ReadProcessMemory读取所述待hook原始代码所在内存,以得到所述待hook原始代码;
判断模块,用于通过if循环判断所述待hook原始代码所在内存中是否存在机器码与所述特征码是否一致;
确定模块,用于若存在,则确定查找到所述特征码并匹配成功;若不存在,则确定匹配所述特征码失败。
9.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-4任意一项所述的方法。
10.一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如权利要求1-4任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810717126.9A CN111913742B (zh) | 2018-07-03 | 2018-07-03 | 一种程序处理方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810717126.9A CN111913742B (zh) | 2018-07-03 | 2018-07-03 | 一种程序处理方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111913742A true CN111913742A (zh) | 2020-11-10 |
CN111913742B CN111913742B (zh) | 2022-11-11 |
Family
ID=73241620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810717126.9A Active CN111913742B (zh) | 2018-07-03 | 2018-07-03 | 一种程序处理方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111913742B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559920A (zh) * | 2020-12-23 | 2021-03-26 | 苏州三六零智能安全科技有限公司 | 基于跳转指令的hook方法、装置、设备及存储介质 |
CN113190235A (zh) * | 2021-05-27 | 2021-07-30 | 武汉斗鱼鱼乐网络科技有限公司 | 一种代码的分析方法、装置、电子终端及存储介质 |
CN115017058A (zh) * | 2022-08-04 | 2022-09-06 | 飞腾信息技术有限公司 | 一种内核模块的测试方法、装置、电子设备及存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060277539A1 (en) * | 2005-06-07 | 2006-12-07 | Massachusetts Institute Of Technology | Constraint injection system for immunizing software programs against vulnerabilities and attacks |
CN101604370A (zh) * | 2009-07-06 | 2009-12-16 | 中国人民解放军信息技术安全研究中心 | 一种高兼容性的监控Windows内核函数调用的方法 |
CN101706852A (zh) * | 2009-11-17 | 2010-05-12 | 珠海金山软件股份有限公司 | 网游密码保护装置和方法 |
US20120233612A1 (en) * | 2011-02-08 | 2012-09-13 | Beckett Stephen M | Code injection and code interception in an operating system with multiple subsystem environments |
CN103632087A (zh) * | 2012-08-21 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 保护进程的方法和装置 |
CN104239786A (zh) * | 2014-10-13 | 2014-12-24 | 北京奇虎科技有限公司 | 免root主动防御配置方法及装置 |
CN104885092A (zh) * | 2012-11-13 | 2015-09-02 | 奥克兰服务有限公司 | 用于操作系统的安全系统和方法 |
CN106295326A (zh) * | 2016-08-12 | 2017-01-04 | 武汉斗鱼网络科技有限公司 | 一种用于获取显卡内容的内联hook方法和系统 |
CN106295340A (zh) * | 2016-08-03 | 2017-01-04 | 武汉斗鱼网络科技有限公司 | 一种程序文件恢复系统及方法 |
CN106897121A (zh) * | 2017-03-01 | 2017-06-27 | 四川大学 | 一种基于虚拟化技术的无代理客户机进程防护方法 |
CN107450964A (zh) * | 2017-08-10 | 2017-12-08 | 西安电子科技大学 | 一种用于发现虚拟机自省系统中是否存在漏洞的方法 |
CN107943544A (zh) * | 2017-12-11 | 2018-04-20 | 北京奇虎科技有限公司 | 一种内核补丁的加载方法及装置 |
-
2018
- 2018-07-03 CN CN201810717126.9A patent/CN111913742B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060277539A1 (en) * | 2005-06-07 | 2006-12-07 | Massachusetts Institute Of Technology | Constraint injection system for immunizing software programs against vulnerabilities and attacks |
CN101604370A (zh) * | 2009-07-06 | 2009-12-16 | 中国人民解放军信息技术安全研究中心 | 一种高兼容性的监控Windows内核函数调用的方法 |
CN101706852A (zh) * | 2009-11-17 | 2010-05-12 | 珠海金山软件股份有限公司 | 网游密码保护装置和方法 |
US20120233612A1 (en) * | 2011-02-08 | 2012-09-13 | Beckett Stephen M | Code injection and code interception in an operating system with multiple subsystem environments |
CN103632087A (zh) * | 2012-08-21 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 保护进程的方法和装置 |
CN104885092A (zh) * | 2012-11-13 | 2015-09-02 | 奥克兰服务有限公司 | 用于操作系统的安全系统和方法 |
CN104239786A (zh) * | 2014-10-13 | 2014-12-24 | 北京奇虎科技有限公司 | 免root主动防御配置方法及装置 |
CN106295340A (zh) * | 2016-08-03 | 2017-01-04 | 武汉斗鱼网络科技有限公司 | 一种程序文件恢复系统及方法 |
CN106295326A (zh) * | 2016-08-12 | 2017-01-04 | 武汉斗鱼网络科技有限公司 | 一种用于获取显卡内容的内联hook方法和系统 |
CN106897121A (zh) * | 2017-03-01 | 2017-06-27 | 四川大学 | 一种基于虚拟化技术的无代理客户机进程防护方法 |
CN107450964A (zh) * | 2017-08-10 | 2017-12-08 | 西安电子科技大学 | 一种用于发现虚拟机自省系统中是否存在漏洞的方法 |
CN107943544A (zh) * | 2017-12-11 | 2018-04-20 | 北京奇虎科技有限公司 | 一种内核补丁的加载方法及装置 |
Non-Patent Citations (1)
Title |
---|
李志勇等: "溢出型网页恶意代码运行机理分析与防范", 《兵工学报》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559920A (zh) * | 2020-12-23 | 2021-03-26 | 苏州三六零智能安全科技有限公司 | 基于跳转指令的hook方法、装置、设备及存储介质 |
CN112559920B (zh) * | 2020-12-23 | 2022-11-04 | 苏州三六零智能安全科技有限公司 | 基于跳转指令的hook方法、装置、设备及存储介质 |
CN113190235A (zh) * | 2021-05-27 | 2021-07-30 | 武汉斗鱼鱼乐网络科技有限公司 | 一种代码的分析方法、装置、电子终端及存储介质 |
CN113190235B (zh) * | 2021-05-27 | 2022-05-10 | 武汉斗鱼鱼乐网络科技有限公司 | 一种代码的分析方法、装置、电子终端及存储介质 |
CN115017058A (zh) * | 2022-08-04 | 2022-09-06 | 飞腾信息技术有限公司 | 一种内核模块的测试方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111913742B (zh) | 2022-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111913742B (zh) | 一种程序处理方法及相关设备 | |
CN109471697B (zh) | 一种监控虚拟机中系统调用的方法、装置及存储介质 | |
CN109086183B (zh) | 一种应用程序的监控方法、装置、电子设备及存储介质 | |
CN110737892A (zh) | 一种针对apc注入的检测方法和相关装置 | |
CN112099800A (zh) | 代码数据的处理方法、装置和服务器 | |
CN103019787A (zh) | 函数调用关系确定方法、热补丁升级方法及装置 | |
CN111615688A (zh) | 一种断言验证代码绑定方法及装置 | |
CN110673899B (zh) | 一种程序处理方法及相关设备 | |
CN111625225A (zh) | 一种程序指定数据输出方法和装置 | |
Karande et al. | BCD: Decomposing binary code into components using graph-based clustering | |
CN105354490B (zh) | 一种处理被劫持浏览器的方法及设备 | |
CN111352668A (zh) | 基于插件的设备测试方法及装置、基于插件的测试系统 | |
CN109426546B (zh) | 应用启动方法及装置、计算机存储介质及设备 | |
CN114020278B (zh) | 数据处理方法、装置、设备及存储介质 | |
US8566813B2 (en) | Method and system generating execution file system device | |
CN102799434B (zh) | 一种利用软件保护装置实现自动代码移植的方法 | |
CN112199116B (zh) | 操作数栈寄存器识别方法、装置、设备及存储介质 | |
CN114610516A (zh) | 应用程序的修复方法、装置、计算机设备以及存储介质 | |
CN107239395B (zh) | 一种源代码中无效函数的查找方法和设备 | |
CN113031956A (zh) | 程序编译方法和装置以及程序运行方法和装置 | |
US9898257B2 (en) | Automatic probe construction system and method thereof | |
CN112765676B (zh) | 一种智能合约执行方法、智能合约执行装置及节点设备 | |
US10055209B2 (en) | Resource closing | |
Bazhenov et al. | Methodology of software code decomposition analysis | |
US20230142407A1 (en) | Apparatus for analyzing non-informative firmware and method using the same |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231218 Address after: Room 0032, 9th Floor, Unit 1, Building 13, International Headquarters City, Liuwu New District, Lhasa, Tibet Autonomous Region, 850000 Patentee after: Tibet Zimo Network Technology Co.,Ltd. Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd. |
|
TR01 | Transfer of patent right |