CN105612527A - 为基于通用中间语言的程序提供安全性的方法 - Google Patents
为基于通用中间语言的程序提供安全性的方法 Download PDFInfo
- Publication number
- CN105612527A CN105612527A CN201480055107.4A CN201480055107A CN105612527A CN 105612527 A CN105612527 A CN 105612527A CN 201480055107 A CN201480055107 A CN 201480055107A CN 105612527 A CN105612527 A CN 105612527A
- Authority
- CN
- China
- Prior art keywords
- dll
- unit
- security
- plug
- application
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1408—Protection against unauthorised use of memory or access to memory by using cryptography
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Storage Device Security (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了为以脚本语言构成的程序提供安全性的方法。本发明为基于通用中间语言的程序提供安全性,其将安全性提供给支持由通用中间语言代码构成的应用和由本地代码构成的插件的平台的用户DLL。所述方法包括:特定功能调用步骤,当应用被加载于主存储器且被执行时调用该应用内的特定功能,该特定功能调用含有一个或多个模块的安全逻辑DLL内的特定模块;DLL请求步骤,向用于加密和存储所述安全逻辑DLL的安全模块插件请求安全逻辑DLL;DLL产生步骤,通过对所述安全模块插件的加密的DLL进行解密来产生所述安全逻辑DLL;安全逻辑DLL传送步骤,将所述安全逻辑DLL传送至所述应用内的所述特定功能;和DLL模块调用步骤,调用包含于所述安全逻辑DLL的所述特定模块。
Description
技术领域
本发明涉及为基于通用中间语言的程序提供安全性的方法。
背景技术
需要指出的是,下述内容仅提供与各实施例有关的背景信息但是不构成现有技术。
尽管进行同样的工作,但是都应该单独开发应用来匹配硬件或操作系统。换言之,各应用能够在个人电脑(PC)、Mac、网络浏览器、flash、安卓(Android)手机和iPhone等各种环境下执行游戏程序。然而,不能通过重复使用游戏程序的源代码来进行开发且不得不根据平台来单独开发这些应用。因此,增加了游戏程序的开发和维护成本。如果能够独立于硬件或操作系统地使用一种源代码,那么能够大幅降低开发和维护成本。近来,这样的需求随着智能手机的出现而进一步提高,且事实上,大多数的手机游戏正是通过使用独立于硬件或操作系统的一种源代码的游戏引擎和开发工具而制作的。代表性的跨平台游戏引擎是Unity、HavokVision和COCOS2D等。特别地,Unity是支持用于制作游戏脚本的C#、Javascript和Boo语言的跨平台游戏引擎。
然而,用诸如C#和Java等编程语言写成的程序即使被编译也不直接转换成机器语言而是转换成通用中间语言(CommonIntermediateLanguage,CIL)代码,其中,通用中间语言代码不限于通过转换以C#语言写成的源代码而获得的二进制码并且也包括Java语言等的字节码(Bytecode)。为了执行通用中间语言代码,需要这样的方式:将诸如.NETFramework、mono、JVM等通用中间语言转换成机器语言,然后执行机器语言。
目前,难以通过反向工程(reverseengineering)技术来分析通用中间语言代码以将其恢复成初始源代码。如果通过反向工程被恢复的源代码被修改、重建(rebuild)和封装,那么它将被分发至用户。为了使程序的分析困难,能够使用用于混淆程序的源代码或通用中间语言代码的技术,但是由于应用的源代码会被泄漏,所以该技术无法成为根本的解决方案。
因此,需要一种安全方法,其用来防止由于转换成通用中间语言代码的程序的密钥算法或逻辑被分析这一事实而造成的商业秘密泄漏或者用来防止程序的源代码在未经授权的情况下被修改、重建和分发。
发明内容
概述
本实施方案的主要目的是:通过将通用中间语言代码程序的密钥算法或逻辑制成单独的动态链接库(DLL),对DLL进行加密并且经由插件(Plug-in)使用加密的DDL,为基于通用中间语言的程序提供安全方法。
技术解决方案
根据本实施例的一个方面,在用于为在支持由通用中间语言代码构成的应用和由本地代码(nativecode)构成的插件的平台中使用的用户DLL(dynamiclinklibrary)提供安全性的方法中,为基于通用中间语言的程序提供安全性的方法包括:特定功能调用步骤,当所述应用被加载至主存储器且被执行时调用所述应用内的特定功能,所述特定功能调用含有一个或多个模块的安全逻辑(securelogic)DLL内的特定模块;DLL请求步骤,向安全模块插件请求所述安全逻辑DLL,在所述安全模块插件中所述安全逻辑DLL被加密且被存储;DLL产生步骤,通过对所述安全模块插件内的被加密的DLL进行解密来产生所述安全逻辑DLL;安全逻辑DLL传送步骤,将所述安全逻辑DLL传送至所述应用内的所述特定功能;和DLL模块调用步骤,调用包含于所述安全逻辑DLL中的所述特定模块。
根据本实施例的另一个方面,在用于为在支持由通用中间语言代码构成的应用和由本地代码(nativecode)构成的插件的平台中使用的用户DLL(dynamiclinklibrary)提供安全性的方法中,为基于通用中间语言的程序提供安全性的方法包括:DLL产生步骤,通过对用于所述应用的安全逻辑的源代码进行编译来产生由通用中间语言代码构成的安全逻辑DLL;加密DLL产生步骤,通过对所述安全逻辑DLL进行加密来产生加密的DLL;和安全模块插件产生步骤,产生含有所述加密的DLL的安全模块插件。
发明效果
如上所述,根据本实施例,转换成通用中间语言代码的程序源代码中的密钥算法或逻辑被分离成分开的文件;被制入DLL中;然后被加密和存储于本地代码插件。在应用的执行过程中,如果调用包含于DLL中的特定模块,那么插件对加密的DLL进行解密以将解密的DLL传送至应用。此时,因为包含于插件的DLL是加密的,所以几乎不可能将其恢复成初始源代码。
作为典型例,在unity3D引擎中,游戏程序是用C#语言编写的且通过编译游戏程序而将其转换成通用中间语言代码。Unity3D引擎支持以能够产生机器语言代码的本地代码的语言(例如,C/C++等)制作的插件。以C#语言制作的DLL经过编译和加密,然后存储于以C++语言制作的插件中。因此,能够安全地保护含有游戏程序的密钥算法和逻辑的DLL。
此外,能够通过使用由本地代码构成的插件来提供各种安全功能。对于应用文件、插件文件以及执行程序所需的必要文件,假如利用散列函数提取每个文件的散列码,产生含有所述每个文件的散列码的散列注册表,并且随后将所述散列注册表存储在插件内,则能够通过使用存储于所述散列注册表中的所述散列码来验证文件的完整性。如果发现文件被修改,那么程序结束而不进一步执行。
此外,为了防止使用诸如调试器等工具静态地或动态地分析程序或者防止通过插入恶意代码攻击程序,能够包括抗调试功能。此外,能够包括抗转储功能来防止对执行过程中的进程的存储状态进行转储。如果所述应用包括抗调试功能,那么能够防止诸如gdb等调试工具对所述应用进行调试,并且能够通过对在调试状态中显现的进程特性进行感测来停止进程自身的执行,以使进一步的调试能够被阻止。如果应用包括抗转储功能,那么能够事先阻止转储应用的执行存储状态的任何尝试。
能够通过使用本地代码插件提供创新性的安全方法,例如DLL加密、针对应用的每个文件的经由散列检查的完整性验证、抗调试、抗转储等。
附图说明
图1是根据本实施例的用于生成对DLL进行加密且提供安全功能的插件的装置的配置图。
图2是根据本实施例的含有DLL的插件的产生过程的流程图。
图3图示了根据本实施例的插件的产生过程。
图4是根据本实施例的用于执行应用和插件的装置的配置图。
图5是根据本实施例的加载到主存储器的游戏程序和插件的示意图。
图6是根据本实施例的需要安全性的含有模块的DLL的内部配置的示意图。
图7是根据本实施例的应用调用包含于DLL中的模块这一过程的流程图。
图8是根据本实施例的调用DLL中的特定模块这一过程的示意图。
具体实施方式
以下,将参照附图详细地说明本实施例。
本发明的实施例涉及通用中间语言代码应用、含有应用的密钥算法或逻辑的DLL以及含有加密DLL且提供安全功能的插件。所述插件应该是由C/C++制作的本地代码,例如安卓NDK(NativeDevelopmentKit,原生开发套件)和XCode等。如果所述插件是由创建通用中间语言代码的语言(例如,C#和Java)制作的,那么插件自身可能遭到黑客攻击且因此插件提供的安全功能可能会失效。
下面的实施例针对用基于Unity的C#语言制作的应用以及用支持本地代码的C/C++制作的插件。然而,本发明的技术理念不应限于此。
图1是根据本实施例的用于生成对DLL进行加密且提供安全功能的插件的装置的配置图。
通过对在与应用的源代码分离后形成的源代码进行编译,DLL产生单元100产生由通用中间语言代码构成的DLL二进制码,然后将它传送至加密单元110。加密单元110可以通过使用诸如DES、AES和RSA等加密算法对接收到的DLL进行加密,然后将它发送至安全模块插件产生单元130和散列注册表产生单元120。散列注册表产生单元120通过获取程序执行所需的必要文件、插件文件以及应用文件等作为散列函数(MD5、SHA、Checksum等)的输入,提取每个文件的散列码,并且产生含有每个文件的提取的散列码的散列注册表。基于Unity的应用中的程序执行所需的必要文件包括例如libmono.so,libunity.so、MonoSecurity.dll和UnityEngine.dll等。散列注册表产生单元120将散列注册表传送至安全模块插件产生单元130。安全模块插件产生单元130将接收的加密DLL和散列注册表包含于插件中并且添加诸如抗调试功能和抗转储(anti-dump)功能等安全功能,以产生安全模块插件。
另一方面,加密单元110、散列注册表产生单元120和安全模块插件产生单元130不必与DLL产生单元位于同一装置中。即,如果DLL产生单元100中产生的DLL和执行程序所需的必要文件被传送至服务器,那么服务器的加密单元110对接收的DLL进行加密,并且服务器的散列注册表产生单元120通过利用散列函数从应用文件、插件文件以及执行程序所需的必要文件提取每个文件的散列码以产生散列注册表。服务器的安全模块插件产生单元130接收加密DLL和散列注册表,将它们包括进插件并且添加诸如抗调试和抗转储功能等安全功能。
如果插件产生于用于开发的PC(个人电脑)中,那么用于开发的PC非常容易感染恶意软件代码且非常容易受到外部攻击。然而,因为服务器比PC相对安全且仅开发所需的服务器需要加强安全性,所以在成本方面是有利的。
图2是根据本实施例的插件的创建过程的流程图。
如果以诸如C#和Java等语言写成的源代码被编译且转换成通用中间语言代码,那么能够将通用中间语言代码恢复成初始源代码。为了解决这样的安全问题,通过使含有密钥算法或逻辑的模块与源代码分离将源代码文件产生为分离的文件。通过编译分离的源代码来产生由通用中间语言代码构成的DLL(S210)。通用中间语言代码是字节码的形式且因此可以容易地被分析。因此,通过加密算法(AES、RAS等)对通用中间语言代码构成的DLL进行加密(S220),从而防止了应用的密钥算法或逻辑被分析。
当执行应用时,通过使用散列注册表来验证文件完整性。为了避免修改应用文件和执行应用所需的必要文件或修改插件以致插件的安全功能失效,通过利用散列函数对每个文件提取散列码并且产生散列注册表(S230)。通过使用C/C++插件,能够添加任何其它进一步的安全功能。能够包含抗调试(anti-debugging)功能以防止通过使用诸如调试器(debugger)等工具静态地或动态地对程序进行分析或者防止通过插入恶意代码对程序进行攻击。此外,能够包含抗转储(anti-dump)功能来防止转储执行中的进程的存储状态(S240)。经过上面的步骤,最后产生含有加密DLL、散列注册表、抗调试功能和抗转储功能的安全模块插件文件(S260)。
图3示出了根据本实施例的插件的产生过程。
图3示出了如下过程:通过分别对由基于Unity的C#语言编写的游戏程序源代码和从游戏程序分离后编写的源代码进行编译而生成应用二进制码和DLL;对DLL进行加密;并且产生含有加密DLL的用C++做出的插件来产生应用二进制和DLL的过程。在Unity平台用C#语言开发的并且作为游戏脚本的程序源代码的GameScript1.cs包括类A(ClassA)和作为类A成员的方法B(MethodB),且新产生的源代码SecureLogic.cs包括含有游戏程序的密钥算法或逻辑的新方法B’(NewMethodB’)以及包含新方法B’的新类A’(NewClassA’)。通过在Unity编辑器(UnityEditor)中对作为游戏脚本的程序源代码的GameScript1.cs进行编译来产生Assembly-CSharp.dll。通过使用mono编译器对作为分离的源代码的SecureLogic.cs进行编译来产生SecureLogic.dll,并且将SecureLogic.dll传送至服务器。服务器的加密单元110对SecureLogic.dll进行加密。服务器的安全模块插件产生单元130产生含有加密的SecureLogic.dll的用C++制作的插件。图3的实施例不包括图1的散列注册表产生单元120。
图4是根据本实施例的用于执行应用和插件的装置的配置图。
图4是用于执行由通用中间语言代码构成的游戏程序和含有DLL的由本地代码构成的插件的装置的配置图。游戏程序和插件存储于辅助存储装置440,且如果执行游戏程序,那么CPU410将游戏程序加载至主存储器420来执行它。游戏程序的执行结果显示在显示装置430上。可以通过输入装置450和网络装置460将新值输入至游戏程序中。如果在游戏的执行中调用包含于DLL中的特定模块,那么将插件加载至主存储器420,且在进行DLL解密和安全功能(例如文件完整性检查等)后,将DLL传送至调用DLL的功能。
根据本发明实施例的用于执行由通用中间语言代码构成的程序和由本地代码构成的插件的装置400可以是用户终端,例如个人电脑(PC)、笔记本电脑、平板电脑、个人数字助理(PDA)、游戏控制台、便携式多媒体播放器(PMP)、便携式游戏机(PSP)、无线通信终端、智能手机、TV和媒体播放器等。根据本发明实施例的用于执行由通用中间语言代码构成的程序和由本地代码构成的插件的装置400可以是服务器终端,例如应用服务器和服务服务器等。根据本发明实施例的用于分别执行由通用中间语言代码构成的程序和由本地代码构成的插件的装置400可以指的是设置有(i)用于与各种装置或有线/无线通信网络进行通信的诸如通信调制解调器等通信装置、(ii)用于存储用来执行所述程序的数据的存储器、(iii)用于通过执行所述程序来进行计算和控制的微处理器等的各种装置。根据至少一个实施例,存储器可以是计算机可读记录/存储介质,例如随机存取存储器(RAM)、只读存储器(ROM)、闪存、光盘、磁盘、固态盘(SSD)等。根据至少一个实施例,微处理器可以被编程以可选地进行这里所述的操作和功能中的至少一者。根据至少一个实施例,微处理器可以整体或部分地使用例如特殊构造的专用集成电路(ASIC)等硬件来实现。
图5是根据本实施例的加载至主存储器的游戏程序和插件的示意图。
图5是加载到主存储器420以被执行的游戏程序510和加载至主存储器的插件520的图示,其中,插件包括例如加密的DLL522、散列注册表524、抗调试功能526和抗转储功能528等安全功能。如果执行游戏程序,那么游戏程序二进制码从辅助存储装置440加载至主存储器420。在游戏程序的执行过程中,游戏程序需要包含于DLL中的任一模块且因此如果请求来自插件的DLL,那么插件520被加载至主存储器420。加载到主存储器的插件是由本地代码构成的,且因此安全功能由于修改而会失效这一情况是不大可能的。即使插件被修改且因此插件的安全功能失效,也能够经由文件完整性检查来发现所述修改。
图6是根据本实施例的需要安全性的含有多模块的DLL的内部配置的示意图。
图6是包含于图5的插件520中的加密的DLL522的内部配置的图示。含有应用的密钥算法或逻辑的至少一个模块是被分开的,并且生成了包含这个/这些模块的类以存储于文件中。通过能够产生DLL的编译器(例如,Unity的mono)对含有所述类的文件进行编译,来产生由通用中间语言代码构成的DLL。图6是含有包含于DLL中的类以及作为类的成员的模块1、模块2……的配置的图示。
图7是根据本实施例的应用调用包含于DLL中的模块这一过程的流程图。
图7示出了这样的过程:由通用中间语言代码构成的应用向插件请求DLL且从含有至少一个模块的DLL调用特定的模块。当应用被加载至主存储器并被执行时,从应用内的特定功能调用加密的DLL内的任一模块。然而,无法直接从应用调用DLL内的特定模块,因此,应该通过使用映像(Reflection)进行间接调用。
以下,将详细说明调用DLL内的特定模块这一过程。调用应用内的与DLL中包含的多个模块中的任一特定模块相关的特定功能(S500),且为了在执行特定功能的同时调用包含于DLL中的特定模块,将插件加载至存储器。在插件被加载时,激活插件内的抗调试功能和抗转储功能(S510),应用内的被调用的特定功能将DLL的名称发送至插件并因而请求该DLL(S520)。然而,所述DLL在插件内是加密的。因此,如果插件收到DLL请求,那么插件需要验证关于文件是否被修改的文件完整性(S530),以对DLL进行解密且传送被解密的DLL(S540)。
抗调试功能用来防止使用调试器分析应用的密钥算法或逻辑的行为或改变应用的密钥变量值的行为,且抗转储功能用来防止转储执行中的应用的存储状态。如果激活抗调试功能,那么应用能够判断应用是否正在被调试,且如果激活抗转储功能,那么应用能够判断是否试图转储存储状态。因此,执行能够被停止。
关于文件的完整性检查,通过获取应用文件(Assembly-CSharp.dll)、用C/C++制作的插件文件(.so)(例如安卓NDK和XCode等)以及执行程序所需的必要文件(例如Unity平台文件(libmono.so、libunity.so、Mono.Security.dll、UnityEngine.dll等))作为散列函数的输入,对每个文件提取散列码。通过每个文件地确认散列码是否与包含于插件中的散列注册表的任一散列码匹配,来判定文件是否被修改(S530)。当发现完成了完整性检查的文件中的任一个文件被修改时,应用结束(S531)。即使插件被修改以使文件的完整性检查失效,仍能够通过插件文件的完整性检查来检测对文件的修改。如果在文件完整性检查过程中判定程序未被修改,那么插件对DLL进行解密(S540)。
像这样,通过使用以本地代码制作的插件,能够为由通用中间语言代码构成的应用和在应用中使用的DLL提供创新型安全性,例如,诸如用于保护DLL的加密、文件完整性检查、抗调试和抗转储等各种安全功能。
当然,不必一定按照根据本发明实施例的抗调试和抗转储过程、文件完整性检查过程和DLL解密过程这样的实施顺序。
在DLL的解密步骤后,插件将DLL发送至应用内的请求该DLL的特定功能(S550)。应用内的以C#语言制作的特定功能通过使用.NETFramework的程序集类(AssemblyClass)加载收到的DLL,然后提取DLL信息(S560)。在这里,程序集类未必限于C#语言。如果加载有DLL的程序集类被存储于应用内,那么即使在第一次使用DLL后不再向插件请求DLL,仍能够调用该DLL内的模块。特定脚本函数使用映像法调用特定模块,所述映像法使用被加载至程序集类的特定模块信息(S570)。
图8是根据本实施例的调用DLL内的特定模块这一过程的示意图。
以下,将参照图7说明图8。图8是执行Unity平台下的以C#语言制作的游戏程序的过程的图示。
如果执行由通用中间语言代码构成的游戏程序,那么通过Unity的libmono.so这一游戏引擎来执行游戏程序的指令,并且首先,通过加载包含于Assembly-CSharp.dll中的游戏程序的类(Class)来执行游戏引擎libmono.so。如果在执行Assembly-CSharp.dll时调用包含于SecureLogic.dll中的含有游戏的密钥算法或逻辑的特定模块(S500),那么游戏程序激活插件内的抗调试功能和抗转储功能(S510)且向插件请求SecureLogic.dll(S520)。为了验证文件的完整性,Assembly-CSharp.dll、插件文件(.so)和Unity平台文件利用散列函数提取执行应用所需的必要文件(例如libmono.so、Mono.Security.dll、UnityEngine.dll等)中的每个文件的散列码,并且判断散列码是否与存储在插件内的含有至少一个散列码的散列注册表中的任一散列码匹配,以此来验证各文件的完整性(S530)。并且,对插件内的加密的DLL进行解密(S540),然后将它发送至请求SecureLogic.dll的Assembly-CSharp.dll内的调用函数(S550)。
上面的说明仅是为了通过示例的方式来说明本实施方案的技术理念。本实施方案的领域的技术人员可以在不偏离本发明原理的情况下做出各种修改、添加和替换。因此,本实施方案的目的是说明而非限制本实施方案的技术范围。本实施方案的技术理念的范围不受各实施例的限制。本实施方案的范围将由随附的权利要求进行解释。所有这样的修改和变型将被认为包括在本实施方案的范围之内。
Claims (15)
1.在为支持由通用中间语言代码构成的应用和由本地代码构成的插件的平台中使用的用户DLL(dynamiclinklibrary)提供安全性的方法中,为基于通用中间语言的程序提供安全性的方法包括以下步骤:
特定功能调用步骤:当所述应用被加载至主存储器且被执行时,调用所述应用内的特定功能,所述特定功能能够调用含有一个或多个模块的安全逻辑DLL内的特定模块;
DLL请求步骤:向安全模块插件请求所述安全逻辑DLL,在所述安全模块插件中所述安全逻辑DLL被加密并且被存储;
DLL产生步骤:通过对所述安全模块插件内的被加密的DLL进行解密来产生所述安全逻辑DLL;
安全逻辑DLL传送步骤:将所述安全逻辑DLL传送至所述应用内的所述特定功能;和
DLL模块调用步骤:调用包含于所述安全逻辑DLL中的所述特定模块。
2.根据权利要求1所述的方法,其中,所述DLL请求步骤包括:所述特定功能将所述安全逻辑DLL的名称发送至所述安全模块插件。
3.根据权利要求1所述的方法,其中,所述DLL产生步骤还包括如下的完整性检查步骤:验证所述应用、所述安全模块插件和执行所述应用所需的必要文件中的至少一者是否被修改。
4.根据权利要求3所述的方法,其中,所述完整性检查步骤包括:
提取散列码的步骤:针对所述安全模块插件、所述应用以及所述平台的必要插件和DLL提取每个文件的散列码;
修改判定步骤:确认所述每个文件的散列码是否与所述安全模块插件中包含的含有至少一个散列码的散列注册表的任一散列码匹配,以判断是否被修改;和
结束步骤:如果在所述修改判定步骤中产生的是被修改的结果,那么结束所述应用。
5.根据权利要求1所述的方法,其中,所述DLL产生步骤还包括:激活用于防止使用调试器对所述应用进行分析的抗调试功能的步骤。
6.根据权利要求1所述的方法,其中,所述DLL产生步骤还包括:激活用于防止转储所述应用的存储状态的抗转储功能的步骤。
7.根据权利要求1所述的方法,其中,所述DLL模块调用步骤包括DLL信息提取步骤:从所述安全逻辑DLL提取所述特定模块的信息。
8.根据权利要求7所述的方法,其中,所述DLL信息提取步骤包括使用程序集类加载所述DLL信息的步骤。
9.根据权利要求8所述的方法,其中,所述DLL信息提取步骤包括将所述程序集类的对象存入至所述应用中的步骤。
10.根据权利要求8所述的方法,其中,所述DLL模块调用步骤包括如下步骤:使用被加载至所述程序集类的所述DLL信息调用包含于所述安全逻辑DLL中的安全模块。
11.在为支持由通用中间语言代码构成的应用和由本地代码构成的插件的平台中使用的用户DLL(dynamiclinklibrary)提供安全性的方法中,为基于通用中间语言的程序提供安全性的方法包括以下步骤:
DLL产生步骤:通过对在所述应用中使用的安全逻辑的源代码进行编译来产生由通用中间语言代码构成的安全逻辑DLL;
加密的DLL产生步骤:通过对所述安全逻辑DLL进行加密来产生加密的DLL;和
安全模块插件产生步骤:产生含有所述加密的DLL的安全模块插件。
12.根据权利要求11所述的方法,其中,所述安全模块插件产生步骤还包括:
散列码产生步骤:生成每个文件的散列码,以验证所述应用、所述安全模块插件和执行所述应用所需的必要文件的完整性检验;
散列注册表产生步骤:产生含有针对每个文件产生的所述散列码的散列注册表;和
散列注册表存储步骤:将所述散列注册表存入所述安全模块插件内。
13.根据权利要求12所述的方法,其中,所述散列码产生步骤还包括散列码提取步骤:针对所述安全模块插件、含有应用的DLL以及所述平台的必要插件和DLL提取每个文件的散列码。
14.在为支持由通用中间语言代码构成的应用和由本地代码构成的插件的平台中使用的用户DLL(dynamiclinklibrary)提供安全性的装置中,为基于通用中间语言的程序提供安全性的装置包括:
DLL产生单元,其通过对在所述应用中使用的安全逻辑的源代码进行编译来产生由中间语言代码构成的安全逻辑DLL;
加密单元,所述加密单元连接至所述DLL产生单元且通过对所述安全逻辑DLL进行加密来产生加密的DLL;和
安全模块插件产生单元,所述安全模块插件产生单元连接至所述加密单元且产生含有所述加密的DLL的安全模块插件。
15.根据权利要求14所述的装置,其中,所述安全模块插件产生单元还包括:
散列码产生单元,所述散列码产生单元针对每个文件产生散列码,以验证所述应用、所述安全模块插件和执行所述应用所需的必要文件的完整性检验;和
散列注册表产生单元,所述散列注册表产生单元连接至所述散列码产生单元并且通过针对每个文件产生的所述散列码来产生散列注册表。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020130099950A KR101471589B1 (ko) | 2013-08-22 | 2013-08-22 | 공통중간언어 기반 프로그램을 위한 보안 제공 방법 |
KR10-2013-0099950 | 2013-08-22 | ||
PCT/KR2014/007445 WO2015026091A1 (ko) | 2013-08-22 | 2014-08-11 | 공통 중간 언어 기반 프로그램을 위한 보안 제공 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105612527A true CN105612527A (zh) | 2016-05-25 |
Family
ID=52483827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480055107.4A Pending CN105612527A (zh) | 2013-08-22 | 2014-08-11 | 为基于通用中间语言的程序提供安全性的方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20160203087A1 (zh) |
EP (1) | EP3038004A4 (zh) |
JP (1) | JP2016535354A (zh) |
KR (1) | KR101471589B1 (zh) |
CN (1) | CN105612527A (zh) |
WO (1) | WO2015026091A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250124A (zh) * | 2016-07-25 | 2016-12-21 | 百富计算机技术(深圳)有限公司 | 功能模块跨平台运行的实现方法和装置 |
CN107657154A (zh) * | 2017-09-18 | 2018-02-02 | 北京深思数盾科技股份有限公司 | 一种目标程序的保护方法、装置、设备及存储介质 |
CN109840400A (zh) * | 2017-11-24 | 2019-06-04 | Inka 安特沃客有限公司 | 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法 |
CN110046479A (zh) * | 2019-03-21 | 2019-07-23 | 腾讯科技(深圳)有限公司 | 一种基于安卓操作系统的链接库文件反调试方法及装置 |
CN110472425A (zh) * | 2019-07-18 | 2019-11-19 | 福建天晴在线互动科技有限公司 | 基于Mono的Unity插件加密方法、存储介质 |
Families Citing this family (69)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101633724B1 (ko) * | 2014-12-23 | 2016-07-08 | (주)잉카엔트웍스 | 피호출 프로그램 보안 장치 및 방법 |
KR101667774B1 (ko) * | 2015-04-23 | 2016-10-19 | (주)잉카엔트웍스 | 스크립트 프로그램을 위한 보안 제공 장치 및 방법 |
US9740856B2 (en) * | 2015-05-13 | 2017-08-22 | SEWORKS, Inc. | Apparatus and method for managing gaming engine file in a mobile platform |
US9851953B2 (en) | 2015-06-29 | 2017-12-26 | Oracle International Corporation | Cloud based editor for generation of interpreted artifacts for mobile runtime |
KR101740133B1 (ko) * | 2015-08-10 | 2017-05-26 | 라인 가부시키가이샤 | 어플리케이션의 코드를 보호하기 위한 시스템 및 방법 |
US11102313B2 (en) | 2015-08-10 | 2021-08-24 | Oracle International Corporation | Transactional autosave with local and remote lifecycles |
US10582001B2 (en) | 2015-08-11 | 2020-03-03 | Oracle International Corporation | Asynchronous pre-caching of synchronously loaded resources |
US9959100B2 (en) * | 2015-08-12 | 2018-05-01 | Oracle International Corporation | Efficient storage and transfer of iOS binary files |
US10013668B2 (en) | 2015-08-14 | 2018-07-03 | Oracle International Corporation | Secure storage of enterprise certificates for cloud services |
US10419514B2 (en) | 2015-08-14 | 2019-09-17 | Oracle International Corporation | Discovery of federated logins |
US10452497B2 (en) | 2015-08-14 | 2019-10-22 | Oracle International Corporation | Restoration of UI state in transactional systems |
US10582012B2 (en) | 2015-10-16 | 2020-03-03 | Oracle International Corporation | Adaptive data transfer optimization |
US10255443B2 (en) | 2016-02-11 | 2019-04-09 | Line Corporation | Method, apparatus, system and non-transitory computer readable medium for code protection |
KR101771348B1 (ko) * | 2016-03-08 | 2017-08-24 | 라인 가부시키가이샤 | 패키지 파일에 대한 패킹 방법 및 시스템 |
KR101823226B1 (ko) * | 2016-02-11 | 2018-01-29 | 라인 가부시키가이샤 | 코드 보호 방법 및 시스템 |
US10341410B2 (en) | 2016-05-11 | 2019-07-02 | Oracle International Corporation | Security tokens for a multi-tenant identity and data security management cloud service |
US10581820B2 (en) | 2016-05-11 | 2020-03-03 | Oracle International Corporation | Key generation and rollover |
US9838377B1 (en) | 2016-05-11 | 2017-12-05 | Oracle International Corporation | Task segregation in a multi-tenant identity and data security management cloud service |
US10454940B2 (en) | 2016-05-11 | 2019-10-22 | Oracle International Corporation | Identity cloud service authorization model |
US10878079B2 (en) | 2016-05-11 | 2020-12-29 | Oracle International Corporation | Identity cloud service authorization model with dynamic roles and scopes |
US10425386B2 (en) | 2016-05-11 | 2019-09-24 | Oracle International Corporation | Policy enforcement point for a multi-tenant identity and data security management cloud service |
KR102543267B1 (ko) * | 2016-07-13 | 2023-06-13 | 삼성에스디에스 주식회사 | 화이트박스 암호를 이용한 암/복호화 방법 및 그 장치 |
US10530578B2 (en) | 2016-08-05 | 2020-01-07 | Oracle International Corporation | Key store service |
US10585682B2 (en) | 2016-08-05 | 2020-03-10 | Oracle International Corporation | Tenant self-service troubleshooting for a multi-tenant identity and data security management cloud service |
US10516672B2 (en) | 2016-08-05 | 2019-12-24 | Oracle International Corporation | Service discovery for a multi-tenant identity and data security management cloud service |
US10255061B2 (en) | 2016-08-05 | 2019-04-09 | Oracle International Corporation | Zero down time upgrade for a multi-tenant identity and data security management cloud service |
US10721237B2 (en) | 2016-08-05 | 2020-07-21 | Oracle International Corporation | Hierarchical processing for a virtual directory system for LDAP to SCIM proxy service |
US10263947B2 (en) | 2016-08-05 | 2019-04-16 | Oracle International Corporation | LDAP to SCIM proxy service |
US10735394B2 (en) | 2016-08-05 | 2020-08-04 | Oracle International Corporation | Caching framework for a multi-tenant identity and data security management cloud service |
US10484382B2 (en) | 2016-08-31 | 2019-11-19 | Oracle International Corporation | Data management for a multi-tenant identity cloud service |
US10511589B2 (en) | 2016-09-14 | 2019-12-17 | Oracle International Corporation | Single logout functionality for a multi-tenant identity and data security management cloud service |
US10594684B2 (en) | 2016-09-14 | 2020-03-17 | Oracle International Corporation | Generating derived credentials for a multi-tenant identity cloud service |
US10846390B2 (en) | 2016-09-14 | 2020-11-24 | Oracle International Corporation | Single sign-on functionality for a multi-tenant identity and data security management cloud service |
US10341354B2 (en) | 2016-09-16 | 2019-07-02 | Oracle International Corporation | Distributed high availability agent architecture |
US10484243B2 (en) | 2016-09-16 | 2019-11-19 | Oracle International Corporation | Application management for a multi-tenant identity cloud service |
US10791087B2 (en) | 2016-09-16 | 2020-09-29 | Oracle International Corporation | SCIM to LDAP mapping using subtype attributes |
US10445395B2 (en) | 2016-09-16 | 2019-10-15 | Oracle International Corporation | Cookie based state propagation for a multi-tenant identity cloud service |
CN109565511B (zh) | 2016-09-16 | 2021-06-29 | 甲骨文国际公司 | 用于多租户身份和数据安全管理云服务的租户和服务管理 |
US10567364B2 (en) | 2016-09-16 | 2020-02-18 | Oracle International Corporation | Preserving LDAP hierarchy in a SCIM directory using special marker groups |
US10904074B2 (en) | 2016-09-17 | 2021-01-26 | Oracle International Corporation | Composite event handler for a multi-tenant identity cloud service |
US10261836B2 (en) | 2017-03-21 | 2019-04-16 | Oracle International Corporation | Dynamic dispatching of workloads spanning heterogeneous services |
CN107092517B (zh) * | 2017-03-30 | 2020-09-11 | 北京深思数盾科技股份有限公司 | 一种sdk工具包的生成方法及装置 |
US10454915B2 (en) | 2017-05-18 | 2019-10-22 | Oracle International Corporation | User authentication using kerberos with identity cloud service |
US10348858B2 (en) | 2017-09-15 | 2019-07-09 | Oracle International Corporation | Dynamic message queues for a microservice based cloud service |
US10831789B2 (en) | 2017-09-27 | 2020-11-10 | Oracle International Corporation | Reference attribute query processing for a multi-tenant cloud service |
US11271969B2 (en) | 2017-09-28 | 2022-03-08 | Oracle International Corporation | Rest-based declarative policy management |
US10834137B2 (en) | 2017-09-28 | 2020-11-10 | Oracle International Corporation | Rest-based declarative policy management |
US10705823B2 (en) | 2017-09-29 | 2020-07-07 | Oracle International Corporation | Application templates and upgrade framework for a multi-tenant identity cloud service |
CN110018953B (zh) * | 2018-01-10 | 2022-12-23 | 武汉斗鱼网络科技有限公司 | 使用python测试JS代码的方法、存储介质、设备和系统 |
US10715564B2 (en) | 2018-01-29 | 2020-07-14 | Oracle International Corporation | Dynamic client registration for an identity cloud service |
US10931656B2 (en) | 2018-03-27 | 2021-02-23 | Oracle International Corporation | Cross-region trust for a multi-tenant identity cloud service |
US10798165B2 (en) | 2018-04-02 | 2020-10-06 | Oracle International Corporation | Tenant data comparison for a multi-tenant identity cloud service |
US11165634B2 (en) | 2018-04-02 | 2021-11-02 | Oracle International Corporation | Data replication conflict detection and resolution for a multi-tenant identity cloud service |
US11258775B2 (en) | 2018-04-04 | 2022-02-22 | Oracle International Corporation | Local write for a multi-tenant identity cloud service |
US11012444B2 (en) | 2018-06-25 | 2021-05-18 | Oracle International Corporation | Declarative third party identity provider integration for a multi-tenant identity cloud service |
US10764273B2 (en) | 2018-06-28 | 2020-09-01 | Oracle International Corporation | Session synchronization across multiple devices in an identity cloud service |
US11693835B2 (en) | 2018-10-17 | 2023-07-04 | Oracle International Corporation | Dynamic database schema allocation on tenant onboarding for a multi-tenant identity cloud service |
US11321187B2 (en) | 2018-10-19 | 2022-05-03 | Oracle International Corporation | Assured lazy rollback for a multi-tenant identity cloud service |
US11651357B2 (en) | 2019-02-01 | 2023-05-16 | Oracle International Corporation | Multifactor authentication without a user footprint |
US11061929B2 (en) | 2019-02-08 | 2021-07-13 | Oracle International Corporation | Replication of resource type and schema metadata for a multi-tenant identity cloud service |
US11321343B2 (en) | 2019-02-19 | 2022-05-03 | Oracle International Corporation | Tenant replication bootstrap for a multi-tenant identity cloud service |
US11669321B2 (en) | 2019-02-20 | 2023-06-06 | Oracle International Corporation | Automated database upgrade for a multi-tenant identity cloud service |
US11792226B2 (en) | 2019-02-25 | 2023-10-17 | Oracle International Corporation | Automatic api document generation from scim metadata |
US11423111B2 (en) | 2019-02-25 | 2022-08-23 | Oracle International Corporation | Client API for rest based endpoints for a multi-tenant identify cloud service |
JP7326780B2 (ja) * | 2019-03-12 | 2023-08-16 | 日本電信電話株式会社 | ゲーム実現方法、ゲーム実現装置及びプログラム |
CN110309630B (zh) * | 2019-06-28 | 2023-05-30 | 南京冰鉴信息科技有限公司 | 一种Java代码加密方法及装置 |
US11870770B2 (en) | 2019-09-13 | 2024-01-09 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration |
US11687378B2 (en) | 2019-09-13 | 2023-06-27 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration and bridge high availability |
US11611548B2 (en) | 2019-11-22 | 2023-03-21 | Oracle International Corporation | Bulk multifactor authentication enrollment |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008018310A1 (fr) * | 2006-08-09 | 2008-02-14 | Panasonic Corporation | Dispositif d'exécution d'application, procédé, et programme |
CN101305333A (zh) * | 2003-11-26 | 2008-11-12 | 国际商业机器公司 | 防篡改可信任虚拟机 |
CN102598017A (zh) * | 2009-11-13 | 2012-07-18 | 埃德图加拿大公司 | 保护Java字节码代码免受恶意运行环境中的静态和动态攻击的系统和方法 |
WO2012129639A2 (en) * | 2011-03-31 | 2012-10-04 | Irdeto Canada Corporation | Method of securing non-native code |
JP2012234248A (ja) * | 2011-04-28 | 2012-11-29 | Kddi Corp | ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム |
CN103210396A (zh) * | 2010-10-20 | 2013-07-17 | 超威半导体公司 | 包括用于保护敏感代码和数据的架构的方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0024918D0 (en) * | 2000-10-11 | 2000-11-22 | Sealedmedia Ltd | Method of providing java tamperproofing |
US7640592B2 (en) * | 2004-06-12 | 2009-12-29 | Microsoft Corporation | Installation setup |
JP2012185535A (ja) * | 2011-03-03 | 2012-09-27 | Mitsubishi Electric Corp | コンピュータシステム |
-
2013
- 2013-08-22 KR KR1020130099950A patent/KR101471589B1/ko active IP Right Grant
-
2014
- 2014-08-11 CN CN201480055107.4A patent/CN105612527A/zh active Pending
- 2014-08-11 US US14/913,221 patent/US20160203087A1/en not_active Abandoned
- 2014-08-11 EP EP14837997.7A patent/EP3038004A4/en not_active Withdrawn
- 2014-08-11 JP JP2016536019A patent/JP2016535354A/ja active Pending
- 2014-08-11 WO PCT/KR2014/007445 patent/WO2015026091A1/ko active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101305333A (zh) * | 2003-11-26 | 2008-11-12 | 国际商业机器公司 | 防篡改可信任虚拟机 |
WO2008018310A1 (fr) * | 2006-08-09 | 2008-02-14 | Panasonic Corporation | Dispositif d'exécution d'application, procédé, et programme |
CN102598017A (zh) * | 2009-11-13 | 2012-07-18 | 埃德图加拿大公司 | 保护Java字节码代码免受恶意运行环境中的静态和动态攻击的系统和方法 |
CN103210396A (zh) * | 2010-10-20 | 2013-07-17 | 超威半导体公司 | 包括用于保护敏感代码和数据的架构的方法和装置 |
WO2012129639A2 (en) * | 2011-03-31 | 2012-10-04 | Irdeto Canada Corporation | Method of securing non-native code |
JP2012234248A (ja) * | 2011-04-28 | 2012-11-29 | Kddi Corp | ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250124A (zh) * | 2016-07-25 | 2016-12-21 | 百富计算机技术(深圳)有限公司 | 功能模块跨平台运行的实现方法和装置 |
CN106250124B (zh) * | 2016-07-25 | 2020-01-21 | 百富计算机技术(深圳)有限公司 | 功能模块跨平台运行的实现方法和装置 |
CN107657154A (zh) * | 2017-09-18 | 2018-02-02 | 北京深思数盾科技股份有限公司 | 一种目标程序的保护方法、装置、设备及存储介质 |
CN107657154B (zh) * | 2017-09-18 | 2018-08-17 | 北京深思数盾科技股份有限公司 | 一种目标程序的保护方法、装置、设备及存储介质 |
CN109840400A (zh) * | 2017-11-24 | 2019-06-04 | Inka 安特沃客有限公司 | 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法 |
CN109840400B (zh) * | 2017-11-24 | 2023-09-29 | Inka 安特沃客有限公司 | 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法 |
CN110046479A (zh) * | 2019-03-21 | 2019-07-23 | 腾讯科技(深圳)有限公司 | 一种基于安卓操作系统的链接库文件反调试方法及装置 |
CN110046479B (zh) * | 2019-03-21 | 2023-02-28 | 腾讯科技(深圳)有限公司 | 一种基于安卓操作系统的链接库文件反调试方法及装置 |
CN110472425A (zh) * | 2019-07-18 | 2019-11-19 | 福建天晴在线互动科技有限公司 | 基于Mono的Unity插件加密方法、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP2016535354A (ja) | 2016-11-10 |
EP3038004A1 (en) | 2016-06-29 |
WO2015026091A1 (ko) | 2015-02-26 |
KR101471589B1 (ko) | 2014-12-10 |
US20160203087A1 (en) | 2016-07-14 |
EP3038004A4 (en) | 2017-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105612527A (zh) | 为基于通用中间语言的程序提供安全性的方法 | |
CN105683990B (zh) | 用于保护动态库的方法和装置 | |
KR101328012B1 (ko) | 애플리케이션 코드 난독화 장치 및 그 방법 | |
CN102598017B (zh) | 提高Java字节码的防窜改能力的系统和方法 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
KR101490047B1 (ko) | 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법 | |
CN103218549B (zh) | 一种Java源代码加解密的方法及装置 | |
CN106203006A (zh) | 基于dex与so文件动态执行的Android应用加固方法 | |
CN103413073B (zh) | 一种保护java可执行程序的方法及设备 | |
US20170116410A1 (en) | Software protection | |
US20170024230A1 (en) | Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine | |
CN106650341A (zh) | 基于smali流程混淆技术的Android应用加固方法 | |
CN104298932A (zh) | 一种so文件的调用方法及装置 | |
CN103413075A (zh) | 一种通过虚拟机保护java可执行程序的方法及设备 | |
CN101957903A (zh) | 一种保护类文件的方法和装置 | |
CN111159658B (zh) | 字节码处理方法、系统、装置、计算机设备和存储介质 | |
CN109840400B (zh) | 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法 | |
CN109241707A (zh) | 应用程序的混淆方法、装置和服务器 | |
CN107871066B (zh) | 基于安卓系统的代码编译方法及装置 | |
CN108875321A (zh) | 一种指令集的生成方法、装置和电子设备 | |
KR101749209B1 (ko) | 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치 | |
KR101667774B1 (ko) | 스크립트 프로그램을 위한 보안 제공 장치 및 방법 | |
CN102855439A (zh) | 一种执行文件自校验方法及装置 | |
CN106203002B (zh) | 软件产品保护方法 | |
DONG et al. | Sesoa: Security enhancement system with online authentication for android apk |
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 |
Application publication date: 20160525 |
|
WD01 | Invention patent application deemed withdrawn after publication |