CN105637516A - 使用散列对动态代码的完整性进行验证的方法 - Google Patents
使用散列对动态代码的完整性进行验证的方法 Download PDFInfo
- Publication number
- CN105637516A CN105637516A CN201480056604.6A CN201480056604A CN105637516A CN 105637516 A CN105637516 A CN 105637516A CN 201480056604 A CN201480056604 A CN 201480056604A CN 105637516 A CN105637516 A CN 105637516A
- Authority
- CN
- China
- Prior art keywords
- hash code
- hash
- code
- function
- enrolment
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 229910002056 binary alloy Inorganic materials 0.000 claims description 34
- 238000000605 extraction Methods 0.000 claims description 19
- 239000000284 extract Substances 0.000 claims description 14
- 238000012795 verification Methods 0.000 abstract description 25
- 230000006870 function Effects 0.000 description 105
- 238000004590 computer program Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 13
- 238000007689 inspection Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000006866 deterioration Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000035945 sensitivity Effects 0.000 description 2
- 230000009897 systematic effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000000682 scanning probe acoustic microscopy Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
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/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- 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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Quality & Reliability (AREA)
- Storage Device Security (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了使用散列对动态代码的完整性进行验证的方法和生成在该验证时所用的散列注册表的方法。本发明提供了如下的生成在使用散列对动态代码的完整性进行验证时所用的散列注册表的方法,该方法包括:仅针对作为程序的一部分的特定函数(要求安全性的函数)设定安全标签的步骤;二进制生成步骤,其通过编译源代码来生成二进制,所述源代码包括至少一个应用了所述安全标签的函数;散列码提取步骤,如果搜索所述二进制且检测到所述安全标签,那么提取用于包括所述安全标签的所述特定函数的代码块的散列码;以及散列注册表生成步骤,其用于生成散列注册表,所述散列注册表包括在所述散列码提取步骤中生成的针对至少一个函数的散列码。
Description
技术领域
本发明涉及使用散列对动态代码的完整性进行验证的方法。
背景技术
需要指出的是,下面所说明的内容仅提供与本发明各实施例有关的背景信息,而并非构成现有技术。
最近,频繁地发生了如下这样的案例:通过侵入他人的计算机而使信息外泄;使用反向工程技术(reverseengineeringtechnique)来修改计算机程序的二进制代码,以致这些计算机程序执行与它们的原本预期达到的功能不同的功能;使用诸如调试器(debugger)等工具在计算机程序的执行过程中修改二进制代码,然后滥用这些计算机程序。例如,如果通过对参加在线游戏的用户个人电脑中所运行的客户端程序实施反向工程来修改客户端程序以使得它自动被执行,那么修改程序的人还可以以异常的方式获得游戏物品。因为计算机程序是否被修改在直到该计算机程序被执行之前是很难查出的,并且即使被查出,也难以处理这样的情形,所以有必要在计算机程序的执行过程中检查该计算机程序是否被修改且然后对此采取措施。
以二进制形式存储于辅助存储器单元中的计算机程序被加载到主存储器中以便被执行。被加载到主存储器中的二进制必须一直保持它的原始状态。然而,如果二进制被反向工程修改后再被执行或者如果在计算机程序的执行过程中通过使用诸如调试器等工具而修改了二进制,那么该二进制将不能保持它的原始状态。
在现有技术中,为了解决上述问题,当计算机程序的二进制代码以文件的形式被存储在辅助存储器单元中时,通过获得该整个文件的散列来验证二进制的完整性以检查该文件是否被修改,或者通过获得被加载到主存储器中的二进制的全体部分或一部分的散列来验证该二进制的完整性以周期性地检查该二进制是否被修改。前者被称为文件散列检查方法(依据文件散列),并且后者被称为存储器散列检查方法(依据存储器散列)。依据存储器散列的测试方法是仅仅当以固定的时间间隔迭代地执行检查时才可以实现预期目的的方法。因此,依据存储器散列的检查方法可能成为导致程序执行性能劣化以及导致实施散列的系统的性能劣化的因素。
于是,如果传统的存储器散列被用在对二进制代码的完整性进行验证的方法中,那么存在着这样的问题:依据存储器散列的该方法很难应用于对计算机程序的执行性能或系统性能比较敏感的情况中。
发明内容
要解决的技术问题
本发明的主要目的是提供一种能够防止由于完整性验证而导致的程序执行性能劣化的方法,该方法不是通过周期性地或迭代地验证二进制的全体部分或一部分的完整性而实现的,而是通过仅当应用了安全标签的函数被调用时才验证该函数单元中的完整性而实现的。
解决技术问题的方案
根据本发明实施例的一个方面,提供了一种生成在使用散列对动态代码的完整性进行验证时所用的散列注册表的方法,所述方法包括:仅针对作为程序的一部分且要求安全性的特定函数而设定安全标签的步骤;二进制生成步骤,其通过编译源代码来生成二进制,所述源代码包括至少一个应用了所述安全标签的函数;散列码提取步骤,在该步骤中,如果搜索所述二进制且发现所述安全标签,那么提取针对包括所述安全标签的所述特定函数的代码块的散列码;以及散列注册表生成步骤,其用于生成散列注册表,所述散列注册表包括在所述散列码提取步骤中生成的针对至少一个函数的散列码。
此外,根据本发明实施例的另一个方面,提供了一种使用散列对动态代码的完整性进行验证的方法,所述方法包括:将包括至少一个应用了安全标签的函数的二进制加载到主存储器中的步骤;散列码提取步骤,在该步骤中,如果包括所述安全标签的特定函数被调用且所述安全标签在所述主存储器中的所述二进制的执行过程中被发现,那么提取针对所述函数的代码块的散列码;函数修改判定步骤,用于确认所提取的所述散列码是否与存储于散列注册表中的包括针对至少一个函数的散列码的散列码表的任一散列码一致,以判定所述特定函数是否被修改;以及当作为所述函数修改判定步骤的结果而判定了所述特定函数被修改时停止所述二进制的执行的步骤。
本发明的效果
根据本发明,如上所述,在为了检查加载到主存储器中的计算机程序的二进制是否被修改而必须周期性地或迭代地获得针对所述二进制的全体部分或一部分的散列码的情况下,计算机程序执行性能和系统性能由于散列计算的负荷而劣化。而且,在对执行速率敏感的计算机程序的情况下,像上述一样的方式很难被应用于该程序。
关于需要二进制修改的安全性且对程序执行性能敏感的计算机程序的执行,能够通过将安全标签应用于需要保护的重要函数而解决上述问题,并且在应用了所述安全标签的所述函数被调用的情况下,使用存储器散列仅仅针对所述函数来检查所述二进制是否被修改,以便使用所述存储器散列来验证完整性。也就是说,不是采取使用存储器散列来周期性地或迭代地检查完整性的方法,而是采取如下方法:只有当应用了安全标签的所述函数被执行时才进行所述函数的完整性的验证。因此,将会增强验证的可用性,并且还将会把程序执行性能的劣化减至最小程度。
即使应用了所述安全标签的所述函数被迭代地调用,当在所述函数的完整性验证被完成之后该同一函数再次被调用时,完整性检查也被配置成在固定的时间间隔内被跳过。因此,能够解决由于所述函数的迭代调用而引起的问题。
而且,不像使用存储器散列来验证完整性的传统方法,因为应用了函数单元中的安全标签的二进制和包括散列码的散列注册表被一起分配,所以不需要用来获得在判定修改是否达成时所必需的单独的原始二进制的过程。而且,因为完整性检查是当函数被调用时在该函数内被执行的,所以不需要用来进行所述完整性检查的单独程序。在必须具备用于验证完整性的单独程序的情况下,如果用于完整性验证的程序不能被执行,那么用来防止被修改后的程序被执行的手段将会消失。相反,如果完整性的验证是在应用了安全标签的函数单元中被进行,那么因为在该函数被调用的同时完整性的验证也被达成,所以上述问题将不会出现。
同时,安全标签适合于在账户认证、密码输入、支付、安全性(散列检查、反调试(anti-debugging),等等)、加密、解密、证书验证、商品买卖、初始化、服务器通信、配置文件(SAFEFile)的读写、算术结果判定和程序执行中要求保护的关键函数,而不适合于以短的时间间隔而被迭代地调用的函数。上述的关键函数具有不是以恒定的周期被迭代地调用的特性。即使所述关键函数被迭代地调用,在所述函数的完整性验证完成之后该同一函数再次被调用的情况下,该验证能够被配置成在固定的时间间隔内被跳过。
附图说明
图1是根据本实施例的通过使用函数单元的存储器散列来验证动态代码的完整性的概念的示意图。
图2是根据本实施例的能够验证函数单元的动态代码的完整性的程序的框图。
图3是根据本实施例的通过从应用了安全标签的二进制中提取散列码而生成散列注册表的过程的流程图。
图4是根据本实施例的在生成用于验证散列注册表的完整性的签名时的过程的流程图。
图5是根据本实施例的通过从应用了安全标签的函数中提取散列码而生成散列注册表的过程的图解。
图6是根据本实施例的用于执行应用了安全标签的二进制的用户终端的框图。
图7是根据本实施例的针对应用了安全标签的二进制而进行函数单元的完整性验证的过程的流程图。
图8是图示了根据本实施例的进行函数单元的完整性验证的过程的图。
具体实施方式
现在,将参照附图来详细地说明本发明的各实施例。
不管硬件(例如,个人电脑(PC)、服务器、智能手机,等等)或执行应用软件的操作系统(例如,Windows、UNIX、Linux、OSX,等等)是什么,如果程序语言可以生成诸如C/C++语言等本地代码(nativecode),那么根据本实施例的使用散列来验证二进制的完整性的方法可以是同样适用的。即,因为该方法可以在不依赖于硬件和操作系统的情况下验证要求安全性的关键函数单元中的完整性,所以它具有通用性和高的可用性,并且还可以使对程序的执行性能的影响最小化。
图1是根据本实施例的通过使用函数单元的存储器散列而验证动态代码的完整性的概念的示意图。
根据本实施例的使用函数单元的存储器散列而验证二进制的完整性的方法包括在开发终端100中生成包括应用了安全标签的函数的二进制的步骤和从该二进制生成散列注册表的步骤。然而,函数单元的散列码的生成和从二进制生成散列注册表并非必须在单个装置中而被完成。应用了安全标签的二进制和散列注册表通过分配装置(例如,网络或存储介质)而被分配给用户,并且被存储在用户终端200中。用户终端200可以通过将包括至少一个应用了安全标签的函数的二进制加载到主存储器中来予以执行。此时,如果检测到安全标签,那么就进行包括安全标签的函数的完整性的验证过程。
图2是根据本实施例的能够验证函数单元的动态代码的完整性的程序的框图。
以下,将参照图3中的函数单元的安全标签应用过程来说明图2中的部件。如图2所示,开发终端100的内部结构包括编译器110、安全应用装置120和存储部130。安全应用服务器400可以代替开发终端100而执行在安全应用装置120中进行的散列码提取步骤(S340)和散列注册表生成步骤(S360)。
编译器110可以编译包括至少一个应用了安全标签的函数的源代码以生成二进制。安全应用装置120搜索由编译器110生成的二进制中的安全标签,并且如果检测到该安全标签,那么安全应用装置120进行生成用于从表明完整性验证的开始点的开始标签(starttag)到表明完整性验证的结束点的结束标签(endtag)的代码的散列码的散列码提取步骤(S340),并且生成包括在散列码提取步骤中所提取的至少一个散列码的散列注册表(S360)。由安全应用装置120进行的散列码提取步骤(S340)和散列注册表生成步骤(S360)不仅能够在开发终端100中被执行,而且如果整个二进制被传输至安全应用服务器400,那么也能够在安全应用服务器400中被执行。此外,安全应用装置120能够发现安全标签(S330)且把从开始标签到结束标签的代码传输至安全应用服务器400,由此也使得安全应用服务器400能够进行散列码提取步骤(S340)和散列注册表生成步骤(S360)。由安全应用装置120生成的散列注册表以带有二进制的文件的形式被存储在存储部130中(S360)。
图3是根据本实施例的通过从应用了安全标签的二进制中提取散列码而生成散列注册表的过程的流程图。
在包括多个函数的计算机程序的源代码中,在包括了在账户认证、密码输入、支付、安全性(散列检查、反调试,等等)、加密、解密、证书验证、商品买卖、初始化、服务器通信、配置文件(SAFEFile)的读写、算术运算结果判定和程序执行中要求安全性的关键函数等的至少一个函数中设定安全标签(S300)。像上述这样的函数通常具有如下的特点:它们不是被周期性地和反复地调用,但是它们是打算修改计算机程序的人们所感兴趣的主要课题。因此,即使只是对像上述这样的函数完成了完整性验证,可用性也是非常高的,并且由于完整性验证而导致的程序执行性能的劣化也能够被减至最低程度。包括应用了安全标签的函数的源代码被编译器110编译而变为二进制形式(S310)。即,利用编译器110生成了二进制文件(S310)。
以下,将说明在安全应用装置120中进行的过程和在存储部130中进行的过程。安全应用装置120检测二进制中的安全标签(S320)。如果没有检测到安全标签,那么确认是否到达该二进制的终点(S350)。如果没有到达,那么该过程返回至步骤S320且继续检测。如果检测到安全标签,那么通过将把表明完整性检查的开始的开始标签与表明完整性检查的结束的结束标签之间的代码当作散列函数(MD5、SHA、Checksum,等等)的输入,在包括安全标签的函数的代码块内提取散列码(S340)。这称为散列码提取过程。如果到该二进制的终点为止完成了该检测(S350),那么生成包括由先前被提取的针对至少一个函数的散列码组成的散列码表的散列注册表(S360)。该散列注册表也能够被存储在与二进制文件分开的另外文件中。此外,该散列注册表也能够通过被附着至二进制文件的终点而被存储着。
图4是根据本实施例的在生成用于验证散列注册表的完整性的签名时的过程的流程图。
散列注册表生成步骤(S360)把包括了在至少一个函数单元处提取的散列码的散列码表存储在散列注册表中(S362)。然而,存储在散列注册表中的散列码可以被公开给打算修改程序的人,由此使得该散列码能够被修改。换言之,为了确认散列注册表的完整性,通过将存储在散列注册表中的包括了针对至少一个函数的散列码的散列码表当作散列函数(MD5、SHA、Checksum,等等)的输入,来提取表散列码(tablehashcode)(S364)。通过对所提取的表散列码进行加密而生成签名(signature)(S366)。因为签名是对散列注册表的完整性进行验证的一个重要部分,所以它被加密算法(AES、DES、RSA,等等)加密,以使得它可以被保护(S366)。签名也可以被存储在具有散列码表的散列注册表中。此外,签名也可以被存储在与散列注册表分开的另外地点中(S368)。
图5是根据本实施例的通过从应用了安全标签的函数中提取散列码而生成散列注册表的过程的图解。
安全标签包括表明完整性验证的开始点的开始标签和表明完整性验证的结束点的结束标签。通过将从开始标签到结束标签的代码当作散列函数(MD5、SHA、Checksum,等等)的输入,在应用了安全标签的函数的代码块内提取散列码(S340)。在图5的图解中,函数_1包括安全标签,该安全标签含有开始标签和结束标签。如果函数_1的从开始标签到结束标签的代码被当作散列函数(例如,MD5、SHA和Checksum)的输入,那么散列1的散列码被提取出来(S340)。
因为安全标签被应用于至少一个函数,所以散列注册表也包括至少一个散列码。在图5的图解中,包括了从n个应用了安全标签的函数中提取的散列码(即,散列1、散列2、…、散列n)的散列码表被存储在散列注册表中(S362)。通过将该散列码表当作MD5、SHA、Checksum等散列函数的输入来提取表散列码(S364)。通过使用AES、DES、RSA等加密算法对所提取的表散列码进行加密而生成签名(S366)。并且,所生成的签名被存储在散列注册表中或另外地点中(S368)。
图6是根据本实施例的用于执行应用了安全标签的二进制的用户终端的框图。
应用了安全标签的二进制通过分配过程而被存储在用户终端200的辅助存储设备240中。当二进制在用户终端200中被执行时,首先,该二进制被加载到主存储器220中,并且利用CPU(中央处理器)210来实现该二进制的指令。结果被显示在显示设备230上。
根据本发明实施例的用户终端200可以是个人电脑(PC)、手提电脑、平板电脑、个人数字助理(PDA;PersonalDigitalAssistant)、游戏控制台、便携式多媒体播放器(PMP;portablemultimediaplayer)、便携式游戏机(PSP;PlayStationPortable)、无线通信终端、智能手机(SmartPhone)、TV(电视)和媒体播放器。根据本发明实施例的用户终端200可以是服务器终端,例如应用服务器和服务服务器。根据本发明实施例的用户终端可以指包括下列等的各种装置:(i)用于与各种装置或有线/无线通信网络进行通信的诸如通信调制解调器等通信装置;(ii)用来存储用于帧间或帧内预测(interorintraprediction)的各种程序和数据以便使用散列来执行动态代码的验证方法的存储器;(iii)用于执行所述程序以进行计算和控制的微处理器,等等。根据至少一个实施例,所述存储器可以是计算机可读记录/存储介质,例如随机存取存储器(RAM;RandomAccessMemory)、只读存储器(ROM;ReadOnlyMemory)、闪存、光盘、磁盘、固态盘(SSD;solidstatedisk)。根据至少一个实施例,微处理器可以被编程以便任选地执行这里所说明的操作和函数中的至少一者。根据至少一个实施例,微处理器可以整体地或部分地被实施为例如具有特殊配置的专用集成电路(ASIC)等硬件。
图7是根据本实施例的针对应用了安全标签的二进制而进行函数单元的完整性验证的过程的流程图。
为了执行应用了安全标签的二进制,该二进制被加载到主存储器(220)中(S710)。当该二进制被执行时,如果应用了安全标签的函数被调用且然后检测到该安全标签(S720),那么该函数的完整性被验证。
以下,将说明其中检测到安全标签且因此完成函数单元的完整性验证的过程。如果应用了安全标签的函数被调用且然后检测到该安全标签,那么判定是否进行该函数的完整性验证(S730)。应用了安全标签的函数具有不被反复调用的特性,因为该安全标签被应用于在账户认证、密码输入、支付、安全性(散列检查、反调试,等等)、加密、解密、证书确认、商品买卖、初始化、服务器通信、配置文件(SAFEfile)的读写、算术运算结果判定和程序执行中要求安全性的重要函数,但是在一些情况下,存在着通过该函数的反复调用来完成完整性验证的可能。为了针对以上情况做好准备,在函数的完整性验证之后的一个时间间隔内,必须避免该函数的完整性的重复再验证。因此,如果在函数的完整性验证之后的特定时间间隔内该函数再次被调用,那么跳过完整性验证且将会进行下一步骤(S730)。
此外,需要验证散列注册表的完整性(S740)。为了验证散列注册表(S740),以与在散列注册表生成过程(S340)中提取用于散列码表的表散列码的过程(S364)相同的过程,提取用于存储在散列注册表中的且包括针对至少一个函数单元的散列码的散列码表的表散列码(S364)。并且,判定所提取的表散列码和用于被设置于散列注册表或另外地点中的散列码表的表散列码是否是同一代码(S740)。在这种情况下,存储在散列注册表或另外地点中的签名能够在它被解密之后被提供。如果不一致,那么因为散列注册表被修改了,所以该程序被转移至终止执行的步骤(S770)。
函数的完整性检查过程(S750)包括:散列码提取步骤,其针对从表明完整性验证的开始点的开始标签到表明完整性验证的结束点的结束标签的代码,使用散列函数(MD5、SHA、Checksum,等等)在该函数的代码块内提取散列码;确认在散列码提取步骤中所提取的散列码是否与存储在散列注册表中的散列码表的任一散列码一致,以判定该函数是否被修改(S750);以及如果该函数被修改,那么转移至该程序的结束步骤(S770)。如果在函数的完整性检查过程中确认了该函数没有被修改(S750),那么该函数被正常执行,并且重复这些步骤直到程序结束(S760)。在程序的结束步骤中(S770),在二进制被修改的情况下,实施该二进制中所用的资源的返回,并且能够实施警告消息指示、执行停止和执行结束中的任一者。
图8是图示了根据本实施例的进行函数单元的完整性验证的过程的图。
在图8的图解中,执行应用了函数单元的安全标签的二进制(S710);调用函数_1,该函数_1是包括安全标签的函数;如果在函数_1中检测到安全标签(S720),那么使用MD5、SHA、Checksum等散列函数从由开始标签到结束标签的代码中提取散列1的散列码;并且确认散列1是否与存储在散列注册表中的包括散列1、散列2、…、散列n的散列码表的任一散列码一致,以验证函数_1是否被修改(S750)。此时,为了验证散列注册表,提取用于包括散列1、散列2、…、散列n的散列码表的表散列码;确认所提取的表散列码是否与从签名解密而得到的表散列码一致,以验证散列注册表是否被修改(S740)。
上面的说明仅是为了通过示例的方式来说明本发明的技术理念。本发明的领域中的技术人员可以在不偏离本发明原理的情况下做出各种修改、添加和替换。因此,本发明各实施例是旨在说明而非限制本发明的技术范围。本发明的技术理念的范围不受各实施例的限制。本发明的范围将由随附的权利要求来体现。所有这样的修改和变型将被认为落入本发明的范围之内。
Claims (9)
1.生成在使用散列对动态代码的完整性进行验证时所用的散列注册表的方法,所述方法包括:
仅针对作为程序的一部分且要求安全性的特定函数来设定安全标签的步骤;
二进制生成步骤,其通过编译源代码来生成二进制,所述源代码包括至少一个应用了所述安全标签的函数;
散列码提取步骤,在该步骤中,如果搜索所述二进制且检测到所述安全标签,那么提取针对所述特定函数的代码块的散列码;以及
散列注册表生成步骤,其用于生成散列注册表,所述散列注册表包括在所述散列码提取步骤中生成的针对至少一个函数的散列码。
2.根据权利要求1所述的方法,其中,所述安全标签包括所述特定函数的所述代码块内的表明完整性检查的开始点的开始标签和表明完整性检查的结束点的结束标签。
3.根据权利要求2所述的方法,其中,所述散列码提取步骤包括:提取针对所述特定函数的所述代码块内的从所述开始标签到所述结束标签的代码的散列码。
4.根据权利要求1所述的方法,其中,所述散列注册表生成步骤包括:
存储散列码表,所述散列码表包括在所述散列码提取步骤中提取的所述针对至少一个函数的散列码;
通过生成用于所述散列码表的表散列码且将所述表散列码加密来生成签名;以及
存储所述签名。
5.根据权利要求1所述的方法,其中,所述特定函数包括下列中的至少一者:密码输入、支付、账户认证、加密、解密、证书验证、商品买卖、算术运算结果判定、初始化。
6.使用散列对动态代码的完整性进行验证的方法,该方法包括:
将包括至少一个应用了安全标签的函数的二进制加载到主存储器中的步骤;
散列码提取步骤,在该步骤中,如果包括所述安全标签的特定函数被调用且所述安全标签在所述主存储器中的所述二进制的执行过程中被发现,那么提取针对所述函数的代码块的散列码;
函数修改判定步骤,用于确认所提取的所述散列码是否与存储于散列注册表中的包括针对至少一个函数的散列码的散列码表的任一散列码一致,以判定所述特定函数是否被修改;以及
当作为所述函数修改判定步骤的结果而判定了所述特定函数被修改时停止所述二进制的执行的步骤。
7.根据权利要求6所述的方法,其中,所述散列码提取步骤包括:
提取针对所述特定函数的所述代码块内的从表明完整性检查的开始点的开始标签到表明完整性检查的结束点的结束标签的代码的所述散列码。
8.根据权利要求6所述的方法,其中,所述散列码提取步骤包括:
如果在所述特定函数的完整性检查之后所述特定函数再次被调用,那么在预定时期内跳过所述特定函数的完整性检查。
9.根据权利要求6所述的方法,其中,所述散列码提取步骤包括:
提取用于存储于所述散列注册表中的所述散列码表的表散列码,以便验证所述散列注册表是否被修改;以及
如果所提取的所述表散列码与存储于所述散列注册表或另外地点中的从签名解密而得到的表散列码不一致,那么暂停所述二进制的执行。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR10-2013-0097412 | 2013-08-16 | ||
KR20130097412A KR101434860B1 (ko) | 2013-08-16 | 2013-08-16 | 해시를 이용한 동적코드의 무결성 검증 방법 |
PCT/KR2014/007444 WO2015023093A1 (ko) | 2013-08-16 | 2014-08-11 | 해시를 이용한 동적코드의 무결성 검증 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105637516A true CN105637516A (zh) | 2016-06-01 |
Family
ID=51758835
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480056604.6A Pending CN105637516A (zh) | 2013-08-16 | 2014-08-11 | 使用散列对动态代码的完整性进行验证的方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20160162686A1 (zh) |
EP (1) | EP3035224A4 (zh) |
JP (1) | JP2016528635A (zh) |
KR (1) | KR101434860B1 (zh) |
CN (1) | CN105637516A (zh) |
WO (1) | WO2015023093A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106778272A (zh) * | 2016-12-27 | 2017-05-31 | 成都三零瑞通移动通信有限公司 | 一种对调用函数进行动态安全检测的方法 |
CN113239330A (zh) * | 2021-06-10 | 2021-08-10 | 杭州安恒信息技术股份有限公司 | 一种基于散列算法的反调试方法及相关装置 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160188874A1 (en) * | 2014-12-29 | 2016-06-30 | Rubicon Labs, Inc. | System and method for secure code entry point control |
EP3330859A1 (en) * | 2016-12-05 | 2018-06-06 | Universiteit Gent | Self-debugging |
US11755499B2 (en) * | 2018-05-31 | 2023-09-12 | Secturion Systems, Inc. | Locally-stored remote block data integrity |
US11159327B2 (en) * | 2018-08-06 | 2021-10-26 | Tyson York Winarski | Blockchain augmentation of a material exchange format MXF file |
KR102143511B1 (ko) * | 2019-01-31 | 2020-08-11 | 김종현 | 스마트 거래의 보안 안정성 관리 서버 |
KR102310766B1 (ko) * | 2019-12-10 | 2021-10-12 | 재단법인대구경북과학기술원 | 어플리케이션의 무결성 검사방법 |
US11288360B2 (en) | 2020-03-04 | 2022-03-29 | Kyndryl, Inc. | Preventing untrusted script execution |
KR102598510B1 (ko) * | 2021-12-16 | 2023-11-06 | 주식회사 텔레칩스 | 소프트웨어의 무결성 검증 방법 및 그 장치 |
US20240095375A1 (en) * | 2022-09-21 | 2024-03-21 | Qualcomm Incorporated | Mechanism To Secure An Execution Environment In Processor Cores |
US20240303046A1 (en) * | 2023-03-12 | 2024-09-12 | Engineer.ai Corp. | Systems and methods for a device application with certified building block components |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20030075018A (ko) * | 2002-03-15 | 2003-09-22 | 주식회사 셈틀로미디어 | 변조 방지용 소프트웨어 파일 생성 장치와 그 소프트웨어파일의 자가 무결성 검증 방법 및 클라이언트-서버환경에서의 소프트웨어 파일의 자가 무결성 검증 방법 |
JP2005165919A (ja) * | 2003-12-05 | 2005-06-23 | Fuji Xerox Co Ltd | プログラム実行方法、プログラム作成方法、情報処理装置及びプログラム |
CN1708944A (zh) * | 2002-10-28 | 2005-12-14 | 松下电器产业株式会社 | 用于可更新防篡改安全系统的自动产生的加密函数 |
US20060000904A1 (en) * | 2004-06-30 | 2006-01-05 | France Telecom | Method and system for electronic voting over a high-security network |
CN101777103A (zh) * | 2003-09-18 | 2010-07-14 | 苹果公司 | 验证计算机程序的方法、提供计算机程序的方法及其装置 |
CN102222196A (zh) * | 2010-04-16 | 2011-10-19 | 汤姆森特许公司 | 验证自修改的计算机代码校验和的方法、装置及程序载体 |
US20130205403A1 (en) * | 2012-02-08 | 2013-08-08 | Arm Limited | Maintaining secure data isolated from non-secure access when switching between domains |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008176542A (ja) | 2007-01-18 | 2008-07-31 | Fuji Xerox Co Ltd | 送信装置、送信方法及び送信プログラム |
KR101028163B1 (ko) * | 2009-12-14 | 2011-04-08 | 타임스탬프솔루션 주식회사 | 원본증명마크 및 임베디드 기술을 이용한 전자문서의 타임스탬프 발급 및 검증방법 |
-
2013
- 2013-08-16 KR KR20130097412A patent/KR101434860B1/ko active IP Right Grant
-
2014
- 2014-08-11 EP EP14835981.3A patent/EP3035224A4/en not_active Withdrawn
- 2014-08-11 WO PCT/KR2014/007444 patent/WO2015023093A1/ko active Application Filing
- 2014-08-11 JP JP2016534526A patent/JP2016528635A/ja active Pending
- 2014-08-11 CN CN201480056604.6A patent/CN105637516A/zh active Pending
- 2014-08-11 US US14/912,323 patent/US20160162686A1/en not_active Abandoned
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20030075018A (ko) * | 2002-03-15 | 2003-09-22 | 주식회사 셈틀로미디어 | 변조 방지용 소프트웨어 파일 생성 장치와 그 소프트웨어파일의 자가 무결성 검증 방법 및 클라이언트-서버환경에서의 소프트웨어 파일의 자가 무결성 검증 방법 |
CN1708944A (zh) * | 2002-10-28 | 2005-12-14 | 松下电器产业株式会社 | 用于可更新防篡改安全系统的自动产生的加密函数 |
CN101777103A (zh) * | 2003-09-18 | 2010-07-14 | 苹果公司 | 验证计算机程序的方法、提供计算机程序的方法及其装置 |
JP2005165919A (ja) * | 2003-12-05 | 2005-06-23 | Fuji Xerox Co Ltd | プログラム実行方法、プログラム作成方法、情報処理装置及びプログラム |
US20060000904A1 (en) * | 2004-06-30 | 2006-01-05 | France Telecom | Method and system for electronic voting over a high-security network |
CN102222196A (zh) * | 2010-04-16 | 2011-10-19 | 汤姆森特许公司 | 验证自修改的计算机代码校验和的方法、装置及程序载体 |
US20130205403A1 (en) * | 2012-02-08 | 2013-08-08 | Arm Limited | Maintaining secure data isolated from non-secure access when switching between domains |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106778272A (zh) * | 2016-12-27 | 2017-05-31 | 成都三零瑞通移动通信有限公司 | 一种对调用函数进行动态安全检测的方法 |
CN113239330A (zh) * | 2021-06-10 | 2021-08-10 | 杭州安恒信息技术股份有限公司 | 一种基于散列算法的反调试方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
US20160162686A1 (en) | 2016-06-09 |
JP2016528635A (ja) | 2016-09-15 |
WO2015023093A1 (ko) | 2015-02-19 |
KR101434860B1 (ko) | 2014-09-02 |
EP3035224A1 (en) | 2016-06-22 |
EP3035224A4 (en) | 2017-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105637516A (zh) | 使用散列对动态代码的完整性进行验证的方法 | |
KR101471589B1 (ko) | 공통중간언어 기반 프로그램을 위한 보안 제공 방법 | |
CN105683990B (zh) | 用于保护动态库的方法和装置 | |
US9734091B2 (en) | Remote load and update card emulation support | |
CN108628743B (zh) | 应用程序测试方法、装置、设备及存储介质 | |
JP7154365B2 (ja) | ソフトウェアコードをセキュアにするための方法 | |
CN109784007B (zh) | 一种字节码加密的方法、字节码解密的方法及终端 | |
US20160357530A1 (en) | Method and apparatus for intermediate representation of applications | |
JP6392446B2 (ja) | クラウドベースのアプリケーションセキュリティサービスの提供方法及びシステム | |
CN107273723B (zh) | 一种基于so文件加壳的Android平台应用软件保护方法 | |
CN112231702B (zh) | 应用保护方法、装置、设备及介质 | |
CN103116715A (zh) | Windows平台可执行文件API延迟导入保护方法 | |
CN107103214A (zh) | 一种应用于Android系统的应用程序反调试方法及装置 | |
Tillmanns et al. | Firmware insider: Bluetooth randomness is mostly random | |
CN111177693A (zh) | 一种验证终端根证书的方法、装置、设备和介质 | |
CN111324591B (zh) | 区块链分叉的检测方法及相关装置 | |
CN110135154B (zh) | 应用程序的注入攻击检测系统及方法 | |
CN109710609A (zh) | 生成数据表标识的方法及装置 | |
CN108073411A (zh) | 一种补丁的内核加载方法及装置 | |
CN108763934B (zh) | 数据处理方法及装置、存储介质、服务器 | |
US11263313B2 (en) | Securing execution of a program | |
CN109492392B (zh) | 一种核心函数的检测方法及系统 | |
KR101556908B1 (ko) | 프로그램 보호 장치 | |
Shin et al. | An Investigation of PSA Certified | |
CN110647760A (zh) | 一种脚本加密、执行方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160601 |