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