CN115145571A - 在程序核心代码中隐藏系统函数调用的方法、装置和介质 - Google Patents

在程序核心代码中隐藏系统函数调用的方法、装置和介质 Download PDF

Info

Publication number
CN115145571A
CN115145571A CN202110346962.2A CN202110346962A CN115145571A CN 115145571 A CN115145571 A CN 115145571A CN 202110346962 A CN202110346962 A CN 202110346962A CN 115145571 A CN115145571 A CN 115145571A
Authority
CN
China
Prior art keywords
function
code
module
program
system function
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.)
Pending
Application number
CN202110346962.2A
Other languages
English (en)
Inventor
周志刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN202110346962.2A priority Critical patent/CN115145571A/zh
Publication of CN115145571A publication Critical patent/CN115145571A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明实施例提供一种在程序核心代码中隐藏系统函数调用的方法方法、装置和介质,方法包括:包括:通过解析导入表,获取任一系统函数;遍历程序模块,获取任一函数和调用所述任一函数的内存地址,并在所述任一函数中筛选出系统函数;修改所述导入表,以使所述导入表不导入任一系统函数;并在程序中创建代码段,将任一系统函数的代码复制到所述代码段;并将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏本发明实施例提供的隐藏系统函数调用的方法和相关设备,不会对外暴露系统函数的调用,从而以牺牲程序的包的大小的方式换取安全性,实现核心代码中无call调用系统函数。

Description

在程序核心代码中隐藏系统函数调用的方法、装置和介质
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种在核心程序代码中隐藏系统函数调用的方法、装置、设备和存储介质。
背景技术
对于程序的开发,程序的功能是通过代码逻辑和系统函数调用实现的。因为系统函数在进程内存中是固定的,所以极易被钩子函数hook或是其他方式感知到调用。一旦得知调用的系统函数,开发的程序的功能就会被知晓,从而具有较低的安全性。例如对于程序实现注册表或文件的数据输入的功能,会调用系统提供的注册表相关的函数,一旦得知调用的注册表相关的系统函数,系统函数的调用也出现在导入表中,程序的功能就会被知晓。
由此可知需要一种方案来对隐藏系统函数调用。
发明内容
针对现有技术存在的问题,本发明实施例提供一种在核心程序代码中隐藏系统函数调用的方法,能够直接从创建的代码段中调用系统函数,所有功能都是在程序模块中完成,不会对外暴露系统函数的调用,隐藏了系统函数的调用。
第一方面,本发明实施例提供了一种在程序核心代码中隐藏系统函数调用的方法,包括:
通过解析导入表,获取任一系统函数;
遍历程序模块,获取任一函数和调用所述任一函数的内存地址,并在所述任一函数中筛选出系统函数;
修改所述导入表,以使所述导入表不导入任一系统函数;
并在程序中创建代码段,将任一系统函数的代码复制到所述代码段;
并将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏。
优选地,还包括:
根据所述任一导入函数,建立导入函数列表;
建立多个结构对象以对应存储每个导入函数对应的导入项;其中,所述导入项包括系统的模块名称和模块的函数名称、导入函数的内存地址;
建立第一数组,以存储所述结构对象。
优选地,所述遍历程序模块获取任一函数和获取调用所述任一函数的内存地址,具体包括:
遍历所述遍历程序模块,根据函数头汇编代码特征和函数尾汇编代码特征查找出任一函数;
获取所述任一函数的函数地址,并建立第二数组,以存储所述任一函数的函数地址。
优选地,所述在所述任一函数中筛选出系统函数,具体包括:
标记所述任一函数中的任一调用指令,并获得内存地址,其中,所述内存地址为所述调用指令中包含的地址代码
根据所述内存地址计算真实函数地址;
遍历所述第二数组,若所述内存地址与所述第二数组中的函数地址匹配,则判定其对应的函数为系统函数;
建立第三数组,记录所述筛选出的系统函数的真实函数地址、所述系统函数对应的统的模块名称和模块的函数名称;
其中,所述真实函数地址计算公式为:
Real dwoffset=dwoffset-DWORD dwoffset;
其中,Real dwoffset为真实函数地址,dwoffset为内存地址,DWORD dwoffset=*(DWORD*)(call_address+1);DWORD dwoffset为偏移字节,*(DWORD*)(call_address+1)为当前指令在内存中的地址占用字节长度。
优选地,所述修改所述导入表,以使所述导入表不导入任一系统函数,具体包括:
获取所述程序PE导入表的DOS头数据,获取所述程序PE导入表的NT头数据;
根据所述程序PE导入表的NT头数据,获取所述程序PE导入表的起始地址;
遍历所述述程序PE导入表的结果数据,并将所述程序PE导入表的结果数据中的dwFileOriFirstThunk数据值清空为零。
优选地,所述并在程序中创建代码段,将任一系统函数的代码复制到创建的代码段,具体包括:
遍历所述第三数组,获取所有系统函数的代码长度;
基于所有系统函数的代码长度,获取所有系统函数的代码长度;
对所有系统函数的代码长度求和的得到新增代码段长度;
根据所述新增代码长度,创建代码段;
遍历所述一数组,获取系统模块名称和函数名称并加载对应的模块;
并通过系统函数获取所有系统函数在模块中的内存地址和起始地址,进而得到所述系统函数在所述模块中的偏移;
并通过函数头汇编代码特征与函数尾汇编代码特征,计算出函数的汇编代码长度;
所有系统函数的汇编代码复制到所述创建代码段。
优选地,所述将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,具体包括:
读取重定位表格中的重定位数据;
查找所述系统函数的汇编代码在所述重定位数据中的重定位项;
将查找到的重定位项复制到所述代码段,并将所述重定位项中的地址数据转换为代码段中的数据;
若所述重定位项中存在引入系统模块的全局数据或全局表格,将所述引入系统模块的全局数据或全局表格复制到所述代码段中,并重定位项中的地址数据转换为代码段中的数据;
将所述代码段中调用系统函数的指令修改为调用新增加代码段中拷贝的系统函数。
第二方面,本发明实施例提供了一种在程序核心代码中实现隐藏系统函数调用的装置,包括:获取模块,其用于通过解析程序导入表,获取任一系统导入函数;遍历模块,其用于遍历程序,获取任一函数和调用所述任一函数的内存地址,并在所述任一函数中筛选出系统函数;修改模块,其用于修改所述导入表,以使所述导入表不导入任一系统函数;创建模块,其用于在程序中创建代码段,将任一系统函数的代码复制到创建的代码段;调用模块,其用于将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏。
第三方面,本发明实施例提供一种电子设备,包括应用处理器和存储器,所述处理器用于实现所述存储器中存储得计算机管理程序式时实现如上述隐藏系统函数调用的方法的步骤。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机管理类程序,所述计算机管理类程序被处理器执行时实现如上述隐藏系统函数调用的方法的步骤。
有益效果
本发明实施例提供的隐藏系统函数调用的方法和相关设备,通过遍历数组获取新增代码段长度创建代码段,将系统函数汇编代码复制到创建的代码段,在修改了调用指令之后能够直接从创建的代码段中调用系统函数,对于注册表操作等必须调用系统函数才能实现的功能,所有功能都是在程序模块中完成,不会对外暴露系统函数的调用,从而以牺牲程序的包的大小的方式换取安全性,实现核心代码中无call调用系统函数。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所述的在程序核心代码中隐藏系统函数调用的方法实施例的流程图;
图2为本发明所述的建立第一数组的流程图。
图3为本发明所述的在任一函数中筛选出系统函数的流程图。
图4为本发明所述的修改导入表的流程图。
图5为本发明所述的将任一系统函数的代码复制到代码段的流程图。
图6为本发明所述的修改系统函数调用指令的流程图。
图7为本发明隐藏系统函数调用的装置实施例的模块图;
图8为本发明实施例提供的具有隐藏系统函数调用功能的装置的硬件结构示意图;
图9为本发明实施例提供的一种可能的电子设备的实施例示意图;
图10为本发明实施例提供的一种可能的计算机可读存储介质的实施例示意图。
具体实施方式
以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明的描述中,术语“中”、“上”、“下”、“横”、“内”等指示的方向或位置关系的术语是基于附图所示的方向或位置关系,这仅仅是为了便于描述,而不是指示或暗示所述装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
此外,还需要说明的是,在本发明的描述中,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可根据具体情况理解上述术语在本发明中的具体含义。
图1为本发明隐藏系统函数调用的方法实施例的流程图,如图1所示,包括:
步骤S110、通过解析程序导入表,获取任一系统导入函数;
如图2所示,具体地,本实施例提供的模块中的所有函数,包括系统函数和非系统函数,当调用的时候,都有其调用位置,为便于后续的步骤,将系统函数的调用位置和系统函数均存储至数组中,具体的说,包括如下步骤:
步骤S111、根据任一导入函数,建立导入函数列表;
进一步地,对于本发明实施例中的程序,使用PE文件解析编译好的程序软件。PE文件,全称是Portable Executable,意为可移植的可执行的文件,PE文件是Windows操作系统上的程序文件。
使用PE文件解析程序PE导入表获取所有的导入函数,导入函数则是所有的系统函数。
步骤S112、建立多个结构对象以对应存储每个导入函数对应的导入项;其中,导入项包括系统的模块名称和模块的函数名称;
本发明实施例使用一个结构来存储导入项,具体计算机语言描述如下:
strcut ImportItem{
string moduleName;
String functionName;}
其中,moduleName表示存储系统的模块名称,functionName表示存储模块的函数名称。
步骤S113、建立第一数组,以存储结构对象;
具体的说,对于上述计算机语言中的每个结构实例都存储一个PE导入表的导入项,本发明实施例将所有导入项存储到第一数组中,计算机语言描述为vector<ImportItem>importlist;
当解析PE导入表时,会对每个导入项创建一个实例ImportItem对象并存储到第一数组importlist中。
需要特别说明的是,本实施例中步骤S110使用第一数组存储PE导入表获取到的所有系统函数,实现了便于后续获取所有系统函数的汇编代码的有益效果。
如图3所示,步骤S120、遍历程序,获取任一函数和调用任一函数的内存地址,并在任一函数中筛选出系统函数,具体的说,包括如下步骤:
步骤S121、遍历程序模块,根据函数头汇编代码特征和函数尾汇编代码特征查找出任一函数代码。
下面对于函数头汇编代码特征与函数尾汇编代码特征做进一步地介绍:
函数头汇编代码特征:对堆栈寄存器的保存和进行栈空间大小的分配操作。函数头汇编代码特征计算机语言描述如下:
{push ebp;
mov ebp,esp
sub esp,xx
push
}
其中,push ebp;是指将ebp寄存器的值压入到堆栈中。mov ebp,esp是指将当前栈顶值esp复制给ebp,即用ebp保存当前栈指针。sub esp,xx是指分配函数的栈空间大小,此处xx标识是一个具体的数值,每个函数需要的栈空间大小不一样,对应的xx的值则不一样。push是指通用寄存器值压入堆栈寄存器的数据,需要说明的是,寄存器是通用寄存器,具体每个函数都不一样,但是必须是通用寄存器,包括eax,ebx,ecx等通用寄存器,此处的指令条数根据函数的不同而改变,所以此处的特征是一条或者多条。
函数尾汇编代码特征:恢复寄存器的操作并恢复之前保存的寄存器,和函数头汇编代码特征相对应,其对应的寄存器和函数头汇编代码特征的反过来,恢复操作的数量和函数头汇编代码特征保存的数量一致。
函数尾汇编代码特征计算机语言描述如下:
pop
指通用寄存器从堆栈恢复函数头汇编代码特征保存的寄存器的值。此处恢复的指令条数与之前保存的条数一致。同时函数头汇编代码特征保存的顺序和此处恢复的顺序反向。
函数头汇编代码特征与函数尾汇编代码特征举例如下:
函数头汇编代码特征:push eax;
Push ebx;
Push ecx;
对应的函数头汇编代码特征
Pop ecx;
Pop ebx;
Pop eax;
基于每一函数头汇编代码特征和对应的函数尾汇编代码特征,解析出所有函数。
本发明实施例中提取函数头汇编代码特征和函数尾汇编代码特征,是通过堆栈寄存器完成的。基于堆栈寄存器得到函数头汇编代码特征与函数尾汇编代码特征,实现查找到所有函数代码特征的有益效果。
在任一函数中筛选出系统函数,具体包括:
步骤S122、标记函数代码中的任一调用指令,获得内存地址,其中,内存地址为调用指令中包含的地址代码。
在获取了所有函数之后,通过公式计算出在所有函数中,每一个调用函数的内存地址。需要说明的是,本发明实施例中的内存地址指的是在内存中的绝对地址,起始地址是指在内存中的相对起始地址,结尾地址指的是在内存中的相对结尾地址,即有偏移的起始地址和有偏移的结尾地址。
具体的说包括:对于所有函数,通过标记所有的call指令获取所有调用函数,callxxxx指令表示调用一个函数,此处的xxxx则表示调用的函数内存偏移地址。
需要特别说明的是,本发明实施例通过标记所有的call指令获取所有调用函数计内存地址,实现了在所有函数代码中有效识别出系统函数的有益效果。
步骤S123、根据内存地址计算真实函数地址;建立第二数组,以存储真实函数地址,其中,真实函数地址计算公式为:
Real dwoffset=dwoffset-DWORD dwoffset;
其中,Real dwoffset为真实函数地址,dwoffset为内存地址,DWORD dwoffset=*(DWORD*)(call_address+1);DWORD dwoffset为偏移字节,*(DWORD*)(call_address+1)为当前指令在内存中的地址占用字节长度
具体的说,通过公式计算出在所有函数中,每一个调用函数的内存地址,公式如下:
DWORD dwoffset=*(DWORD*)(call_address+1);
读取call指令后面的调用函数的数据,call_address,表示当前指令在内存中的偏移地址。call_address+1中,+1是因为call address指令是5个字节长度,call占据一个字节,后面的偏移数据占据4个字节。dwoffset代表其是一个相对偏移的内存地址。
dwoffset=dwoffset-5
指令本身长度是5个字节,call xxxx指令表示调用的函数内存偏移地址,减去5是真实的函数地址,即本发明实施例中的内存地址。
需要特别说明的是,本实施例中提供的真实函数地址计算公式,根据调用指令的字节获得偏移内存地址,实现了计算准确的有益效果。
步骤S124、遍历第二数组,若真实函数地址与系统函数地址匹配,则判定其对应的函数为系统函数;
进一步地,第二数组中存储了所有的系统函数,本发明实施例将第所有的系统函数的内存地址存储至第一数组,再通过上述公式获取的每一调用函数的内存地址查找第一数组,如果某一调用函数在第一数组中查找到相同的内存地址,则该函数是调用的系统函数,如果没有查找到,则该函数不是调用的系统函数。查找到所有调用的系统函数,并记录下所有调用的系统函数的调用位置。
需要特别说明的是,本实施例中提供的查找方法,根据匹配查找步骤S123建立的包含系统函数地址的,实现了有效识别出系统函数的有益效果。
步骤S125、建立第三数组,记录筛选出的系统函数的调用位置、所述系统函数对应的统的模块名称和模块的函数名称;
具体的说,将每个调用的系统函数的调用位置、调用的系统函数名称和调用的系统函数所在模块名称存储到一个SystemCall实例对象中,数据结构具体计算机语言描述如下:
Struct SystemCall{
string moduleName;
string functionName;
DWORD offset;
}
其中,moduleName是指调用的系统函数所在模块名称,functionName是指调用的系统函数的名称,DWORD offset是指调用的系统函数在此模块中的偏移地址。
查找到所有调用的系统函数后,填充对应的SystemCall实例对象数据,将所有调用的系统函数的SystemCall实例对象存储到第二数组。第二数组的计算机语言描述如下:
Vector<SystemCall>systemcalllist;
第二数组存储了所有调用的系统函数的名称、对应的调用位置和所在模块名称。
需要特别说明的,本步骤通过将所有调用的系统函数、对应的调用位置和所在模块名称存储至第二数组,实现了便于后续创建代码段以及复制代码的有益效果。
如图4所示,步骤S130、修改导入表,以使导入表不导入任一系统函数;进一步地,修改所述程序PE导入表,具体包括:基于程序PE导入表的DOS头数据,获取程序PE导入表的NT头数据;基于程序PE导入表的NT头数据,获取程序PE导入表的起始地址;基于程序PE导入表的起始地址,将程序PE导入表的所有文件映射初始优先形实转换程序清空,具体的说,包括如下步骤:
步骤S131、获取程序PE导入表的DOS头数据,获取所述程序PE导入表的NT头数据;
具体的说,首先解析模块,获取程序PE导入表的DOS头数据,即PIMAGE_DOS_HEADER头数据。接着基PIMAGE_DOS_HEADER头数据获取程序PE导入表的NT头数据,即PIMAGE_NT_HEADERS头数据。
步骤S132、根据程序PE导入表的NT头数据,获取程序PE导入表的起始地址;具体的说,对现有模块的程序PE导入表进行修改基于PIMAGE_NT_HEADERS头数据可获取程序PE导入表在此模块的起始地址,计算机语言描述如下:OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;其中VirtualAddress则是程序PE导入表的起始地址。
需要特别说明的是,本步骤中通过DOS头数据和NT头数据获取导入表的起始地址,实现了准确查找的有益效果。
步骤S133、遍历所述述程序PE导入表的结果数据,并将所述程序PE导入表的结果数据中的dwFileOriFirstThunk数据值清空为零;
具体的说,将程序PE导入表的所有文件映射初始优先形实转换程序清空,即将程序PE导入表的数据结果中的dwFileOriFirstThunk数据清空。由于程序PE导入表存在多个dwOriFirstThunk,每个dwOriFirstThunk数据包含多个dwFileOriFirstThunk。进行遍历时,时通过判断当前的dwFileOriFirstThunk的值是否为0遍历的,本发明实施例将程序PE导入表的所有dwFileOriFirstThunk数据清空为0。本发明实施例不将整个程序PE导入表清空或者直接修改dwOriFirstThunk数据,否则系统加载该模块时会判定该模块是一个非法模块。
需要特别说明的是,本步骤通过将所有dwFileOriFirstThunk数据清空为0,从而程序在解析PE导入表时,发现dwFileOriFirstThunk数据为空则不会解析填充每个导入项。以使得导入表不导入任何系统函数,从而导入表中则不会暴露此模块调用了系统函数,从而在PE导入表的层面做到了系统函数调用的隐藏的有益效果。
如图5所示,步骤S140、在程序中创建代码段,将任一系统函数的代码复制到创建的代码段;进一步地,在获取了上述的第一数组和第二数组后,本发明实施例对数组进行遍历,基于系统函数的汇编代码创建代码段并将所有系统函数的汇编代码复制到创建的代码段中。
接下来进一步说明新增代码段长度的获取过程。
遍历数组,对所有系统函数的汇编代码长度求和获取新增代码段长度。具体的说包括如下步骤:
步骤S141、遍历第一数组,获取所有系统函数的代码长度;基于所有系统函数的代码长度,获取所有系统函数的代码长度;对所有系统函数的代码长度求和的得到新增代码段长度;
具体的说,第一数组中存储了所有系统函数、对应的函数名称和所在模块名称;第二数组中存储了所有系统函数的调用位置,所有调用的系统函数、对应的调用位置和所在模块名称。基于上述数组,可获取所有系统函数的代码,从而可以知道所有系统函数的汇编代码。
汇编代码是汇编语言编写成的代码。汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。
进一步地,遍历数组,对所有系统函数的汇编代码长度求和获取新增代码段长度,具体包括:遍历第一数组,获取所有系统函数的代码长度;基于所有系统函数的代码长度,获取所有系统函数的汇编代码长度;对所有系统函数的汇编代码长度求和,获取新增代码段长度。
遍历第一数组,获取所有系统函数在模块中的代码长度,根据在模块中的代码长度获取所有系统函数的汇编代码长度。代码和汇编代码是不同的,代码是存在于模块中的用高级计算机语言编写的,汇编代码是存在于内存中的用低级语言编写的。
对获取出来的所有系统函数的汇编代码长度求和,得到的汇编代码长度和为新增代码段长度。
需要特别说明的是,本步骤基于所有系统函数的汇编语言长度和获取新增代码段长度,实现了便于后续复制操作的有益效果。
步骤S142、遍历二数组,获取所有系统函数的内存地址和起始地址;
根据所有系统函数的内存地址和起始地址,通过函数头汇编代码特征与函数尾汇编代码特征,对应获取所有系统函数的结尾地址;
具体的说,先遍历第一数组,即上述实施例中创建的importlist,获取所有的系统函数,通过数组中存储的实例对象ImportItem获取所有系统函数、对应的函数名称和所在模块名称,具体计算机语言描述如下:
通过系统函数handle=LoadLibrary(“moduleName”);加载模块,通过系统函数address=GetProcAddress(handle,“functionName”);来获取系统函数,基于上述描述,获取所有系统函数在此模块的内存地址。基于所有系统函数在此模块的内存地址,获取所有系统函数的起始地址,具体计算公式如下:
Offset=address-handle;
其中,offset表示该系统函数在此模块中的相对偏移,address表示该系统函数的内存地址,handle表示该系统函数加载到内存的起始地址
其次,基于所有系统函数的内存地址和起始地址,通过上述实施例所述的函数头汇编代码特征与函数尾汇编代码特征,对应定位所有系统函数的结尾地址。需要说明的,基于所有系统函数的起始地址和结尾地址,可通过下式计算每一系统函数的汇编代码长度:
Length=address_end-Address;
其中,Length则是该系统函数的汇编代码长度,其中address_end表示该系统函数的结尾地址,Address表示该系统函数的起始地址。
需要说明的是,基于所有系统函数的内存地址和起始地址,实现了通过计算获取每个系统函数在此模块中的相对偏移的有益效果。
步骤S143、基于所有系统函数的起始地址和结尾地址,从每个系统函数头拷贝到系统函数尾,获取所有系统函数的汇编代码并复制到创建的代码段。
进一步地,将所有系统函数的汇编代码复制到创建的代码段,具体包括:遍历第一数组,获取所有系统函数的内存地址和起始地址;基于所有系统函数的内存地址和起始地址,通过函数头汇编代码特征与函数尾汇编代码特征,对应获取所有系统函数的结尾地址;基于所有系统函数的起始地址和结尾地址,获取所有系统函数的汇编代码并复制到创建的代码段;
在模块的程序中创建代码段,创建的代码段的长度为上述实施例中获取的新增代码段长度。实现了提供有效的新增代码段长度,避免增加系统占用的有益效果。
如图6所示,步骤S150、将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏。
步骤S151、读取重定位表格中的重定位数据;
基于读取到的重定位表格中的所有系统函数的重定位数据,获取更新的重定位数据并添加到创建的代码段在上述实施例中获取了新增代码段长度,接下来说明基于新增代码段长度实现系统函数调用隐藏的过程。
步骤S152、查找系统函数的汇编代码在重定位数据中的重定位项;
具体的说,对于某些系统函数来说,存在一些重定位的数据,系统模块重定位表格中有相应的重定位数据项。如果仅仅复制所有系统函数而没有把更新的重定位数据复制进来,则不能直接调用创建的代码段中的系统函数,需要在创建的代码段中对应添加更新的重定位数据;
需要特别说明的是,本实施例提供的步骤S152通过查找系统函数的汇编代码在重定位数据中的重定位项,实现了系统函数汇编代码与重定位表格形成对应关系的有益效果。
步骤S153、将查找到的重定位项复制到所述代码段,并将所述重定位项中的地址数据转换为代码段中的数据;
具体地,首先读取重定位表格中的任一重定位数据,然后查看每个复制到创建的代码段的系统函数中有对应的重定位数据,如果有,则在创建的代码段中添加更新的重定位数据,更新的重定位数据是进行了地址转换操作的重定位数据。
进一步地,基于任一系统函数的重定位数据获取任一系统函数的更新的重定位数据,具体为对于任一系统函数的重定位数据,其在原始系统模块的位置需要转换成创建的代码段的位置,通过以下计算机语言实现:
Offset=Address-startAddress;
其中,offset表示任一系统函数的重定位数据。Address表示系统模块当前代码中任一系统函数的重定位数据在文件中的偏移。startAddress表示系统模块当前文件的起始地址。
NewOffset=NewBaseAddress-NewHopeAddress+Offset;
其中任一系统函数的更新的重定位数据NewOffset是创建的代码段所属模块其真实加载的起始地址,NewHopeAddress表示创建的代码段所属模块默认为加载的模块基地址。
需要特别说明的是,本实施例提供了重定位数据与代码段中数据的转换公式,实现了将重定位数据修改并写入代码段的有益效果。
步骤S154、若所述重定位项中存在引入系统模块的全局数据或全局表格,将所述引入系统模块的全局数据或全局表格复制到代码段中,并重定位项中的地址数据转换为代码段中的数据;
具体的说,判断是否存在全局数据或全局表格,如果存在则将全局数据或是全局表格按照上述公式获取更新的全局数据或更新的全局表格,将其复制添加到创建的代码段中,并且,将通过上式获取的任一系统函数的更新的重定位数据也添加到创建的代码段中。所述重定位项中存在引入系统模块的全局数据或全局表格,将所述引入系统模块的全局数据或全局表格复制到代码段中,并重定位项中的地址数据转换为代码段中的数据。
需要特别说明的是,本实施例通过所述重定位项中存在引入系统模块的全局数据或全局表格,将所述引入系统模块的全局数据或全局表格复制到代码段中,并重定位项中的地址数据转换为代码段中的数据,实现了将所有系统函数复制到模块中的有益效果。
步骤S155、将代码段中调用系统函数的指令修改为调用新增加代码段中拷贝的系统函数。
具体的说,在将所有系统函数的汇编代码和更新的重定位数据添加到创建的代码段之后,需要进行调用指令的修改。具体地,修改调用指令,具体包括:将程序调用系统函数的指令修改为调用创建的代码段中的所有系统函数的指令。
上述实施例中已说明,程序调用系统函数的指令为Call xxxx;是通过调用call指令来直接调用系统函数。本发明实施例修改call指令中的xxxx的函数地址为创建的代码段中的系统函数内存地址。
需要特别说明的是,本发明通过对于调用指令call的修改,不会直接调用原系统模块中的系统函数,实现了在创建的代码段中调用系统函数,使得所有功能都是在这一模块中完成实现了有效隐藏系统函数调用的有益效果。
需要说明的是,程序开发人员按照现有模式来开发程序,如果需要调用系统函数还是按照现有方式来调用系统函数。开发完成后,实现本发明实施例中所述的隐藏系统函数调用的方法,将程序进行编译后得到最终发布的程序软件。从而本发明实施例不对开发程序员造成困扰,本发明实施例所述隐藏系统函数调用的方法是对程序开发人员是透明的。
上面对本申请实施例中设置隐藏系统函数调用的方法进行了描述,下面对本申请实施例中的具有隐藏系统函数调用功能的装置进行描述。
图7为本发明隐藏系统函数调用的装置实施例的模块图,如图7所示,本发明实施例中还提供了一种具有隐藏系统函数调用功能的装置的一个实施例,该装置包括:获取模块210、遍历模块220、修改模块230、创建模块240和调用模块250。获取模块210用于通过解析程序导入表,获取任一系统导入函数;遍历模块220用于遍历程序,获取任一函数和调用所述任一函数的内存地址,并在所述任一函数中筛选出系统函数;修改模块230用于修改所述导入表,以使所述导入表不导入任一系统函数;创建模块240用于在程序中创建代码段,将任一系统函数的代码复制到创建的代码段;调用模块250用于将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏。
图7从模块化功能实体的角度对本申请实施例中的隐藏系统函数调用功能的装置进行了描述,下面从硬件处理的角度对本申请实施例中的隐藏系统函数调用功能的装置进行详细描述,图8为本发明实施例提供的具有隐藏系统函数调用功能的装置的硬件结构示意图;请参阅图8;本发明实施例中的推荐具有隐藏系统函数调用功能的装置300为一个实施例,包括:
输入装置301、输出装置302、处理器303和存储器304(其中处理器303的数量可以一个或多个,图3中以一个处理器303为例)。在本发明的一些实施例中,输入装置301、输出装置302、处理器303和存储器304可通过总线或其它方式连接,其中,图3中以通过总线连接为例。
其中,通过调用存储器304存储的操作指令,处理器303,用于执行如下步骤:
通过解析导入表,获取任一系统函数;
遍历程序模块,获取任一函数和调用所述任一函数的内存地址,并在所述任一函数中筛选出系统函数;
修改所述导入表,以使所述导入表不导入任一系统函数;
并在程序中创建代码段,将任一系统函数的代码复制到所述代码段;
并将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏。
通过调用存储器304存储的操作指令,处理器303,还用于执行图1对应的实施例中的任一方式。
图9为本发明实施例提供的一种可能的电子设备的实施例示意图,如图9所示。
在另一实施例中,本发明还提供了一种电子设备,包括存储器410、处理器420及存储在存储器420上并可在处理器420上运行的计算机程序411,处理器420执行计算机程序411时实现以下步骤。
通过解析导入表,获取任一系统函数;
遍历程序模块,获取任一函数和调用所述任一函数的内存地址,并在所述任一函数中筛选出系统函数;
修改所述导入表,以使所述导入表不导入任一系统函数;
并在程序中创建代码段,将任一系统函数的代码复制到所述代码段;
并将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏。
在具体实施过程中,处理器420执行计算机程序411时,可以实现图1对应的实施例中任一实施方式。
由于本实施例所介绍的电子设备为实施本发明实施例中一种具有隐藏系统函数调用功能的装置所采用的设备,故而基于本发明实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本发明实施例中的方法不再详细介绍,只要本领域所属技术人员实施本发明实施例中的方法所采用的设备,都属于本申请所欲保护的范围。
图10为本发明实施例提供的一种可能的计算机可读存储介质的实施例示意图,请参阅图10。
如图5所示,本实施例提供了一种计算机可读存储介质500,其上存储有计算机程序511,该计算机程序511被处理器执行时实现如下步骤:
通过解析导入表,获取任一系统函数;
遍历程序模块,获取任一函数和调用所述任一函数的内存地址,并在所述任一函数中筛选出系统函数;
修改所述导入表,以使所述导入表不导入任一系统函数;
并在程序中创建代码段,将任一系统函数的代码复制到所述代码段;
并将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏。
在具体实施过程中,该计算机程序511被处理器执行时可以实现图1对应的实施例中任一实施方式。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,当计算机软件指令在处理设备上运行时,使得处理设备执行如图1对应实施例中的隐藏系统函数调用的方法中的流程。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例提供的隐藏系统函数调用的方法和相关设备,具有下列有益效果:通过遍历数组获取新增代码段长度创建代码段,将系统函数汇编代码复制到创建的代码段,在修改了调用指令之后能够直接从创建的代码段中调用系统函数,对于注册表操作等必须调用系统函数才能实现的功能,所有功能都是在程序模块中完成,不会对外暴露系统函数的调用,从而以牺牲程序的包的大小的方式换取安全性,实现核心代码中无call调用系统函数。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (10)

1.一种在程序核心代码中隐藏系统函数调用的方法,其特征在于,包括:
通过解析导入表,获取任一系统函数;
遍历程序模块,获取任一函数和调用所述任一函数的内存地址,并在所述任一函数中筛选出系统函数;
修改所述导入表,以使所述导入表不导入任一系统函数;
并在程序中创建代码段,将任一系统函数的代码复制到所述代码段;
并将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏。
2.根据权利要求1所述的在程序核心代码中隐藏系统函数调用的方法,其特征在于,还包括:
根据所述任一导入函数,建立导入函数列表;
建立多个结构对象以对应存储每个导入函数对应的导入项;其中,所述导入项包括系统的模块名称和模块的函数名称、导入函数的内存地址;
建立第一数组,以存储所述结构对象。
3.根据权利要求2所述的在程序核心代码中隐藏系统函数调用的方法,其特征在于,所述遍历程序模块获取任一函数和获取调用所述任一函数的内存地址,具体包括:
遍历所述遍历程序模块,根据函数头汇编代码特征和函数尾汇编代码特征查找出任一函数;
获取所述任一函数的函数地址,并建立第二数组,以存储所述任一函数的函数地址。
4.根据权利要求3所述的程序核心代码中隐藏系统函数调用的方法,其特征在于,所述在所述任一函数中筛选出系统函数,具体包括:
标记所述任一函数中的任一调用指令,并获得内存地址,其中,所述内存地址为所述调用指令中包含的地址代码
根据所述内存地址计算真实函数地址;
遍历所述第二数组,若所述内存地址与所述第二数组中的函数地址匹配,则判定其对应的函数为系统函数;
建立第三数组,记录所述筛选出的系统函数的真实函数地址、所述系统函数对应的统的模块名称和模块的函数名称;
其中,所述真实函数地址计算公式为:
Real dwoffset=dwoffset-DWORD dwoffset;
其中,Real dwoffset为真实函数地址,dwoffset为内存地址,DWORD dwoffset=*(DWORD*)(call_address+1);DWORD dwoffset为偏移字节,*(DWORD*)(call_address+1)为当前指令在内存中的地址占用字节长度。
5.根据权利要求4所述的在程序核心代码中隐藏系统函数调用的方法,其特征在于,所述修改所述导入表,以使所述导入表不导入任一系统函数,具体包括:
获取所述程序PE导入表的DOS头数据,获取所述程序PE导入表的NT头数据;
根据所述程序PE导入表的NT头数据,获取所述程序PE导入表的起始地址;
遍历所述述程序PE导入表的结果数据,并将所述程序PE导入表的结果数据中的dwFileOriFirstThunk数据值清空为零。
6.根据权利要求5所述在程序核心代码中隐藏系统函数调用的方法,其特征在于,所述并在程序中创建代码段,将任一系统函数的代码复制到创建的代码段,具体包括:
遍历所述第三数组,获取所有系统函数的代码长度;
基于所有系统函数的代码长度,获取所有系统函数的代码长度;
对所有系统函数的代码长度求和的得到新增代码段长度;
根据所述新增代码长度,创建代码段;
遍历所述一数组,获取系统模块名称和函数名称并加载对应的模块;
并通过系统函数获取所有系统函数在模块中的内存地址和起始地址,进而得到所述系统函数在所述模块中的偏移;
并通过函数头汇编代码特征与函数尾汇编代码特征,计算出函数的汇编代码长度;
所有系统函数的汇编代码复制到所述创建代码段。
7.根据权利要求6所述在程序核心代码中隐藏系统函数调用的方法,其特征在于,所述将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,具体包括:
读取重定位表格中的重定位数据;
查找所述系统函数的汇编代码在所述重定位数据中的重定位项;
将查找到的重定位项复制到所述代码段,并将所述重定位项中的地址数据转换为代码段中的数据;
若所述重定位项中存在引入系统模块的全局数据或全局表格,将所述引入系统模块的全局数据或全局表格复制到所述代码段中,并重定位项中的地址数据转换为代码段中的数据;
将所述代码段中调用系统函数的指令修改为调用新增加代码段中拷贝的系统函数。
8.一种在程序核心代码中隐藏系统函数调用的装置,其特征在于,包括:
获取模块,其用于通过解析程序导入表,获取任一系统导入函数;
遍历模块,其用于遍历程序,获取任一函数和调用所述任一函数的内存地址,并在所述任一函数中筛选出系统函数;
修改模块,其用于修改所述导入表,以使所述导入表不导入任一系统函数;
创建模块,其用于在程序中创建代码段,将任一系统函数的代码复制到创建的代码段;
调用模块,其用于将调用系统函数的指令修改为调用所述创建的代码段中的任一系统函数的指令,以实现系统函数调用的隐藏。
9.一种电子设备,包括应用处理器和存储器,其特征在于,所述处理器用于实现所述存储器中存储得计算机管理程序式时实现如权利要求1-8中任一项所述的隐藏系统函数调用的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机管理类程序,其特征在于,所述计算机管理类程序被处理器执行时实现如权利要求1-8中任意一项所述的隐藏系统函数调用的方法的步骤。
CN202110346962.2A 2021-03-31 2021-03-31 在程序核心代码中隐藏系统函数调用的方法、装置和介质 Pending CN115145571A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110346962.2A CN115145571A (zh) 2021-03-31 2021-03-31 在程序核心代码中隐藏系统函数调用的方法、装置和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110346962.2A CN115145571A (zh) 2021-03-31 2021-03-31 在程序核心代码中隐藏系统函数调用的方法、装置和介质

Publications (1)

Publication Number Publication Date
CN115145571A true CN115145571A (zh) 2022-10-04

Family

ID=83403691

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110346962.2A Pending CN115145571A (zh) 2021-03-31 2021-03-31 在程序核心代码中隐藏系统函数调用的方法、装置和介质

Country Status (1)

Country Link
CN (1) CN115145571A (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5960197A (en) * 1996-05-09 1999-09-28 Sun Microsystems, Inc. Compiler dispatch function for object-oriented C
US20020092003A1 (en) * 2000-11-29 2002-07-11 Brad Calder Method and process for the rewriting of binaries to intercept system calls in a secure execution environment
US20020138824A1 (en) * 2000-11-29 2002-09-26 Richard Shann Assembling an object code module
US20030023964A1 (en) * 2001-07-26 2003-01-30 Gowri Rajaram System and method for compacting field upgradeable wireless communication device software code sections
CN101414338A (zh) * 2007-10-15 2009-04-22 北京瑞星国际软件有限公司 一种绕过挂钩的方法和装置
US20110035731A1 (en) * 2009-07-29 2011-02-10 Tomislav Pericin Automated Unpacking of Portable Executable Files
CN105808256A (zh) * 2016-03-08 2016-07-27 武汉斗鱼网络科技有限公司 一种构造合法堆栈返回值绕过函数调用检测的方法与系统
CN106897588A (zh) * 2017-03-15 2017-06-27 北京深思数盾科技股份有限公司 一种标签函数的处理方法及装置
US20170206357A1 (en) * 2014-11-17 2017-07-20 Morphisec Information Security Ltd. Malicious code protection for computer systems based on process modification
CN109145638A (zh) * 2018-07-20 2019-01-04 武汉斗鱼网络科技有限公司 一种获取自加载模块函数的方法及装置

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5960197A (en) * 1996-05-09 1999-09-28 Sun Microsystems, Inc. Compiler dispatch function for object-oriented C
US20020092003A1 (en) * 2000-11-29 2002-07-11 Brad Calder Method and process for the rewriting of binaries to intercept system calls in a secure execution environment
US20020138824A1 (en) * 2000-11-29 2002-09-26 Richard Shann Assembling an object code module
US20030023964A1 (en) * 2001-07-26 2003-01-30 Gowri Rajaram System and method for compacting field upgradeable wireless communication device software code sections
CN101414338A (zh) * 2007-10-15 2009-04-22 北京瑞星国际软件有限公司 一种绕过挂钩的方法和装置
US20110035731A1 (en) * 2009-07-29 2011-02-10 Tomislav Pericin Automated Unpacking of Portable Executable Files
US20170206357A1 (en) * 2014-11-17 2017-07-20 Morphisec Information Security Ltd. Malicious code protection for computer systems based on process modification
CN105808256A (zh) * 2016-03-08 2016-07-27 武汉斗鱼网络科技有限公司 一种构造合法堆栈返回值绕过函数调用检测的方法与系统
CN106897588A (zh) * 2017-03-15 2017-06-27 北京深思数盾科技股份有限公司 一种标签函数的处理方法及装置
CN109145638A (zh) * 2018-07-20 2019-01-04 武汉斗鱼网络科技有限公司 一种获取自加载模块函数的方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
佚名: "浅谈IAT加密原理及过程", pages 1 - 31, Retrieved from the Internet <URL:https://www.icode9.com/content-4-803149.html> *

Similar Documents

Publication Publication Date Title
US10198250B1 (en) Partitioning based migration of systems to container and microservice based platforms
CN111428462A (zh) 通讯协议模板构建的方法及终端设备
US11016744B2 (en) Context information based on type of routine being called
US10095493B2 (en) Call sequence generation based on type of routine
US10140133B2 (en) Marking external sibling caller routines
US10949221B2 (en) Executing instructions to store context information based on routine to be executed
CN114089975B (zh) 计算软件的扩展方法、装置、非易失性存储介质及处理器
US10241769B2 (en) Marking sibling caller routines
US10180827B2 (en) Suppressing storing of context information
EP3867746B1 (en) User interface resource file optimization
CN115145571A (zh) 在程序核心代码中隐藏系统函数调用的方法、装置和介质
CN114706586A (zh) 代码编译、代码运行方法、装置、计算机设备及存储介质
CN110187897B (zh) 一种固件升级方法及装置
CN110327626B (zh) 虚拟服务器创建方法及装置
CN111694729A (zh) 应用测试方法、装置、电子设备和计算机可读介质
WO2024069772A1 (ja) 解析装置、解析方法および解析プログラム
CN116700840B (zh) 文件执行方法、装置、电子设备及可读存储介质
CN112765676A (zh) 一种智能合约执行方法、智能合约执行装置及节点设备
CN113495728A (zh) 依赖关系确定方法、装置、电子设备及介质
CN116028122A (zh) 基于处理器的设备处理方法及设备
CN116909704A (zh) 应用的运行方法、装置、存储介质及电子装置
CN116679912A (zh) 代码生成方法、装置、设备、存储介质及计算机程序
CN113495727A (zh) 业务组件开发方法、装置、电子设备及介质
CN113946347A (zh) 函数调用的检测方法、装置、电子设备及可读介质
CN115576571A (zh) Pc机os系统安装检查方法、系统、计算机设备及存储介质

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