專利名稱::一種提高安卓系統(tǒng)中應用程序保護強度的方法
技術領域:
:本發(fā)明涉及軟件版權保護技術,特別涉及一種用于安卓系統(tǒng)的應用軟件版權保護方法。
背景技術:
:Dalvik是Google公司自己設計用于Android平臺的Java虛擬機。Dalvik虛擬機是Google等廠商合作開發(fā)的Android移動設備平臺的核心組成部分之一。它可以支持已轉換為·dex(即DalvikExecutable)格式的Java應用程序的運行,.dex格式是專為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統(tǒng)。Dalvik經過優(yōu)化,允許在有限的內存中同時運行多個虛擬機的實例,并且每一個Dalvik應用作為一個獨立的Linux進程執(zhí)行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。Google于2007年底正式發(fā)布了AndroidSDK,作為Android系統(tǒng)的重要特性,Dalvik虛擬機也第一次進入了人們的視野。每一個Android(安卓系統(tǒng))應用程序在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解釋下得以執(zhí)行。每一個Android應用都運行在一個Dalvik虛擬機實例里,而每一個虛擬機實例都是一個獨立的進程空間。虛擬機的線程機制、內存分配和管理等等都是依賴底層操作系統(tǒng)而實現的。所有Android應用程序的線程都對應一個Linux線程,虛擬機因而可以更多的依賴操作系統(tǒng)的線程調度和管理機制。安卓(Android)系統(tǒng)使用Dalvik虛擬機運行應用代碼,這可以保證安卓應用在不同手機廠商硬件平臺上的一致性,然而,由于Dalvik虛擬機屬于開放源代碼產品,虛擬機的實現代碼是公開的,其指令集也屬于典型的中間語言,因此基于Dalvik的應用程序可以很容易反編譯為可讀性非常好的源代碼。即使是對逆向工程不太熟悉的黑客也能很輕易的研究和修改安卓應用程序,這對于應用軟件的保護是非常不利的。微軟公司用于保護·NET平臺產品的SLP(SoftwareLicenseandProtection)技術使用了一種基于虛擬機的軟件保護方法。在普通的.NET平臺IL中間語言的虛擬機之夕卜,再提供一個稱為安全虛擬機(SecureVirtualMachine)的新虛擬機,實施保護方案時,將受保護應用程序的部分指令通過置換算法轉換為新虛擬機的指令,同時將原始應用程序中被轉換的這部分指令替換為對新虛擬機的調用指令,由于所述安全虛擬機架構和指令集并不公開,由安全虛擬機指令逆向還原出源代碼的難度大大增加,從而提高了安全強度。盡管安全虛擬機技術對于保護中間語言類型的應用軟件具有非常顯著的效果,但是SLP技術還存在著調用點易于被發(fā)現、通信過程易于被模擬等問題,當前這些問題是通過混淆器解決的,但是效果不佳。除了上述問題之外,安卓系統(tǒng)的運行環(huán)境和微軟公司的.NET平臺還存在很多不同之處,因此對于安卓平臺上的應用程序的保護而言,現在還并沒有較為合適的保護方法。
發(fā)明內容有鑒于此,本發(fā)明提供了一種保護安卓系統(tǒng)應用軟件的方法,所述方法包括如下步驟創(chuàng)建安全虛擬機,所述安全虛擬機用于執(zhí)行對應于所述應用程序中第一程序代碼指令的第二程序代碼指令;創(chuàng)建由Dalvik虛擬機執(zhí)行的第一程序代碼指令與由所述安全虛擬機執(zhí)行的所述第二程序代碼指令的映射表;根據所述映射表將所述應用程序中的所述第一程序代碼指令轉換為所述第二程序代碼指令;將所述第一程序代碼指令從所述應用程序中刪除,并將所述應用程序中調用所述已刪除的所述第一程序代碼指令的調用方式更改為本地調用方式;創(chuàng)建本地調用接口;當需要執(zhí)行所述應用程序中第一程序代碼指令時,Dalvik虛擬機執(zhí)行所述本地調用接Π;所述本地調用接口調用所述安全虛擬機,由所述安全虛擬機執(zhí)行所述第二程序代碼指令。根據本發(fā)明的一個方面,在所述安全虛擬機中執(zhí)行所述應用程序中的部分功能代碼,所述安全虛擬機具有安全保護功能。根據本發(fā)明的一個方面,所述安全虛擬機具有花指令功能、或動態(tài)指令功能、或反跟蹤功能之類的安全保護功能。根據本發(fā)明的一個方面,在根據所述映射表將所述第一程序代碼指令轉換為所述第二程序代碼指令的過程中,所述轉換過程由指令自動轉換單元根據映射表自動進行轉換,或者手動轉換。根據本發(fā)明的一個方面,根據所述調用方式的類型,創(chuàng)建所述本地調用接口。根據本發(fā)明的一個方面,提供一種提高安卓系統(tǒng)中應用程序保護強度的系統(tǒng),所述系統(tǒng)包括用于創(chuàng)建安全虛擬機的裝置,所述安全虛擬機用于執(zhí)行對應于所述應用程序中第一程序代碼指令的第二程序代碼指令;用于創(chuàng)建由Dalvik虛擬機執(zhí)行的第一程序代碼指令與由所述安全虛擬機執(zhí)行的所述第二程序代碼指令的映射表的裝置;用于根據所述映射表將所述應用程序中的所述第一程序代碼指令轉換為所述第二程序代碼指令的裝置;用于將所述第一程序代碼指令從所述應用程序中刪除,并將所述應用程序中調用所述已刪除的所述第一程序代碼指令的調用方式更改為本地調用方式的裝置;用于創(chuàng)建本地調用接口的裝置;用于當需要執(zhí)行所述應用程序中第一程序代碼指令時,Dalvik虛擬機執(zhí)行所述本地調用接口的裝置;用于所述本地調用接口調用所述安全虛擬機,由所述安全虛擬機執(zhí)行所述第二程序代碼指令的裝置。由于被轉換的代碼運行在安全虛擬機中,在不了解安全虛擬機架構的情況下,黑客不可能反編譯出完整的受保護軟件源代碼,破解軟件的成本就包括了對安全虛擬機分析的時間成本,顯然,這樣就提高了受保護軟件的安全性。圖I是根據本發(fā)明一個實施例的結構框圖2是根據本發(fā)明一個實施例的流程處理圖。具體實施例方式本發(fā)明使用安全虛擬機實現對應用軟件的保護,包括本地(Native)調用接口單元和安全虛擬機單元。其中,安全虛擬機單元用于安全運行受保護軟件的部分代碼。本地調用接口單元用于完成受保護軟件和安全虛擬機之間的相互調用。在本發(fā)明范圍內,本地調用指的是虛擬機中間語言直接調用由本地硬件指令編寫的方法,JNICJavaNativeInterface)是安卓系統(tǒng)使用的本地調用規(guī)范。JNI是JavaNativeInterface的縮寫,中文為JAVA本地調用。從Javal.I開始,JavaNativeInterface(JNI)標準成為Java平臺的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI—開始是為了本地已編譯語言,尤其是C和C++而設計的,但是它并不妨礙使用其他語言,只要調用約定受支持即可。JAVA通過JNI調用本地方法,而本地方法是以庫文件的形式存放的(在WINDOWS平臺上是DLL文件形式,在UNIX機器上是SO文件形式)。通過調用本地的庫文件的內部方法,使JAVA可以實現和本地機器的緊密聯系,調用系統(tǒng)級的各接口方法。如圖I所示,受保護軟件的指令運行在Dalvik虛擬機中,而受保護軟件中部分需要保護的功能代碼則需要運行在安全虛擬機中。當受保護軟件需要調用受保護的那些功能代碼時,在Dalvik虛擬機中運行的受保護軟件通過本地接口調用單元,訪問在安全虛擬機單元中運行的受保護的部分功能代碼,從而實現受保護軟件和安全虛擬機之間的相互訪問。具體的處理過程如下步驟100,生成安全虛擬機,并生成Dalvik指令和安全虛擬機指令的映射表。根據本發(fā)明的一個具體實施方式,在應用程序中,安卓系統(tǒng)所運行的設備的內存中均可生成安全虛擬機,安全虛擬機也可以是一個單獨運行的獨立底層虛擬機。安全虛擬機可以通過自行編碼實現,也可以通過工具生成。安全虛擬機的功能是所述安全虛擬機本身除了基本的執(zhí)行指令功能之外,還具有諸多安全功能,例如花指令、動態(tài)指令,反跟蹤等功能,通過提供的這些功能可以進一步提高安全虛擬機的分析難度。Dalvik指令有很多,例如0e00,Of01,1101,0010x,0112x等,根據Dalvik指令通過置換算法或其他方式生成對應的安全虛擬機指令。安全虛擬機指令與Dalvik指令有簡單的對應關系,可以是一對一,也可以是一對多的關系。其中,根據本發(fā)明的一個具體實施方式,安全虛擬機SVM的指令與Dalvik虛擬機的指令之間的簡單映射關系可以是一一對應,也可以是多個安全虛擬機SVM的指令對應一個Dalvik虛擬機的指令。當--對應時,表示安全虛擬機中有對應的單獨指令與Dalvik指令對應,只是編碼不同,可實現相同的功能或表示為同一意思。一對多時,表示Dalvik的一個指令在安全虛擬機中沒有直接單獨對應的能實現相同功能的指令,需要多個指令共同使用來實現相同的功能。映射表的內容就是Dalvik指令與安全虛擬機指令的對應關系表,數據結構可自行定義。例如Dalvik指令Oe00表不Oe00=>return-voidJava中的return,固定不變數據0,假如轉換為安全虛擬機指令的規(guī)則方式為將Dalvik指令前置加O或0x,據此Dalvik指令Oe00轉換為OOe00或OxOe00,OOe00或OxOe00所表示的意思與Dalvik指令Oe00意義相同,Oe00與OOe00或OxOe00即為簡單的對應關系,將Dalvik指令逐個依照此種轉換規(guī)則進行轉換,最后生成的安全虛擬機指令與Dalivk指令的對應關系列表即為映射表。上述舉例為一對一的關系,即表示Dalvik指令與安全虛擬機對應的轉換指令只是編碼不同,但是可以實現相同的功能。根據本發(fā)明的一個具體實施方式,一對多的關系,表示Dalvik的一條指令在安全虛擬機中沒有直接對應的功能,需要多條指令共同使用或經過組合以實現Dalvik中該指令相同的功能。所述安全虛擬機本身除了基本的執(zhí)行指令功能之外,還具有諸多安全功能,例如花指令、動態(tài)指令,反跟蹤等功能,進一步提高安全虛擬機的分析難度?;ㄖ噶钍浅绦蛑杏幸恍┲噶?,由設計者特別構思,希望使反匯編的時候出錯,讓破解者無法清楚正確地反匯編程序的內容。經典的花指令是一些跳轉指令,目標位置是另一條指令的中間,這樣在反匯編的時候便會出現混亂?;ㄖ噶钣锌赡芾酶鞣N指令jmp,call,ret的一些堆棧技巧,位置運算,等等。也就是說,花指令可理解為亂指令,混淆代碼,通過在程序中增加一些無用的雜亂內容、或進行一些跳轉或對代碼進行混淆,使用名稱替換、字符串加密、流程混淆、語法混淆或增加無用代碼等手段使得最初代碼面目全非,但并不影響程序的正常運行,通過這些方式迷惑反匯編軟件以打亂其分析軟件指令的目的,增加反編譯破解的難度。動態(tài)指令是指有一部分代碼是在程序運行中動態(tài)生成的。反跟蹤則為在代碼中加入會監(jiān)測是否有調試器調試的相關代碼,在運行應用程序時,代碼中的反調試代碼會監(jiān)測是否存在調試器,如果有停止解密和加載運行過程。安全虛擬機的指令集和實現方式可以每個軟件開發(fā)者不同,也可以每個應用軟件都不同,甚至可以每次實施保護方案都不同,這可以進一步提高安全虛擬機的分析難度。由于生成安全虛擬機的過程并非本發(fā)明的發(fā)明重點,而且安全虛擬機實現方式可通過自行編碼實現,因此僅舉出簡單實例來說明。根據本發(fā)明的一個具體實施方式,通過代碼來創(chuàng)建安全虛擬機,例如可以每個軟件開發(fā)者不同,當為開發(fā)者A時,假設Dalvik指令轉換為安全虛擬機指令的規(guī)則為前置補0a,Dalvik指令Oe據此轉換為安全虛擬機指令則為OaOe,OaOe指令與Dalvik指令Oe表述為相同的功能。當為開發(fā)者B時,假設Dalvik指令轉換為安全虛擬機指令規(guī)則為將Dalvik指令后置加00,Oe轉換后則為OeOO,Dalvik指令依照此種規(guī)則變換生成安全虛擬機指令集。很明顯,這種規(guī)則是可自行定義。因此,下文不再贅述這部分內容。步驟101,根據映射表將受保護軟件中要保護的方法對應指令轉換為安全虛擬機的指令。映射表即為Dalvik指令與安全虛擬機指令的對應關系表,對Dalvik的每一條指令,通過置換算法或自定義的一些算法來轉換為一個特定的指令,該指令和Dalvik指令有對應關系。根據本發(fā)明的一個具體實施方式,例如Dalvik中的Oe00指令,表示Oe00=>reurnvoidJava中的return,固定不變數據O。通過特殊方式轉換為一個指令OaOe00(此處只是示意,實際指令并非一定如此,轉換方式簡單的可例如將指令前置加Oa等方式),則Dalvik指令Oe00對應的安全虛擬機指令即為OaOe00,OaOe00表示與Dalvik指令Oe00功能相同,將Dalvik中每個指令通過上述方式進行轉換后生成的指令即為對應的安全虛擬機指令,這種對應關系列表表就是映射表。將Dalvik指令轉換為安全虛擬機指令可自行定義轉換方法。轉換過程可以由既可以采用自動轉換工具根據映射表(根據Dalvik的指令到映射表中查找對應的安全虛擬機指令)自動進行,也可以由編程人員轉換。步驟102,將要保護的方法(例如,受保護應用程序中的部分源代碼或者功能模塊)的指令從受保護應用程序的源代碼中刪除,并標記對應方法為本地(Native)方法。步驟103,根據受保護的方法類型,按照本地調用規(guī)范,生成本地調用接口。根據本發(fā)明的一個具體實施方式,方法類型包括普通方法和本地方法。而本地調用接口就是JNI(JavaNativeInterface),采用的是安卓系統(tǒng)的本地調用規(guī)范。生成接口的過程是在生成JNI的步驟中實現的,也就是JNI中生成供別的程序調用的接口。根據本發(fā)明的一個具體實施方式,具體為在生成JNI的過程中用c/c++實現.h頭文件中聲明的函數,接口名稱格式為JAVA_再加上Java程序的package路徑再加上函數名組成。步驟104,運行受保護軟件,當需要執(zhí)行被轉換的受保護代碼時,由于對應方法已經標記為本地方法,Dalvik虛擬機將執(zhí)行本地調用接口庫中的對應調用接口,此對應調用接口調用安全虛擬機,執(zhí)行轉換過的安全虛擬機指令。步驟105,轉換到安全虛擬機中指令需要調用受保護軟件中其他方法時,通過和步驟103和步驟104相同的本地調用方法完成。為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。本實施例以一個簡單的安卓程序為例,說明本發(fā)明的一種實現方式。首先,生成安全虛擬機SVM。在本實施例中,使用Dalvik虛擬機的復制版本作為安全虛擬機(SVM)。其具體實現方式是,僅僅將所有的單字節(jié)Dalvik前置填充0,擴展為32位長。根據本發(fā)明的一個具體實施方式,Dalvik指令轉換為安全虛擬機指令的具體轉換方式為將單字節(jié)Dalvik指令前置填充0,擴展為32位長度,擴展后的指令即為安全虛擬機指令,將Dalvik每個指令據此轉換方式進行轉換生成對應的安全虛擬機指令。據此,Dalvik指令與安全虛擬機指令會有對應關系。然后,將這些對應關系存儲至文件或表中,這也就生成了映射表,映射表中存儲的即為Dalvik指令與安全虛擬機指令的映射關系。其中,安全虛擬機SVM的調用接口為SVMRun。根據本發(fā)明的一個具體實施方式,將要保護的方法對應的指令在映射表中找到對應的Dalvik指令項,然后找到映射表中該Dalvik指令項對應的安全虛擬機的指令項,將找到的安全虛擬機的指令項替換至要保護的方法的對應指令代碼處,其他指令代碼以此類推,直到將其他指令代碼按此方式全部轉換完成為止。根據本發(fā)明的一個實施例,需要保護的應用程序為HelloJni.java,其用于在一個TextView中顯示字符串“HelloWorld”。為了便于理解,下面列出其主要代碼publicclassHelloJniextendsAtivity{◎OverridepublicvoidonCreate(BundlesavedlnstanceState){super.onCreate(savedlnstanceState);TextViewtv=newTextView(this)tv.setText(stringFromJNI());setContentView(tv);}publicStringstringFromJNI(){return"HelloWorld";}}受保護軟件為一個用于顯示“HelloWorld”的Java應用程序,其名稱為HelloJni.java。受保護軟件中的部分代碼是需要保護的功能代碼。在該實施例中,需要保護該HelloJni.java中的方法stringFromJNIO。那么在受保護程序的源程序中去掉此方法的代碼,并標記為本地調用,使得保護后的Hellojni.Java代碼如下publicclassHellojniextendsAtivity{◎OverridepublicvoidonCreate(BundlesavedlnstanceState){super.onCreate(savedlnstanceState);TextViewtv=newTextView(this)tv.setText(stringFromJNI());setContentView(tv);}publicnatvieStringstringFromJNI();}即,將StringFromJNlO標識更改為Native,使之成為本地方法。由于安全虛擬機SVM的指令與Dalvik虛擬機的指令存在簡單的映射關系,因此將原始程序中return"HelloWorld";對應的指令系列全部擴展為32位即可在安全虛擬機SVM中運行。根據本發(fā)明的一個具體實施方式,將原始程序中return"HelloWorld";對應的指令系列全部擴展為32位的轉換過程如下僅僅將所有的單字節(jié)Dalvik指令前置填充O,擴展為32位長(填充擴展的過程即為轉換為安全虛擬機的過程),即可作為安全虛擬機指令運行。將受保護軟件中的部分功能代碼經過上述轉換,轉換為在安全虛擬機單元中的受保護的部分功能代碼,待由安全虛擬機執(zhí)行。根據一個實施例,根據JNI規(guī)范,生成本地調用庫Hellojni.DLL。該接口庫通過編寫程序生成,其示例性的源代碼如下(C語言),其中的接口名稱為JaVa_COm_eXample_hellojni—HeIloJni_stringFromJNIjstringJava_com_example_helIojni_HelloJni_stringFromJNI(JNIEnv*env,jobjectthiz){returnSVMRun(^stringFromJNI^,env,thiz);}調用該接口庫的作用是返回由已生成的SVMRun調用接口所返回的stringFromJNIO。其中接口庫是指調用圖I中的本地調用接口單元,“JNIEnv*env,jobjectthiz”中jobjectthiz指的是使用這個函數的JAVA對象,JNIEnv*env表示JNIEnv指針是JVM創(chuàng)建的,用于Native的c/c++方法操縱Java執(zhí)行棧中的數據,比如Java類,Java方法等。運行修改后的Hellojni.Java,當調用stringFromJNI方法時,根據JNI調用規(guī)范,Dalvik虛擬機自動調用本地調用接口單元Hellojni.DLL中的接口Java_com_example_hellojni_HelloJni_stringFromJNI,再由本地調用接口單元調用安全虛擬機(SVM),從而實現了對被轉換的方法的調用。從本實施例可見,本方法僅需將要保護的方法標記為Native即可,非常簡單,方便。同時,由于在軟件中不存在對安全虛擬機SVM的直接調用指令,整個保護方案的安全強度也得到了比較大的提升,具有非常大的實用價值。上述僅就一個簡單實例進行了描述。很明顯,本領域的其它應用程序也可以按照本發(fā)明所公開的技術思想進行指令的轉換,并通過調用本地調用接口來實現安全的調用,從而達到高強度保護的目的。至于其它類似的實例,本發(fā)明就不再一一詳細描述。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換以及改進等,均應包含在本發(fā)明的保護范圍之內。權利要求1.一種提高安卓系統(tǒng)中應用程序保護強度的方法,其特征在于,所述方法包括如下步驟創(chuàng)建安全虛擬機,所述安全虛擬機用于執(zhí)行對應于所述應用程序中第一程序代碼指令的第二程序代碼指令;創(chuàng)建由Dalvik虛擬機執(zhí)行的第一程序代碼指令與由所述安全虛擬機執(zhí)行的所述第二程序代碼指令的映射表;根據所述映射表將所述應用程序中的所述第一程序代碼指令轉換為所述第二程序代碼指令;將所述第一程序代碼指令從所述應用程序中刪除,并將所述應用程序中調用所述已刪除的第一程序代碼指令的調用方式更改為本地調用方式;創(chuàng)建本地調用接口;當需要執(zhí)行所述應用程序中第一程序代碼指令時,所述Dalvik虛擬機執(zhí)行所述本地調用接口;所述本地調用接口調用所述安全虛擬機,由所述安全虛擬機執(zhí)行所述第二程序代碼指令。2.如權利要求I所述的方法,其特征在于,在所述安全虛擬機中執(zhí)行所述應用程序中的部分功能代碼,所述安全虛擬機具有安全保護功能。3.如權利要求2所述的方法,其特征在于,所述安全虛擬機具有花指令功能、或動態(tài)指令功能、或反跟蹤功能之類的安全保護功能。4.如權利要求1、2所述的方法,其特征在于,在根據所述映射表將所述第一程序代碼指令轉換為所述第二程序代碼指令的過程中,所述轉換過程由指令自動轉換單元根據所述映射表自動進行轉換,或者手動轉換。5.如權利要求1-4所述的方法,其特征在于,根據所述調用方式的類型,創(chuàng)建所述本地調用接口。6.一種提高安卓系統(tǒng)中應用程序保護強度的系統(tǒng),其特征在于,所述系統(tǒng)包括用于創(chuàng)建安全虛擬機的裝置,所述安全虛擬機用于執(zhí)行對應于所述應用程序中第一程序代碼指令的第二程序代碼指令;用于創(chuàng)建由Dalvik虛擬機執(zhí)行的第一程序代碼指令與由所述安全虛擬機執(zhí)行的所述第二程序代碼指令的映射表的裝置;用于根據所述映射表將所述應用程序中的所述第一程序代碼指令轉換為所述第二程序代碼指令的裝置;用于將所述第一程序代碼指令從所述應用程序中刪除,并將所述應用程序中調用所述已刪除的所述第一程序代碼指令的調用方式更改為本地調用方式的裝置;用于創(chuàng)建本地調用接口的裝置;用于當需要執(zhí)行所述應用程序中第一程序代碼指令時,所述Dalvik虛擬機執(zhí)行所述本地調用接口的裝置;用于所述本地調用接口調用所述安全虛擬機,由所述安全虛擬機執(zhí)行所述第二程序代碼指令的裝置。7.如權利要求6所述的系統(tǒng),其特征在于,在所述安全虛擬機中執(zhí)行所述應用程序中的部分功能代碼,所述安全虛擬機具有安全保護功能。8.如權利要求7所述的系統(tǒng),其特征在于,所述安全虛擬機具有花指令功能、或動態(tài)指令功能、或反跟蹤功能之類的安全保護功能。9.如權利要求7、8所述的系統(tǒng),其特征在于,在根據所述映射表將所述第一程序代碼指令轉換為所述第二程序代碼指令的過程中,所述轉換過程由指令自動轉換單元根據所述映射表自動進行轉換,或者手動轉換。10.如權利要求6-9所述的系統(tǒng),其特征在于,根據所述調用方式的類型,創(chuàng)建所述本地調用接口。全文摘要本發(fā)明公開了一種保護安卓系統(tǒng)應用程序的方法。通過使用本地調用接口和安全虛擬機,將安卓應用程序的關鍵代碼無縫地移植到安全環(huán)境中運行,可以大大提高反編譯和跟蹤的難度,具有非常大的實用價值。文檔編號G06F21/00GK102831342SQ201210263550公開日2012年12月19日申請日期2012年7月28日優(yōu)先權日2012年7月28日發(fā)明者不公告發(fā)明人申請人:北京深思洛克軟件技術股份有限公司