CN109214179B - 一种程序模块安全检测方法及装置 - Google Patents
一种程序模块安全检测方法及装置 Download PDFInfo
- Publication number
- CN109214179B CN109214179B CN201710524905.2A CN201710524905A CN109214179B CN 109214179 B CN109214179 B CN 109214179B CN 201710524905 A CN201710524905 A CN 201710524905A CN 109214179 B CN109214179 B CN 109214179B
- Authority
- CN
- China
- Prior art keywords
- function
- character string
- program module
- list
- import
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims description 17
- 230000008676 import Effects 0.000 claims abstract description 169
- 238000000034 method Methods 0.000 claims abstract description 29
- 230000006870 function Effects 0.000 claims description 301
- 238000004590 computer program Methods 0.000 claims description 15
- 238000004422 calculation algorithm Methods 0.000 claims description 11
- 238000004458 analytical method Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 11
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 241000700605 Viruses Species 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种程序模块安全检测方法及装置,从目标程序模块中解析出导入函数名称列表和字符串列表;判断导入函数名称列表中是否存在与日志输出相关的导入函数,如果存在,生成第一判断结果,否则生成第二判断结果;判断导入函数名称列表中是否存在预定核心函数,如果存在,生成第三判断结果,否则生成第四判断结果;判断字符串列表中是否包含预定字符串,如果包含,生成第五判断结果,否则生成第六判断结果;如果生成第一判断结果、第三判断结果、第五判断结果中的至少一种判断结果,则确定目标程序模块不安全。本发明解决了现有技术导致对应用程序的组件检测可靠性不高的技术问题。
Description
技术领域
本发明涉及应用组件的安全检测领域,尤其涉及一种程序模块安全检测方法。
背景技术
目前,对于应用程序来说,会进行组件化开发,每一个应用程序的组件是一个独立的程序模块,使用组件化可以使得组件更易于测试及更新。同时也会把一些功能相对于独立的或者是基础功能独立的使用一个程序模块,其他模块则可以通过调用该基础模块的功能来完成更为复杂的功能。而对于一些比较重要的程序模块则是需要对其开发的代码进行最终的安全功能测试。查看其是否有存在一些不安全的漏洞等。例如对于登录模块,其对用户的密码信息的保护是比较重要的,不能轻易的被病毒盗取其账户和密码信息。查看比较重要的安全模块是否存在安全漏洞。
目前,从源代码级别对组件进行检测,但是,由于有的时候使用的是其他人员开发的模块,则获取不到源代码,导致对应用程序的组件检测可靠性不高。
发明内容
本发明实施例通过提供一种程序模块安全检测方法及装置,解决了现有技术导致对应用程序的组件检测可靠性不高的技术问题。
第一方面,本发明实施例提供的一种程序模块安全检测方法,包括:
从目标程序模块中解析出导入函数名称列表和字符串列表,其中,所述导入函数名称列表包含导入至所述目标程序模块中的***函数的名称,所述字符串列表中包含所述目标程序模块中的所有字符串;
判断所述导入函数名称列表中是否存在与日志输出相关的导入函数,如果判断出所述导入函数名称列表中存在与所述日志输出相关的导入函数,生成第一判断结果,否则生成第二判断结果;
判断所述导入函数名称列表中是否存在预定核心函数,如果判断出所述导入函数名称列表中存在所述预定核心函数,生成第三判断结果,否则生成第四判断结果;
判断所述字符串列表中是否包含预定字符串,如果判断出所述字符串列表中包含所述预定字符串,生成第五判断结果,否则生成第六判断结果;
如果生成所述第一判断结果、所述第三判断结果、所述第五判断结果中的至少一种判断结果,则确定所述目标程序模块不安全。
可选的,所述从目标程序模块中解析出导入函数名称列表和字符串列表,包括:
将所述目标程序模块的模块头部信息加载至内存中,其中,所述模块头部信息中包括对所述目标程序模块中所存在的各个段信息的索引;
根据所述索引,将所述各个段信息加载至所述内存中;
从所述各个段信息中,提取所述各个段信息的数据内容;
从所述各个段信息的数据内容中,提取所述导入函数名称列表和所述字符串列表。
可选的,如果所述日志输出相关的导入函数为用于格式化输出字符串至终端的格式化输出函数,所述判断所述导入函数名称列表中是否存在与日志输出相关的导入函数,包括:
从所述导入函数名称列表中读取第一个导入函数的名称;
判断当前读取到的导入函数的名称是否为所述格式化输出函数的名称;
如果是,生成所述第一判断结果,否则,继续从所述导入函数名称列表中读取下一个导入函数的名称,并返回所述判断当前读取到的导入函数的名称是否为所述格式化输出函数的名称的步骤;
如果从所述导入函数名称列表读取到的最后一个导入函数的名称不是所述格式化输出函数的名称,则生成所述第二判断结果。
可选的,所述预定核心函数包括多个,所述判断所述导入函数名称列表中是否存在预定核心函数,以生成第二判断结果,包括:
从所述导入函数名称列表中读取第一个导入函数的名称;
判断当前读取到的导入函数的名称是否属于所述预定核心函数;
如果是,生成所述第三判断结果,否则,继续从所述导入函数名称列表中读取下一个导入函数的名称,并返回所述判断当前读取到的导入函数的名称是否属于所述预定核心函数的步骤;
如果从所述导入函数名称列表读取到的最后一个导入函数的名称不属于所述预定核心函数,则生成所述第四判断结果。
可选的,所述预定核心函数,包括:用于格式化输出字符串至缓冲区的函数、用于返回字符串长度的函数中的一种或多种。
可选的,所述判断所述字符串列表中是否包含预定字符串,包括:
从所述预定字符串中读取第一个字符串;
判断当前读取到的字符串是否属于所述预定字符串;
如果是,生成所述第五判断结果,否则,继续从所述字符串列表中读取下一个字符串,并返回所述判断当前读取到的字符串是否属于所述预定字符串的步骤;
如果从所述字符串列表中读取到的最后一个字符串不属于所述预定字符串,则生成所述第六判断结果。
可选的,所述预定字符串,包括:标示密码的字符串、标示密钥的字符串、标示加密操作的字符串、标示解密操作的字符串、标示加密标准的字符串、标示加密算法类型的字符串中的一种或多种。
第二方面,本发明实施例提供了一种程序模块安全检测装置,包括:
解析单元,用于从目标程序模块中解析出导入函数名称列表和字符串列表,其中,所述导入函数名称列表包含导入至所述目标程序模块中的***函数的名称,所述字符串列表中包含所述目标程序模块中的所有字符串;
日志输出判断单元,用于判断所述导入函数名称列表中是否存在与日志输出相关的导入函数,如果判断出所述导入函数名称列表中存在与所述日志输出相关的导入函数,则生成第一判断结果,否则生成第二判断结果;
核心函数判断单元,用于判断所述导入函数名称列表中是否存在预定核心函数,如果判断出所述导入函数名称列表中存在所述预定核心函数,则生成第三判断结果,否则生成第四判断结果;
字符串判断单元,用于判断所述字符串列表中是否包含预定字符串,如果判断出所述字符串列表中包含所述预定字符串,则生成第五判断结果,否则生成第六判断结果;
安全性确定单元,用于如果生成所述第一判断结果、所述第三判断结果、所述第五判断结果中的至少一种判断结果,则确定所述目标程序模块不安全。
可选的,所述解析单元,具体用于:
将所述目标程序模块的模块头部信息加载至内存中,其中,所述模块头部信息中包括对所述目标程序模块中所存在的各个段信息的索引;
根据所述索引,将所述各个段信息加载至所述内存中;
从所述各个段信息中,提取所述各个段信息的数据内容;
从所述各个段信息的数据内容中,提取所述导入函数名称列表和所述字符串列表。
可选的,如果所述日志输出相关的导入函数为用于格式化输出字符串至终端的格式化输出函数,所述日志输出判断单元,具体用于:
从所述导入函数名称列表中读取第一个导入函数的名称;
判断当前读取到的导入函数的名称是否为所述格式化输出函数的名称;
如果是,生成所述第一判断结果;否则,继续从所述导入函数名称列表中读取下一个导入函数的名称,并返回所述判断当前读取到的导入函数的名称是否为所述格式化输出函数的名称的步骤;
如果从所述导入函数名称列表读取到的最后一个导入函数的名称不是所述格式化输出函数的名称,则生成所述第二判断结果。
可选的,所述预定核心函数包括多个,所述核心函数判断单元,具体用于:
从所述导入函数名称列表中读取第一个导入函数的名称;
判断当前读取到的导入函数的名称是否属于所述预定核心函数;
如果是,生成所述第三判断结果;否则,继续从所述导入函数名称列表中读取下一个导入函数的名称,并返回所述判断当前读取到的导入函数的名称是否属于所述预定核心函数的步骤;
如果从所述导入函数名称列表读取到的最后一个导入函数的名称不属于所述预定核心函数,则生成所述第四判断结果。
可选的,所述预定核心函数,包括:用于格式化输出字符串至缓冲区的函数、用于返回字符串长度的函数中的一种或多种。
可选的,所述字符串判断单元,包括:
从所述预定字符串中读取第一个字符串;
判断当前读取到的字符串是否属于所述预定字符串;
如果是,生成所述第五判断结果;否则,继续从所述字符串列表中读取下一个字符串,并返回所述判断当前读取到的字符串是否属于所述预定字符串的步骤;
如果从所述字符串列表中读取到的最后一个字符串不属于所述预定字符串,则生成所述第六判断结果。
可选的,所述预定字符串,包括:标示密码的字符串、标示密钥的字符串、标示加密操作的字符串、标示解密操作的字符串、标示加密标准的字符串、标示加密算法类型的字符串中的一种或多种。
第三方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面任一实施方式所述的步骤。
第四方面,本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面中任一实施方式所述的步骤。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
由于从目标程序模块中解析出导入函数名称列表和字符串列表;判断导入函数名称列表中是否有日志输出相关的导入函数和预定核心函数,以及判断字符串列表中是否包含预定字符串,以判断结果判断目标程序模块是否安全,是在已经编译好、甚至最终发布的目标程序模块进行检测,对于开发人员也是透明的,同时也可以在没有该程序模块的源代码的情况下进行检测,不需要获取源代码,从而实现了对已经编译好、发布的程序模块进行检测更方便、更可靠。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的程序模块安全检测方法的流程图;
图2为本发明实施例提供的程序模块安全检测装置的结构示意图;
图3为本发明实施例提供的计算机可读存储介质的结构示意图;
图4为本发明实施例提供的计算机设备的结构示意图。
具体实施方式
本发明实施例通过提供一种程序模块安全检测方法及装置,解决了现有技术导致对应用程序的组件检测可靠性不高的技术问题。
本发明实施例的技术方案为解决上述技术问题,总体思路如下:
从目标程序模块中解析出导入函数名称列表和字符串列表;判断导入函数名称列表中是否有日志输出相关的导入函数和预定核心函数,以及判断字符串列表中是否包含预定字符串,以判断结果确定目标程序模块是否安全。
通过上述技术方案,是在已经编译好、甚至最终发布的目标程序模块进行检测,对于开发人员也是透明的,同时也可以在没有该程序模块的源代码的情况下进行检测,不需要获取源代码,从而实现了对已经编译好、发布的程序模块进行检测更方便、更可靠。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
参考图1所示,本发明实施例提供的一种程序模块安全检测方法,包括:
S101、从目标程序模块中解析出导入函数名称列表和字符串列表,其中,导入函数名称列表包含导入至目标程序模块中的***函数的名称,字符串列表中包含目标程序模块中的所有字符串。
需要说明的是,对于PC客户端,如果为Windows操作***,目标程序模块为DLL文件,如果为linux操作***,目标程序模块为SO文件。需要说明的是,后文所涉及的代码级举例,是以目标程序模块是基于Windows操作***的DLL文件来举例及说明的,但是本发明不限于只能基于Windows操作***的DLL文件实现。
首先是模块头部信息中包括对各个段信息的索引,从而可以获取到模块头部信息之后的每个段信息。由于一个模块文件是有头部信息和多个段信息组合起来的,并且各个段之间是有间隔且间隔大小不一样,所以加载目标程序模块到内存中需要按照其文件格式来依次读入模块头部信息和模块头部信息之后的各个段信息。
在一实施例中,S101具体包括如下多个子步骤,以得到导入函数名称列表和字符串列表:
首先,执行S1011、将目标程序模块的模块头部信息加载至内存中,其中,模块头部信息中包括对目标程序模块中所存在的各个段信息的索引。
举例来讲,步骤S1011中:首先调用***函数CreateFile来打开要加载的目标程序模块,其中参数Name则是目标程序模块的名称,其他参数本文省略。具体实现如下:
HANDLE hFile=CreateFile(Name,GENERIC_READ);
然后,调用***函数ReadFile,以读取目标程序模块的模块头部信息到变量dosHeader中。具体实现可以如下
IMAGE_DOS_HEADER dosHeader;
ReadFile(hFile,&dosHeader);
S1012、根据索引,将各个段信息加载至内存中。
具体来讲:通过模块头部信息可以获取到段数目、该模块头部的数据大小、段的头部信息。
S1013、从各个段信息中,提取各个段信息的数据内容。
有了各个段信息,则可以获取到各个段的名称,大小等,从而可以读取各个段的数据内容到内存中,具体实现如下:
S1014、从各个段信息的数据内容中,提取导入函数名称列表和字符串列表。
需要说明的是,各个段包括导入段,从各个段信息的数据内容中获取导入段的表格信息,在模块头部信息中有导入段的起始地址在该目标程序模块的偏移值,从而可以获取到导入段的表格信息。再遍历该导入段的表格信息,以获取到该导入段中所有导入函数的信息。
具体实现可以如下:
DWORD dwIat=pNtHeader->OptionalHeader.DataDirectory
[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
其中,dwIat是导入段在该目标程序模块的偏移值。
更具体来讲,通过导入段在该目标程序模块的偏移值和目标程序模块的起始值确定出导入段的表格信息。然后通过导入段的格式则可以枚举出其包含的所有导入函数的名称的导入函数名称列表,具体实现可以如下:
PIMAGE_IMPORT_DESCRIPTOR pImport=Start+dwIat;
通过偏移值和目标程序模块的起始值得出导入段的表格信息。然后通过该导入段的格式,枚举出该导入段包含的所有导入函数的名称的导入函数名称列表。
根据模块头部信息包括数据段的起始地址在该目标程序模块的偏移值,获取到数据段的信息,去遍历所有数据段中的常量,以得到包括该目标程序模块中的所有常量的字符串列表。
在S101之后,再执行步骤S102、S103、S104。在具体实施过程中,可以同时执行、也可以分先后执行。
S102、判断导入函数名称列表中是否存在与日志输出相关的导入函数,如果判断出导入函数名称列表中存在与日志输出相关的导入函数,生成第一判断结果,否则生成第二判断结果。
具体的,如果调用用于格式化输出字符串至终端的格式化输出函数打印日志,判断导入函数名称列表中是否有用于格式化输出字符串至终端的格式化输出函数的名称。
举例来讲,格式化输出函数可以为printf函数,在其他操作***中,格式化输出函数为其他具体的函数。
在一实施例中,判断导入函数名称列表中是否有用于格式化输出字符串至终端的格式化输出函数的名称的具体实施流程,包括如下步骤S1021~S1024:
S1021、从导入函数名称列表中读取第一个导入函数的名称;
S1022、判断当前读取到的导入函数的名称是否为格式化输出函数的名称。
需要说明的是,当前读取到的导入函数的名称在不同次是不同的,依次为导入函数名称列表中的顺序的第一个导入函数的名称至最后一个导入函数的名称。
S1023、如果是,生成第一判断结果,并结束读取;否则,继续从导入函数名称列表中读取下一个导入函数的名称,并返回步骤S1022;
S1024、如果从导入函数名称列表读取到的最后一个导入函数的名称不是格式化输出函数的名称,则生成第二判断结果。
在一实施例中,如果生成第一判断结果,本实施例还包括删除格式化输出函数的步骤,以防止打印日志和输出调试信息,从而来提高该程序模块的安全性。
对于目标程序模块,如果会打印日志信息或者调试信息,黑客通过日志信息或调试信息可以分析目标程序模块的功能及定位目标程序模块的关键代码。例如,在应用程序中读取一个文件时,如果读取不到该文件则会打印日志说明该文件不存在,那么通过这条日志黑客则可以知道该模块会去读取的文件,例如,对具体的数据进行HASH或者加密会打印开始信息,如打印的开始信息为调用MD5计算HASH,那么通过日志快速定位到该应用程序的MD5计算逻辑。通过执行S102来进行安全检测,能够检测出相关的漏洞。
S103、判断导入函数名称列表中是否存在预定核心函数,如果判断出导入函数名称列表中存在预定核心函数,生成第三判断结果,否则生成第四判断结果。
需要说明的是,预定核心函数可以为一个或包括多个。
在一实施例中,S103包括如下步骤S1031~S1034:
S1031、从导入函数名称列表中读取第一个导入函数的名称;
S1032、判断当前读取到的导入函数的名称是否属于预定核心函数。
需要说明的是,S1032中所指当前读取到的导入函数的名称在不同次是不同的,依次为导入函数名称列表中的顺序的第一个导入函数的名称至最后一个导入函数的名称。
S1033、如果是,生成第三判断结果并结束读取;否则,继续从导入函数名称列表中读取下一个导入函数的名称,并返回步骤S1033;
S1034、如果从导入函数名称列表读取到的最后一个导入函数的名称不属于预定核心函数,则生成第四判断结果。
在本实施例中,预定核心函数包括:用于格式化输出字符串至缓冲区的函数以及用于返回字符串长度的函数中的一种或多种。格式化输出字符串至缓冲区的函数包括snprintf函数、sprintf函数;返回字符串长度的函数为Strlen函数。
更具体来讲,对于目标程序模块中的核心函数,比如:用于计算视频流鉴权的KEY值,以对数据进行加密的函数,如果该对数据进行加密的函数调用了***函数,就能够通过HOOK工具对***函数进行挂钩,从而可以从挂钩处获取到***函数的调用数据。举例说明如下:
假设先存在一个函数是用于计算视频流地址的鉴权的KEY值。
其组成是由客户端私钥的SKEY,客户端的IP,客户端的用户Token一起计算MD5值的结果。此算法中最终要的信息就是对客户端私钥的SKEY的保护,可能会使用各种加密解密算法来进行保护。最终在其最终计算鉴权KEY值时如果调用了***函数,则可以轻易的被黑客通过HOOK工具而获取,从而导致前期的保护功能失效,所以不安全。
具体实现方法则是去从步骤(1)中获取到的导入函数列表查找其中是否存在这些字符串函数,如果存在则认为是不安全的。同时还可以在其中添加其他的不安全的函数作为检测对象,也可以添加自认为的不安全的函数。其具体实现都是从模块的导入函数中去查找,如果找到则说明该模块有使用该函数。
在一优选的实施例中,还可以在预定核心函数中添加更多不安全函数。对应添加的不安全函数,从导入函数名称列表中查找,如果存在,则说明目标程序模块有使用该不安全函数。
在一优选实施例中,当前从导入函数名称列表中读取,确定目标程序模块中存在属于预定核心函数的函数,则从预编写核心函数库中匹配出对应的未调用***函数的核心函数对其替换。
在一优选实施例中,如果生成第三判断结果,则输出提醒信息,以提醒存在预定核心函数。
S104、判断字符串列表中是否包含预定字符串,如果判断出字符串列表中包含预定字符串,生成第五判断结果,否则生成第六判断结果。
具体的,预定字符串可以为单个字符串,也可以为多个字符串的集合。在一实施例中,S104包括如下步骤S1041~S1044:
S1041、从字符串列表中读取第一个字符串;
S1042、判断当前读取到的字符串是否属于预定字符串;
S1043、如果是,生成第五判断结果;否则,继续从字符串列表中读取下一个字符串,并返回判断当前读取到的字符串是否属于预定字符串的步骤;
S1044、如果从字符串列表中读取到的最后一个字符串不属于预定字符串,则生成第六判断结果。
在一具体实施例中,预定字符串包括如下一种或多种:
标示密码的字符串“password”、标示密钥的字符串“key”、标示加密操作的字符串“encrypt”、标示解密操作的字符串“decrypt”、标示加密标准的字符串如“MD5”、标示加密算法类型的字符串,如“DES”。
字符串中出现了诸如:“password”、“key”、“encrypt”、“decrypt”、“MD5”、“DES”、“AES”这些信息,则会包括密码、加解密的KEY值、加密函数的名称、解密函数的名称、具体的HASH算法的名称、具体的加解密算法的名称等。会降低其安全性。例如:加密算法名称“AES”,指示了目标程序模块中使用AES加密算法进行加密。
进一步的,如果检测到这些信息则可以告知该模块存在一些字符的风险,从而进行进一步的修改保障最终的模块的安全性。
在S102~S104均执行完之后,接着执行S105:如果生成第一判断结果、第三判断结果、第五判断结果中的至少一种判断结果,则确定目标程序模块不安全。
基于同一发明构思,本发明实施例提供了一种程序模块安全检测装置,参考图2所示,该程序模块安全检测装置包括:
解析单元201,用于从目标程序模块中解析出导入函数名称列表和字符串列表,其中,所述导入函数名称列表包含导入至所述目标程序模块中的***函数的名称,所述字符串列表中包含所述目标程序模块中的所有字符串;
日志输出判断单元202,用于判断所述导入函数名称列表中是否存在与日志输出相关的导入函数,如果判断出所述导入函数名称列表中存在与所述日志输出相关的导入函数,生成第一判断结果,否则生成第二判断结果;
核心函数判断单元203,用于判断所述导入函数名称列表中是否存在预定核心函数,如果判断出所述导入函数名称列表中存在所述预定核心函数,生成第三判断结果,否则生成第四判断结果;
字符串判断单元204,用于判断所述字符串列表中是否包含预定字符串,如果判断出所述字符串列表中包含所述预定字符串,生成第五判断结果,否则生成第六判断结果;
安全性确定单元205,用于如果生成所述第一判断结果、所述第三判断结果、所述第五判断结果中的至少一种判断结果,则确定所述目标程序模块不安全。
可选的,所述解析单元201,具体用于:
将所述目标程序模块的模块头部信息加载至内存中,其中,所述模块头部信息中包括对所述目标程序模块中所存在的各个段信息的索引;
根据所述索引,将所述各个段信息加载至所述内存中;
从所述各个段信息中,提取所述各个段信息的数据内容;
从所述各个段信息的数据内容中,提取所述导入函数名称列表和所述字符串列表。
可选的,如果所述日志输出相关的导入函数为用于格式化输出字符串至终端的格式化输出函数,所述日志输出判断单元202,具体用于:
从所述导入函数名称列表中读取第一个导入函数的名称;
判断当前读取到的导入函数的名称是否为所述格式化输出函数的名称;
如果是,生成所述第一判断结果;否则,继续从所述导入函数名称列表中读取下一个导入函数的名称,并返回所述判断当前读取到的导入函数的名称是否为所述格式化输出函数的名称的步骤;
如果从所述导入函数名称列表读取到的最后一个导入函数的名称不是所述格式化输出函数的名称,则生成所述第二判断结果。
可选的,所述预定核心函数包括多个,所述核心函数判断单元203,具体用于:
从所述导入函数名称列表中读取第一个导入函数的名称;
判断当前读取到的导入函数的名称是否属于所述预定核心函数;
如果是,生成所述第三判断结果;否则,继续从所述导入函数名称列表中读取下一个导入函数的名称,并返回所述判断当前读取到的导入函数的名称是否属于所述预定核心函数的步骤;
如果从所述导入函数名称列表读取到的最后一个导入函数的名称不属于所述预定核心函数,则生成所述第四判断结果。
可选的,所述预定核心函数,包括:用于格式化输出字符串至缓冲区的函数、用于返回字符串长度的函数中的一种或多种。
可选的,所述字符串判断单元204,具体用于:
从所述预定字符串中读取第一个字符串;
判断当前读取到的字符串是否属于所述预定字符串;
如果是,生成所述第五判断结果;否则,继续从所述字符串列表中读取下一个字符串,并返回所述判断当前读取到的字符串是否属于所述预定字符串的步骤;
如果从所述字符串列表中读取到的最后一个字符串不属于所述预定字符串,则生成所述第六判断结果。
可选的,所述预定字符串,包括:标示密码的字符串、标示密钥的字符串、标示加密操作的字符串、标示解密操作的字符串、标示加密标准的字符串、标示加密算法类型的字符串中的一种或多种。
基于同一发明构思,本发明实施例提供了一种计算机可读存储介质301,参考图3所示,其上存储有计算机程序302,该程序302被处理器执行时实现前述程序模块安全检测方法中任一实施方式中的步骤。
基于同一发明构思,本发明实施例提供了一种计算机设备400,参考图4所示,包括存储器410、处理器430及存储在存储器410上并可在处理器430上运行的计算机程序420,所述处理器430执行所述程序420时实现前述程序模块安全检测方法中任一实施方式中的步骤。
由于本实施例所介绍的装置、存储介质、计算机设备为实施本发明实施例中程序模块安全检测方法所采用的设备,故而基于前述所介绍的程序模块安全检测方法,本领域所属技术人员能够了解本实施例的装置、存储介质、计算机设备的具体实施方式以及其各种变化形式,所以在此对于装置、存储介质、计算机设备如何实现前述程序模块安全检测方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中程序模块安全检测方法所采用的电子设备,都属于本发明所欲保护的范围。
上述本发明实施例中的技术方案,至少具有如下的技术效果或优点:
由于从目标程序模块中解析出导入函数名称列表和字符串列表;判断导入函数名称列表中是否有日志输出相关的导入函数和预定核心函数,以及判断字符串列表中是否包含预定字符串,以判断结果判断目标程序模块是否安全,是在已经编译好、甚至最终发布的目标程序模块进行检测,对于开发人员也是透明的,同时也可以在没有该程序模块的源代码的情况下进行检测,不需要获取源代码,从而实现了对已经编译好、发布的程序模块进行检测更方便、更可靠。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种程序模块安全检测方法,其特征在于,包括:
在没有目标程序模块的源代码的情况下,按照目标程序模块的文件格式来依次读入模块头部信息和模块头部信息之后的各个段信息,其中,模块头部信息中包括对各个段信息的索引,从已经编译好且发布的所述目标程序模块中解析出导入函数名称列表和字符串列表,其中,所述导入函数名称列表包含导入至所述目标程序模块中的***函数的名称,所述字符串列表中包含所述目标程序模块中的所有字符串,所述目标程序模块是应用程序的组件;
判断所述导入函数名称列表中是否存在与日志输出相关的导入函数,如果判断出所述导入函数名称列表中存在与所述日志输出相关的导入函数,生成第一判断结果,否则生成第二判断结果;
判断所述导入函数名称列表中是否存在预定核心函数,如果判断出所述导入函数名称列表中存在所述预定核心函数,生成第三判断结果,否则生成第四判断结果;
判断所述字符串列表中是否包含预定字符串,如果判断出所述字符串列表中包含所述预定字符串,生成第五判断结果,否则生成第六判断结果;
如果生成所述第一判断结果、所述第三判断结果、所述第五判断结果中的至少一种判断结果,则确定所述目标程序模块不安全。
2.如权利要求1所述的程序模块安全检测方法,其特征在于,所述目标程序模块中解析出导入函数名称列表和字符串列表,包括:
将所述目标程序模块的模块头部信息加载至内存中,其中,所述模块头部信息中包括对所述目标程序模块中所存在的各个段信息的索引;
根据所述索引,将所述各个段信息加载至所述内存中;
从所述各个段信息中,提取所述各个段信息的数据内容;
从所述各个段信息的数据内容中,提取所述导入函数名称列表和所述字符串列表。
3.如权利要求1所述的程序模块安全检测方法,其特征在于,如果所述日志输出相关的导入函数为用于格式化输出字符串至终端的格式化输出函数,所述判断所述导入函数名称列表中是否存在与日志输出相关的导入函数,包括:
从所述导入函数名称列表中读取第一个导入函数的名称;
判断当前读取到的导入函数的名称是否为所述格式化输出函数的名称;
如果是,生成所述第一判断结果,否则,继续从所述导入函数名称列表中读取下一个导入函数的名称,并返回所述判断当前读取到的导入函数的名称是否为所述格式化输出函数的名称的步骤;
如果从所述导入函数名称列表读取到的最后一个导入函数的名称不是所述格式化输出函数的名称,则生成所述第二判断结果。
4.如权利要求1所述的程序模块安全检测方法,其特征在于,所述预定核心函数包括多个,所述判断所述导入函数名称列表中是否存在预定核心函数,包括:
从所述导入函数名称列表中读取第一个导入函数的名称;
判断当前读取到的导入函数的名称是否属于所述预定核心函数;
如果是,生成所述第三判断结果,否则,继续从所述导入函数名称列表中读取下一个导入函数的名称,并返回所述判断当前读取到的导入函数的名称是否属于所述预定核心函数的步骤;
如果从所述导入函数名称列表读取到的最后一个导入函数的名称不属于所述预定核心函数,则生成所述第四判断结果。
5.如权利要求4所述的程序模块安全检测方法,其特征在于,所述预定核心函数,包括:用于格式化输出字符串至缓冲区的函数、用于返回字符串长度的函数中的一种或多种。
6.如权利要求1所述的程序模块安全检测方法,其特征在于,所述判断所述字符串列表中是否包含预定字符串,包括:
从所述预定字符串中读取第一个字符串;
判断当前读取到的字符串是否属于所述预定字符串;
如果是,生成所述第五判断结果,否则,继续从所述字符串列表中读取下一个字符串,并返回所述判断当前读取到的字符串是否属于所述预定字符串的步骤;
如果从所述字符串列表中读取到的最后一个字符串不属于所述预定字符串,则生成所述第六判断结果。
7.如权利要求1所述的程序模块安全检测方法,其特征在于,所述预定字符串,包括:标示密码的字符串、标示密钥的字符串、标示加密操作的字符串、标示解密操作的字符串、标示加密标准的字符串、标示加密算法类型的字符串中的一种或多种。
8.一种程序模块安全检测装置,其特征在于,包括:
解析单元,用于在没有目标程序模块的源代码的情况下,按照目标程序模块的文件格式来依次读入模块头部信息和模块头部信息之后的各个段信息,其中,模块头部信息中包括对各个段信息的索引,从已经编译好且发布的所述目标程序模块中解析出导入函数名称列表和字符串列表,其中,所述导入函数名称列表包含导入至所述目标程序模块中的***函数的名称,所述字符串列表中包含所述目标程序模块中的所有字符串,所述目标程序模块是应用程序的组件;
日志输出判断单元,用于判断所述导入函数名称列表中是否存在与日志输出相关的导入函数,如果判断出所述导入函数名称列表中存在与所述日志输出相关的导入函数,生成第一判断结果,否则生成第二判断结果;
核心函数判断单元,用于判断所述导入函数名称列表中是否存在预定核心函数,如果判断出所述导入函数名称列表中存在所述预定核心函数,生成第三判断结果,否则生成第四判断结果;
字符串判断单元,用于判断所述字符串列表中是否包含预定字符串,如果判断出所述字符串列表中包含所述预定字符串,生成第五判断结果,否则生成第六判断结果;
安全性确定单元,用于如果生成所述第一判断结果、所述第三判断结果、所述第五判断结果中的至少一种判断结果,则确定所述目标程序模块不安全。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-7中任一项所述方法。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-7中任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710524905.2A CN109214179B (zh) | 2017-06-30 | 2017-06-30 | 一种程序模块安全检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710524905.2A CN109214179B (zh) | 2017-06-30 | 2017-06-30 | 一种程序模块安全检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109214179A CN109214179A (zh) | 2019-01-15 |
CN109214179B true CN109214179B (zh) | 2021-04-27 |
Family
ID=64977164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710524905.2A Active CN109214179B (zh) | 2017-06-30 | 2017-06-30 | 一种程序模块安全检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109214179B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10783082B2 (en) | 2019-08-30 | 2020-09-22 | Alibaba Group Holding Limited | Deploying a smart contract |
CN110675256B (zh) * | 2019-08-30 | 2020-08-21 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
CN112632550B (zh) * | 2021-03-05 | 2021-06-29 | 北京邮电大学 | 口令和密钥的应用安全的检测方法及其电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1607533A (zh) * | 2003-07-31 | 2005-04-20 | 索尼株式会社 | 内容分发***、方法、服务器和终端设备 |
CN106203120A (zh) * | 2016-07-15 | 2016-12-07 | 北京邮电大学 | 一种针对Android加固应用的多点Hook逆向方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4776050B2 (ja) * | 1999-07-13 | 2011-09-21 | ソニー株式会社 | 配信コンテンツ生成方法、コンテンツ配信方法および装置、並びに、コード変換方法 |
CN104715199A (zh) * | 2012-03-21 | 2015-06-17 | 北京奇虎科技有限公司 | 一种病毒apk的识别方法及装置 |
CN102663286B (zh) * | 2012-03-21 | 2015-05-06 | 北京奇虎科技有限公司 | 一种病毒apk的识别方法及装置 |
CN102945347B (zh) * | 2012-09-29 | 2016-02-24 | 中兴通讯股份有限公司 | 一种检测Android恶意软件的方法、***及设备 |
-
2017
- 2017-06-30 CN CN201710524905.2A patent/CN109214179B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1607533A (zh) * | 2003-07-31 | 2005-04-20 | 索尼株式会社 | 内容分发***、方法、服务器和终端设备 |
CN106203120A (zh) * | 2016-07-15 | 2016-12-07 | 北京邮电大学 | 一种针对Android加固应用的多点Hook逆向方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109214179A (zh) | 2019-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10387648B2 (en) | Ransomware key extractor and recovery system | |
US8850585B2 (en) | Systems and methods for automated malware artifact retrieval and analysis | |
JP5852676B2 (ja) | 権限昇格攻撃へのコンピュータ・ソフトウェア・アプリケーションの脆弱性を判定するための方法、コンピュータ・プログラム、およびシステム | |
WO2017086837A1 (ru) | Способ обнаружения вредоносных программ и элементов | |
TW201629832A (zh) | 一種識別病毒變種的方法及裝置 | |
CN110929264B (zh) | 漏洞检测方法、装置、电子设备及可读存储介质 | |
US10783246B2 (en) | Comparing structural information of a snapshot of system memory | |
TWI541669B (zh) | Detection systems and methods for static detection applications, and computer program products | |
CN107689940B (zh) | WebShell检测方法及装置 | |
WO2011053637A1 (en) | System and method for detecting executable machine instructions in a data stream | |
CN109214179B (zh) | 一种程序模块安全检测方法及装置 | |
JP2009093615A (ja) | 仮想環境を利用した非実行ファイル内のエクスプロイトコード分析方法及び装置 | |
CN112231702B (zh) | 应用保护方法、装置、设备及介质 | |
JP6000465B2 (ja) | プロセス検査装置、プロセス検査プログラムおよびプロセス検査方法 | |
US20170126715A1 (en) | Detection device, detection method, and detection program | |
CN112115473A (zh) | 一种用于Java开源组件安全检测的方法 | |
JP2006330864A (ja) | サーバ計算機システムの制御方法 | |
CN105791250B (zh) | 应用程序检测方法及装置 | |
CN106407815B (zh) | 漏洞检测方法及装置 | |
CN111027072B (zh) | Linux下基于elf二进制标准解析的内核Rootkit检测方法及装置 | |
CN115828228B (zh) | 一种验证内存马检测能力的方法、装置及电子设备 | |
US10931693B2 (en) | Computation apparatus and method for identifying attacks on a technical system on the basis of events of an event sequence | |
JP6258189B2 (ja) | 特定装置、特定方法および特定プログラム | |
CN115270126B (zh) | 一种检测Java内存马的方法、装置、电子设备及存储介质 | |
CN115310087A (zh) | 一种基于抽象语法树的网站后门检测方法和*** |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240613 Address after: 430000, No. 21-5-3, Software Park 1st Road, Hongshan District, Wuhan City, Hubei Province Patentee after: Fan Kai Country or region after: China 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. Country or region before: China |