安全沙箱構(gòu)造方法及裝置制造方法【專利摘要】本發(fā)明涉及一種安全沙箱構(gòu)造方法,包括如下步驟:利用系統(tǒng)原孵化器構(gòu)造用于孵化進程環(huán)境的子孵化器;通過該子孵化器進行孵化,以為待運行應用程序建立所述進程環(huán)境;利用該子孵化器孵化而得的進程將監(jiān)控單元及待運行應用程序加載到該進程環(huán)境中運行,由所述監(jiān)控單元對所述待運行應用程序的事件行為實施監(jiān)控。本發(fā)明還提供了一種用于執(zhí)行該方法的相應的裝置。本發(fā)明使得目標應用程序能夠運行于沙箱運行環(huán)境中,能確保系統(tǒng)的安全?!緦@f明】安全沙箱構(gòu)造方法及裝置【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及計算機軟件安全【
技術(shù)領(lǐng)域:
】,尤其涉及一種安全沙箱構(gòu)造方法及相應的>J-Uρ?α裝直?!?br>背景技術(shù):
】[0002]沙箱是一種按照安全策略限制程序行為的執(zhí)行環(huán)境,目前已經(jīng)廣泛實用于各種操作系統(tǒng)中。以Android為例,一些應用程序,出于實現(xiàn)應用程序固有功能需要之外的目的,特別是商業(yè)目的,隨意申請系統(tǒng)權(quán)限,獲取用戶隱私數(shù)據(jù)、執(zhí)行網(wǎng)絡訪問、保持設(shè)備活動、發(fā)送短信行為等。輕則可能導致用戶隱私數(shù)據(jù)泄露,或者占用系統(tǒng)資源,重則可能通過惡意扣費、植入廣告、消耗資費、欺詐誘騙等,使用戶遭受損失。因此,通過沙箱技術(shù)提供的執(zhí)行環(huán)境,由沙箱對系統(tǒng)的資源、權(quán)限進行管理,讓應用程序于該沙箱中運行,應用程序的訪問先經(jīng)沙箱按安全策略進行審查,由此,形成一種相對于系統(tǒng)本身的隔離運行效果,可以有效地保護系統(tǒng)的安全。對于沙箱中所用到的安全策略,適應各種不同的操作系統(tǒng)有不同的細節(jié)考慮,這些有關(guān)技術(shù)實現(xiàn)的基本知識,均已為本領(lǐng)域技術(shù)人員所掌握,恕不贅述。[0003]目前有多種實例來實現(xiàn)沙箱技術(shù)。這些實例中,一方面,沙箱技術(shù)為了兼容市面的多種應用,一般僅僅通過限定沙箱的安全策略,控制該應用的可執(zhí)行資源而實現(xiàn)。然而,在安全領(lǐng)域,攻防雙方的技術(shù)水平此消彼長,傳統(tǒng)的僅僅通過限制安全策略的沙箱,有時難以確保能夠達到所期望的目的,必須借助于更富技術(shù)含量的新方案。另一方面,沙箱技術(shù)往往涉及系統(tǒng)底層操作,而在諸如以Android為代表的Unix系的操作系統(tǒng)中,本身有著嚴格的權(quán)限管理,這樣,便導致在未獲得Root授權(quán)的前提下,難以應用沙箱技術(shù)去構(gòu)造沙箱??梢元毐脔鑿?,去實現(xiàn)免Root環(huán)境下的沙箱環(huán)境,然而,在這種情況下,往往會引起多方面的一些技術(shù)障礙,其防護效果依然有限,這些障礙依沙箱的具體實現(xiàn)方式而定。[0004]導致這些沙箱實例難以取得更佳的效果的原因是由操作系統(tǒng)的既定的邏輯決定的。具體而言,惡意應用程序的開發(fā)人員知曉操作系統(tǒng)的實現(xiàn)原理及各種函數(shù)接口,對于Android而言,甚至熟知其開放的源代碼。在此基礎(chǔ)上,開發(fā)人員得以依據(jù)這些原理,針對系統(tǒng)所提供的各種功能模塊、函數(shù)接口等進行非法利用,繞開系統(tǒng)的安全原旨,達到自身的非法目的。[0005]Android自身出于安全的考慮,已經(jīng)利用虛擬機原理加以實現(xiàn),以最大程度降低可能的侵入可能。虛擬機用于進一步運行應用程序進程。虛擬機的啟動源于系統(tǒng)的Zygote(業(yè)內(nèi)稱之為孵化器)模塊,Zygote由Linux底層實現(xiàn)的init函數(shù)加載。Zygote被加載后,便通過自身的孵化函數(shù)fork()來復制自身,新進程被命名為SystemServer,SystemServer便是Zygote孵化的第一個成功運行的進程,為理解的便利本發(fā)明稱其為長子進程。繼而,由SystemServer進程去實現(xiàn)系統(tǒng)服務的一系列初始化功能,包括對Native層的服務進行初始化、對Java層的服務進行初始化,最終進入Binder通信系統(tǒng)監(jiān)聽請求,給應用層和系統(tǒng)提供各種服務請求。在這個過程中,ActivityManagerService(AMS)和PackageManagerService(PMS)在內(nèi)的一系列的Java層的服務被陸續(xù)加載,而Zygote則退居后臺繼續(xù)監(jiān)聽是否有新的孵化請求。一旦AMS為運行應用程序而向Zygote發(fā)起孵化請求時,Zygote便會繼續(xù)孵化自身,然后通過新的Zygote進程加載虛擬機,使該應用程序運行于該虛擬機中。[0006]Android希望利用這一機制來實現(xiàn)更為安全的進程保護效果,一方面希望確保單個的虛擬機的崩潰不會影響到其它虛擬機的正常運行,另一方面,希望每個應用程序進程都能被以虛擬機為單位進行管理。從這個角度來看,虛擬機便天然具有沙箱的特質(zhì),只不過這種特質(zhì)對程序開發(fā)人員而言的公開透明的。于是,現(xiàn)實中,不少惡意應用正是利用了Android進程加載原理的這些特質(zhì),在獲得系統(tǒng)Root權(quán)限的前提下,利用各種公知的病毒手段或黑客手段,深入到Android的底層,包括Zygote、SystemServer均可能被非法利用,從而達到非法目的。[0007]誠然,Android的權(quán)限管理較為嚴格,在未獲得Root的情況下,惡意程序的很多常規(guī)侵犯手段可以被一般的安全應用軟件拒絕。然而,隨著Android越來越開放,以及用戶出于自定義預安裝應用的需要,越來越多的移動終端設(shè)備被永久Root,于是,這些移動終端的安全問題就越來越突出,完善已Root設(shè)備的安全防護機制,實現(xiàn)更為具體有效的沙箱實例,是業(yè)內(nèi)懸而未決的問題。[0008]以上對現(xiàn)有技術(shù)的剖析可以大致概括為兩方面,或者說是兩個層次的問題,一是操作系統(tǒng)如何在已Root環(huán)境下避免受底層攻擊從而實現(xiàn)其安全目的;二是操作系統(tǒng)如何在已Root環(huán)境下實現(xiàn)更為安全的沙箱實例。這兩方面雖相輔相成,也有其相對獨立性?!?br/>發(fā)明內(nèi)容】[0009]本發(fā)明的第一目的是為了克服前述的至少部分問題而提供一種安全沙箱構(gòu)造方法。[0010]本發(fā)明的第二目在于提供一種適于構(gòu)造第一目的所述的方法的安全沙箱構(gòu)造裝置。[0011]為實現(xiàn)本發(fā)明的目的,本發(fā)明采取如下技術(shù)方案:[0012]本發(fā)明提供的一種安全沙箱構(gòu)造方法,包括如下步驟:[0013]利用系統(tǒng)原孵化器構(gòu)造用于孵化進程環(huán)境的子孵化器;[0014]通過該子孵化器進行孵化,以為待運行應用程序建立所述進程環(huán)境;[0015]利用該子孵化器孵化而得的進程將監(jiān)控單元及待運行應用程序加載到該進程環(huán)境中運行,由所述監(jiān)控單元對所述待運行應用程序的事件行為實施監(jiān)控。[0016]較佳的,利用原孵化器構(gòu)造子孵化器的進程,包括如下步驟:[0017]運行控制模塊;[0018]利用所述控制模塊,以原孵化器為基礎(chǔ)構(gòu)造所述子孵化器;[0019]建立控制模塊與子孵化器的連接。[0020]進一步,利用所述控制模塊以原孵化器為基礎(chǔ)構(gòu)造所述子孵化器的步驟包括:[0021]所述控制模塊利用原孵化器的套接口建立與原孵化器的連接;[0022]所述控制模塊關(guān)閉活動管理服務基于原孵化器的套接口所維持的連接;[0023]所述控制模塊復制原孵化器的可執(zhí)行代碼并向其植入用于加載所述監(jiān)控單元的調(diào)用指令;[0024]所述控制模塊運行所述子孵化器的代碼以構(gòu)造子孵化器。[0025]進一步,所述控制模塊通過注入于系統(tǒng)服務進程的關(guān)斷模塊實施關(guān)閉管理服務基于原孵化器的套接口所維持的連接。[0026]較佳的,所述控制模塊先于所述控制模塊利用原孵化器的套接口建立與原孵化器的連接的步驟,或先于所述控制模塊關(guān)閉活動管理服務基于原孵化器的套接口所維持的連接的步驟,而執(zhí)行該關(guān)斷模塊以實施關(guān)閉管理服務基于原孵化器的套接口所維持的連接。[0027]具體的,所述控制模塊基于子孵化器所生成的套接口建立與子孵化器的連接。[0028]進一步,所述監(jiān)控單元包括若干掛鉤插件,通過監(jiān)視所述應用程序進程的不同調(diào)用指令而適用相應的掛鉤插件,以對所述應用程序進程的事件行為進行處理。[0029]具體的,所述原孵化器與子孵化器分別配置有以不同文件名命名的套接口文件,所述套接口文件存儲于系統(tǒng)本地目錄下。[0030]較佳的,所述子孵化器的套接口文件存儲于本地目錄中/dev/socket目錄下。[0031]較佳的,所述子孵化器的進程名稱與其所產(chǎn)生的套接口文件的文件名相同。[0032]進一步,所述的控制模塊通過一前臺模塊提供的用戶界面接收用于啟動所述待運行應用程序的指令而觸發(fā)執(zhí)行。[0033]較佳的,所述用于啟動待運行應用程序的指令被系統(tǒng)的活動管理服務轉(zhuǎn)換為所述的請求,該請求被所述控制模塊中轉(zhuǎn)給所述的子孵化器,以驅(qū)動子孵化器為待運行應用程序構(gòu)造運行環(huán)境。[0034]本發(fā)明提供的一種安全沙箱構(gòu)造裝置,包括:[0035]控制模塊,用于利用系統(tǒng)原孵化器構(gòu)造用于孵化進程環(huán)境的子孵化器;[0036]所述的子孵化器,用于通過自身孵化出進程環(huán)境并在該進程環(huán)境中加載監(jiān)控單元及待運行應用程序;[0037]所述的監(jiān)控單元,用于對所述待運行應用程序的事件行為實施監(jiān)控。[0038]較佳的,所述控制模塊包括連接器與構(gòu)造器,所述連接器用于維護控制模塊基于套接口進行的連接,以分別實現(xiàn)控制模塊與原孵化器和子孵化器之間的連接;所述構(gòu)造器用于以原孵化器為基礎(chǔ)構(gòu)造所述子孵化器。[0039]具體的,所述連接器被配置為執(zhí)行如下功能:[0040]利用原孵化器的套接口建立與原孵化器的連接;[0041]向系統(tǒng)服務進程注入關(guān)斷模塊使之執(zhí)行以關(guān)閉活動管理服務基于原孵化器的套接口所維持的連接;[0042]建立控制模塊與子孵化器的連接。[0043]具體的,所述構(gòu)造器被配置為執(zhí)行如下功能:[0044]復制原孵化器的可執(zhí)行代碼;[0045]向可執(zhí)行代碼中植入用于加載所述監(jiān)控單元的調(diào)用指令;[0046]運行所述子孵化器的代碼以構(gòu)造子孵化器。[0047]進一步,所述監(jiān)控單元包括若干掛鉤插件,通過監(jiān)視所述應用程序進程的不同調(diào)用指令而適用相應的掛鉤插件,以對所述應用程序進程的事件行為進行處理。[0048]具體的,所述原孵化器與子孵化器具有以不同文件名命名的套接口文件,所述套接口文件存儲于本地目錄下。[0049]較佳的,所述子孵化器的套接口文件存儲于本地目錄中/dev/socket目錄下。[0050]較佳的,本裝置包括前臺模塊,被配置為通過提供用戶界面,接收用于啟動所述待運行應用程序的指令而驅(qū)動本裝置工作。[0051]相較于現(xiàn)有技術(shù),本發(fā)明至少具有如下優(yōu)點:[0052]1、本發(fā)明利用Android系統(tǒng)固有的原孵化器Zygote構(gòu)造出新的子孵化器,來使子孵化器獨立于原孵化器,然后通過控制活動管理服務的請求的轉(zhuǎn)向,而實現(xiàn)應用程序在由本發(fā)明構(gòu)造的子孵化器中運行。一般的非法侵入是基于系統(tǒng)已知的機制而實現(xiàn)的,由于子孵化器相對于原孵化器而獨立,惡意程序由于不能識別子孵化器的內(nèi)部機制,因而,即使惡意程序在系統(tǒng)已Root的情況下企圖深入系統(tǒng)底層對Zygote進行破壞,或者企圖通過諸如ELF文件感染的方式實現(xiàn)病毒傳播,這些企圖均可能對子孵化器失效,由子孵化器衍生進程加載的應用程序的運行也就更為安全。[0053]2、構(gòu)造出本發(fā)明的子孵化器,并且由本發(fā)明的控制模塊實現(xiàn)了活動管理服務所發(fā)起的請求的管理,其本質(zhì)即控制了應用程序的運行進程的源頭,而由于子孵化器有相對的獨立性,因此,由子孵化器孵化出來的進程空間,在加載了應用程序之后,便成為一個沙箱。輔以對應用程序的事件行為實施監(jiān)控的監(jiān)控單元之后,自然可以起到更為卓越的沙箱監(jiān)控效果。[0054]3、本發(fā)明進而通過在子孵化器構(gòu)造過程中植入外部調(diào)用指令,通過該外部調(diào)用指令可以實現(xiàn)對監(jiān)控單元的加載,使加載的監(jiān)控單元先于應用程序而啟動,從而確保事件行為監(jiān)控效果。由于子孵化器實質(zhì)上是系統(tǒng)原孵化器的副本,因此適用對forkO函數(shù)的調(diào)用,因此子孵化器才能夠用于孵化適于應用程序運行的新進程空間。本發(fā)明的子孵化器在構(gòu)造過程中便已被植入外部調(diào)用指令,通過該外部調(diào)用指令加載的模塊,包括所述監(jiān)控單元在內(nèi),均可以隨同子孵化器為響應請求所進行的孵化而被復制,因此而確保監(jiān)控單元在每個由子孵化器產(chǎn)生的新進程中起作用,可以獲得良好的運行可靠性。[0055]4、本發(fā)明可以借助其方法構(gòu)造出多個彼此相互獨立的子孵化器,這些子孵化器與原孵化器均與本發(fā)明的控制模塊通過相應的套接口建立連接,因此能被本發(fā)明的控制模塊有效地維護??刂颇K甚至可以增加相應的回收機制,在必要時通過殺滅個別子孵化器來回收系統(tǒng)內(nèi)存。更為重要地,多個子孵化器可以用于實現(xiàn)不同類型應用程序的運行管理,讓一個子孵化器對應于一類應用程序,而讓另一子孵化器對應于另一類程序,同理有利于改善系統(tǒng)安全。[0056]由此可見,本發(fā)明所取得的優(yōu)點是系統(tǒng)性,不僅具有從底層到應用層均進行安全防護的效果,而且具有對進程進行靈活中轉(zhuǎn)和控制的管理功能。[0057]本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到?!緦@綀D】【附圖說明】[0058]本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變得明顯和容易理解,其中:[0059]圖1是本發(fā)明的整體構(gòu)思而提供的一種系統(tǒng)的原理框圖;[0060]圖2是本發(fā)明的應用程序進程孵化控制方法的流程示意圖;[0061]圖3是本發(fā)明的步驟S12的具體步驟流程示意圖;[0062]圖4是本發(fā)明的步驟S13的具體步驟流程示意圖;[0063]圖5是本發(fā)明的安全沙箱構(gòu)造方法的流程示意圖;[0064]圖6是本發(fā)明的步驟S31的具體步驟流程示意圖;[0065]圖7是本發(fā)明的步驟S312的具體細分步驟流程示意圖?!揪唧w實施方式】[0066]下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。[0067]本【
技術(shù)領(lǐng)域:
】技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個”、“所述”和“該”也可包括復數(shù)形式。應該進一步理解的是,本發(fā)明的說明書中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。應該理解,當我們稱元件被“連接”或“耦接”到另一元件時,它可以直接連接或耦接到其他元件,或者也可以存在中間元件。此外,這里使用的“連接”或“耦接”可以包括無線連接或無線耦接。這里使用的措辭“和/或”包括一個或更多個相關(guān)聯(lián)的列出項的全部或任一單元和全部組合。[0068]本【
技術(shù)領(lǐng)域:
】技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù)語和科學術(shù)語),具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應該理解的是,諸如通用字典中定義的那些術(shù)語,應該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非像這里一樣被特定定義,否則不會用理想化或過于正式的含義來解釋。[0069]本【
技術(shù)領(lǐng)域:
】技術(shù)人員可以理解,這里所使用的“終端”、“終端設(shè)備”既包括無線信號接收器的設(shè)備,其僅具備無發(fā)射能力的無線信號接收器的設(shè)備,又包括接收和發(fā)射硬件的設(shè)備,其具有能夠在雙向通信鏈路上,執(zhí)行雙向通信的接收和發(fā)射硬件的設(shè)備。這種設(shè)備可以包括:蜂窩或其他通信設(shè)備,其具有單線路顯示器或多線路顯示器或沒有多線路顯示器的蜂窩或其他通信設(shè)備;PCS(PersonalCommunicat1nsService,個人通信系統(tǒng)),其可以組合語音、數(shù)據(jù)處理、傳真和/或數(shù)據(jù)通信能力;PDA(PersonalDigitalAssistant,個人數(shù)字助理),其可以包括射頻接收器、尋呼機、互聯(lián)網(wǎng)/內(nèi)聯(lián)網(wǎng)訪問、網(wǎng)絡瀏覽器、記事本、日歷和/或GPS(GlobalPosit1ningSystem,全球定位系統(tǒng))接收器;常規(guī)膝上型和/或掌上型計算機或其他設(shè)備,其具有和/或包括射頻接收器的常規(guī)膝上型和/或掌上型計算機或其他設(shè)備。這里所使用的“終端”、“終端設(shè)備”可以是便攜式、可運輸、安裝在交通工具(航空、海運和/或陸地)中的,或者適合于和/或配置為在本地運行,和/或以分布形式,運行在地球和/或空間的任何其他位置運行。這里所使用的“終端”、“終端設(shè)備”還可以是通信終端、上網(wǎng)終端、音樂/視頻播放終端,例如可以是PDA、MID(MobileInternetDevice,移動互聯(lián)網(wǎng)設(shè)備)和/或具有音樂/視頻播放功能的移動電話,也可以是智能電視、機頂盒等設(shè)備。[0070]本【
技術(shù)領(lǐng)域:
】技術(shù)人員可以理解,這里所使用的服務器、云端、遠端網(wǎng)絡設(shè)備等概念,具有等同效果,其包括但不限于計算機、網(wǎng)絡主機、單個網(wǎng)絡服務器、多個網(wǎng)絡服務器集或多個服務器構(gòu)成的云。在此,云由基于云計算(CloudComputing)的大量計算機或網(wǎng)絡服務器構(gòu)成,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個超級虛擬計算機。本發(fā)明的實施例中,遠端網(wǎng)絡設(shè)備、終端設(shè)備與WNS服務器之間可通過任何通信方式實現(xiàn)通信,包括但不限于,基于3GPP、LTE、WIMAX的移動通信、基于TCP/IP、UDP協(xié)議的計算機網(wǎng)絡通信以及基于藍牙、紅外傳輸標準的近距無線傳輸方式。[0071]本領(lǐng)域技術(shù)人員應當理解,本發(fā)明所稱的“應用”、“應用程序”、“應用軟件”以及類似表述的概念,是業(yè)內(nèi)技術(shù)人員所公知的相同概念,是指由一系列計算機指令及相關(guān)數(shù)據(jù)資源有機構(gòu)造的適于電子運行的計算機軟件。除非特別指定,這種命名本身不受編程語言種類、級別,也不受其賴以運行的操作系統(tǒng)或平臺所限制。理所當然地,此類概念也不受任何形式的終端所限制。[0072]本發(fā)明以下即將描述的方法和裝置所實施的應用場景,是安裝在移動終端上的基于Android操作系統(tǒng)的運行環(huán)境。[0073]本領(lǐng)域技術(shù)人員應當可以預見,由于本發(fā)明所揭示的技術(shù)涉及到對Android系統(tǒng)級別資源的調(diào)用,因而,在實施本發(fā)明前需要為以本發(fā)明實例化的應用程序的運行獲取Root權(quán)限,但獲取Root權(quán)限本身屬于現(xiàn)有且公知的先決技術(shù),現(xiàn)實中移動終端用戶已經(jīng)具備自行獲取Root權(quán)限的操作能力和自覺意識。此外,部分開明的移動終端在其機器出廠時已經(jīng)為用戶開放了系統(tǒng)的Root權(quán)限,或者故意為獲取Root權(quán)限提供了便利手段。因此,不應將其視為影響本發(fā)明實施的必要構(gòu)件。[0074]眾所周知,Root權(quán)限是指Unix類操作系統(tǒng)(包括Linux、Android)的系統(tǒng)管理員權(quán)限,類似于Windows(視窗)系統(tǒng)中的Administrator(管理員)權(quán)限;Root權(quán)限可以訪問和修改用戶的移動設(shè)備中幾乎所有的文件(Android系統(tǒng)文件及用戶文件,不包括ROM)。但是,由于目前移動終端系統(tǒng)對于Root權(quán)限的管理依然嚴格,通常情況下多數(shù)應用或程序都不具備Root權(quán)限,因此對于某些需要具備Root權(quán)限的操作就無法執(zhí)行,例如安裝或卸載應用等操作,又如實施本發(fā)明的方法和裝置?;诖?,本發(fā)明推薦通過如下方式獲取Root權(quán)限:通過調(diào)用系統(tǒng)內(nèi)置的SU(SuperUser,超級用戶)命令獲取Root權(quán)限,或者通過獲取具有Root權(quán)限的shell獲取Root權(quán)限并在shell中啟動進程,然后在獲取所述系統(tǒng)的Root權(quán)限授權(quán)后,即可使后續(xù)其他調(diào)用進程需執(zhí)行相關(guān)操作時無需重復申請Root權(quán)限;具體Root權(quán)限獲取過程可參照現(xiàn)有技術(shù)的Root權(quán)限調(diào)用函數(shù),因關(guān)于Root提權(quán)的實現(xiàn)純屬現(xiàn)有技術(shù)范疇,本發(fā)明在此不再贅述。獲取Root權(quán)限之后,也就可以對系統(tǒng)實施底層操作,包括本發(fā)明中對Zygote的ELF感染接觸、讓控制模塊作為底層服務而運行、甚至由此建立的基于Binder機制的通信等,均基于此而實現(xiàn)。[0075]本發(fā)明的實現(xiàn)依賴于Android操作系統(tǒng)的固有原理,因而,同理,有必要先介紹以下內(nèi)容:[0076]—、Zygote啟動過程:[0077]Android系統(tǒng)在啟動時首先會啟動Linux基礎(chǔ)系統(tǒng),然后引導加載LinuxKernel并啟動初始化進程(Init)。接著啟動Linux守護進程。在啟動Linux守護進程的同時還需要啟動Zygote進程。[0078]Zygote在業(yè)內(nèi)被形象地稱為孵化器,Zygote進程啟動后,首先初始化一個DalvikVM(虛擬機)實例,然后為它加載資源與系統(tǒng)共享庫,并開啟Socket監(jiān)聽服務,當收到創(chuàng)建DalvikVM實例請求時,會通過COW(copyonwrite)技術(shù)最大程度地復用自己,生成一個新的DalvikVM實例。DalvikVM實例的創(chuàng)建方法基于Linux系統(tǒng)的fork原理。Zygote進程在系統(tǒng)運行期間,通過Socket監(jiān)聽端口接收到創(chuàng)建虛擬機請求時,通過調(diào)用fork函數(shù),從自身孵化出DalvikVM實例,可以將其理解為孵化出了用于運行目標應用程序的進程空間。[0079]在Zygote進程啟動完成之后,Init進程會啟動Runtime進程。Runtime進程首先初始化服務管理器(ServiceManager),并把它注冊為綁定服務(Binderservices)的默認上下文管理器,負責綁定服務的注冊與查找。然后Runtime進程會向Zygote進程發(fā)送啟動系統(tǒng)服務組件(SystemServer)的請求,Zygote進程收到請求后,會“孵化”出一個新的DalvikVM實例并啟動系統(tǒng)服務進程。[0080]SystemServer會首先啟動兩個本地服務(由C或C++編寫的native服務),SurfaceFlinger和Aud1Flinger,這兩個本地系統(tǒng)服務向服務管理器注冊成為IPC服務對象,以便在需要它們的時候很容易查找到。然后SystemServer會啟動一些Android系統(tǒng)管理服務,包括硬件服務和系統(tǒng)框架核心平臺服務,其中也包括活動管理服務ActivityManagerService(AMS),并將它們注冊為IPC服務對象。[0081]當SystemServer加載了所有的系統(tǒng)服務后就意味著系統(tǒng)就準備好了,它會向所有服務發(fā)送一個系統(tǒng)準備完畢(systemReady)廣播。當需要啟動一個Android應用程序時,ActivityManagerService會通過Socket進程間通信機制,發(fā)送請求通知Zygote進程為這個應用程序創(chuàng)建一個新的進程。[0082]二、AMS響應應用程序啟動過程:[0083]Android應用程序框架層中,是由ActivityManagerService組件負責為Android應用程序創(chuàng)建新的進程的,它本來也是運行在一個獨立的進程之中,不過這個進程是在系統(tǒng)啟動的過程中創(chuàng)建的。ActivityManagerService組件一般會在以下情況下為應用程序創(chuàng)建一個新的進程:當系統(tǒng)決定要在一個新的進程中啟動一個Activity或者Service時,AMS就會試圖去創(chuàng)建一個新進程,然后在這個新的進程中啟動這個Activity或者Service。[0084]當ActivityManagerService啟動一個應用程序的時候,就會通過Socket與Zygote進程進行通信,請求它fork—個子進程出來作為這個即將要啟動的應用程序的進程。在前面的介紹中可以看到,系統(tǒng)中的兩個重要服務PackageManagerService和ActivityManagerService,都是由SystemServer進程來負責啟動的,而SystemServer進程本身是Zygote進程在啟動的過程中fork出來的。[0085]可以看出,Zygote與AMS之間,是基于socket套接口實現(xiàn)通信的。Zygote在啟動之前由init創(chuàng)建socket套接口文件,存儲于系統(tǒng)目錄/dev/socket之下,并且通常所創(chuàng)建的套接口文件,其文件名與Zygote進程名稱是相同的,因而,通過這一機制,在上述系統(tǒng)目錄處查看套接口文件,即可驗證系統(tǒng)是否創(chuàng)建了新的孵化器。該文件存儲關(guān)于該socket套接口的設(shè)置數(shù)據(jù)。AMS正是通過讀取一個這樣的套接口文件來建立其與Zygote的直接通信機制的。后續(xù)本發(fā)明即將揭示的基于socket的通信機制,均與此處同理實現(xiàn)。[0086]三、向系統(tǒng)服務進程SystemServer注入功能模塊的參考技術(shù):[0087]如前所述,Zygote啟動后,第一件事便是從自身fork出SystemServer,使其成為系統(tǒng)服務進程,通過該系統(tǒng)服務進程而加載AMS、PMS等服務進程。因此,現(xiàn)有技術(shù)中廣泛使用注入技術(shù)來將需要實現(xiàn)特定功能的功能函數(shù)注入到SystemServer中,使之得以執(zhí)行,實現(xiàn)目的。[0088]例如現(xiàn)有技術(shù)中的一種實現(xiàn)系統(tǒng)服務進程代碼注入的過程為:[0089]步驟1:查找Android系統(tǒng)中com.android,phone,system_server,/system/bin/meidaserver三個進程的進程號ProcessID,即PID;[0090]步驟2:根據(jù)所述的PID分別對所述的三個進程的運行狀態(tài)進行修改,執(zhí)行加載監(jiān)視器模塊指令,開辟內(nèi)存空間并將用來加載監(jiān)視器模塊的指令寫入其中;[0091]步驟3:分別更改所述的三個進程的寄存器狀態(tài),使CPU跳轉(zhuǎn)執(zhí)行所述的指令;[0092]步驟4:根據(jù)所述的指令,加載監(jiān)視器模塊到注入器模塊的內(nèi)存空間中,所述的監(jiān)視器模塊開始初始化操作;[0093]步驟5:監(jiān)視器模塊在初始化結(jié)束后,查找當前進程的libbinder.so的初始地址,并定位1ctl函數(shù)在libbinder.so的全局對象列表GlobalOjectsTable中對應的表項的地址,即GOT中對應的表項的地址;[0094]步驟6:修改1ctl對應的GOT表項的內(nèi)容,使用鉤子函數(shù)hooked_1ctl的地址進行替換;[0095]步驟7:軟件執(zhí)行敏感行為時,會通過1ctl與com.android,phone,system_server,/system/bin/mediaserver三個進程的一個或者多個進行通信和數(shù)據(jù)交換,鉤子函數(shù)hooked_1ctl讀取并解析軟件的敏感行為類型;[0096]步驟8:所述的監(jiān)視器模塊寫入敏感行為的發(fā)起者和時間到日志文件中,得到軟件敏感行為監(jiān)控記錄;[0097]步驟9:所述的監(jiān)視器模塊監(jiān)控到敏感行為時,發(fā)送消息給用戶,同時使敏感行為的操作暫停;[0098]步驟10:所述的用戶決定是否運行敏感行為的執(zhí)行,返回同意或者拒絕命令給所述的監(jiān)視器模塊;[0099]步驟11:所述的監(jiān)視器模塊獲取所述的用戶選擇的結(jié)果,若用戶選擇同意則使敏感行為繼續(xù)執(zhí)行;若用戶選擇拒絕則終止敏感行為的繼續(xù)執(zhí)行。[0100]現(xiàn)有技術(shù)中能夠?qū)崿F(xiàn)類似上述的注入的方案不勝枚舉,可以參照上述關(guān)于監(jiān)視器模塊的方法來為本發(fā)明后續(xù)揭示的控制模塊向系統(tǒng)服務進程SystemServer的注入提供已知方案。但為使本發(fā)明后續(xù)的揭示更有清楚,有必要知悉,本發(fā)明即將揭示的關(guān)斷模塊,用于實現(xiàn)關(guān)閉AMS與Zygote之間Socket連接的相關(guān)函數(shù),可被實現(xiàn)于如前一示例所揭示的共享庫文件libbinder.so中,在這種情況下,通過對該動態(tài)庫文件進行反向,可以至少部分地了解實現(xiàn)本發(fā)明的函數(shù)的實現(xiàn)細節(jié)。[0101]四、基于Linux可執(zhí)行文件ELF的感染接觸原理[0102]ELF(ExcutableLinkingFormat)文件是Linux的可執(zhí)行文件,用于存放可執(zhí)行代碼。ELF感染接觸原理是一種現(xiàn)有技術(shù),通過復制程序的可執(zhí)行代碼,向其中插入實現(xiàn)某種企圖的新增代碼,然后執(zhí)行修改后的可執(zhí)行代碼,從而實現(xiàn)對程序進行修改的目的。本發(fā)明以下的揭示,即將利用這一原理,而對系統(tǒng)原孵化器Zygote做出修改,從而構(gòu)造出子孵化器,通過子孵化器實現(xiàn)本發(fā)明的方法、裝置以及沙箱實例。[0103]在了解了上述系統(tǒng)原理和相關(guān)知識之后,便于進一步理解本發(fā)明的實施例。[0104]需要說明的是,本發(fā)明試圖結(jié)合計算機程序的靜態(tài)和動態(tài)兩個方面進行描述,所謂靜態(tài)方面,是指程序安裝包、文件、數(shù)據(jù)庫等存儲于媒介的存儲對象;所謂動態(tài)方面,是指被調(diào)入內(nèi)存中執(zhí)行的動態(tài)對象,包括但不局限于進程、線程、所用到的數(shù)據(jù)等。鑒于計算機軟件技術(shù)的這些特點,不應將本發(fā)明所述及的各個方法、步驟、子步驟、裝置、單元、模塊等,孤立地理解為僅靜態(tài)或僅動態(tài)的方面,本領(lǐng)域技術(shù)人員對此應當知曉。故而,本領(lǐng)域技術(shù)人員應當能夠依據(jù)本發(fā)明有關(guān)靜態(tài)的表述而將其對應到動態(tài)的進程活動,或者依據(jù)本發(fā)明有關(guān)動態(tài)的進程活動對應到其靜態(tài)的表現(xiàn)形式,建立起靜態(tài)與動態(tài)兩方面的必然性關(guān)聯(lián),以此為基礎(chǔ)來理解本發(fā)明。[0105]此外,本發(fā)明結(jié)合沙箱原理而提出,故而,本領(lǐng)域技術(shù)人員得以結(jié)合公知的沙箱實現(xiàn)原理來理解本發(fā)明的實施。沙箱的作用是為目標應用程序提供相對封閉的運行環(huán)境,使應用程序?qū)ο到y(tǒng)的資源訪問,借助沙箱安全策略的應用,而被限制在規(guī)定的范圍之內(nèi)。因而,本發(fā)明后續(xù)將揭示其實質(zhì)的一個方面在于提供一種沙箱實例。[0106]首先請參閱圖1來理解應用了本發(fā)明的一種應用程序進程孵化控制裝置而實現(xiàn)的一個系統(tǒng)原理框圖。該控制裝置包括控制模塊12、子孵化器13,以及系統(tǒng)固有的原孵化器10與系統(tǒng)服務進程2中活動管理服務進程模塊3(ActivityManagerService,以下簡稱AMS)。以下詳細揭示各個模塊所實現(xiàn)的功能以及工作機理:[0107]所述的控制模塊12,作為一個基于系統(tǒng)底層的獨立進程,可以建立基于Binder機制的通信,可以通過用戶的點擊指令觸發(fā)界面程序而被該程序進程所調(diào)用;也可以通過adbshell命令登錄到系統(tǒng)去執(zhí)行??刂颇K負責建立進程運行環(huán)境,為此建立各種相關(guān)連接??梢钥闯?,基于接入Android系統(tǒng)底層的需要,控制模塊具有相對復雜的功能,以下列出有助于實現(xiàn)本發(fā)明的幾個方面:一方面,該控制模塊12需要在運行過程中利用原孵化器1(Zygote)構(gòu)造出一個或多個子孵化器13(StepZygote),另一方面,需要負責向系統(tǒng)服務進程注入關(guān)斷模塊而切斷活動管理服務與原孵化器10之間的Socket連接,再一方面,控制模塊12還需要負責監(jiān)控并接收在系統(tǒng)服務進程2注冊的AMS進程所發(fā)起的請求,該請求是AMS為了加載運行應用程序而基于原孵化器10的套接口而建立的連接而提出的,控制模塊12需要將該請求轉(zhuǎn)發(fā)給所述的子孵化器13,以便確保AMS的請求得到有效的響應。AMS發(fā)起的請求,通常包括程序WD、包名之類的參數(shù),而正常情況下,孵化器將為相應的請求返回進程PID,AMS由此獲得其程序入口地址而得以加載應用程序。但由于本發(fā)明的控制模塊12的控制作用,這種機制將通過控制模塊12來中轉(zhuǎn)實現(xiàn)。[0108]可以看出,圖1所示的控制模塊12中,進一步還包括連接器122和構(gòu)造器121,以及驗證單元123。[0109]所述的連接器122負責執(zhí)行如下的功能:[0110]1、利用原孵化器10的套接口建立控制模塊12與原孵化器10的連接。這一功能的實現(xiàn),是在控制模塊12得以運行之后執(zhí)行的。控制模塊12運行之后,通過讀取原孵化器10位于/dev/socket/目錄下的zygote套接口文件,該套接口文件存儲有相應的套接口數(shù)據(jù),來建立控制模塊12到原孵化器10之間的連接,以便后續(xù)通過構(gòu)造器121構(gòu)造子孵化器13以及實現(xiàn)對原孵化器10的其他控制。[0111]2、向系統(tǒng)服務進程2注入一關(guān)斷模塊120以使之執(zhí)行,以關(guān)閉AMS與Zygote之間的Socket。具體而言,先連接并注入到SystemServer進程,獲得android,os.process類的sZygoteSocket成員,調(diào)用該成員的close方法,例如socket,closeO,實現(xiàn)AMS與Zygote之間的Socket連接的關(guān)斷,由此,活動管理服務3基于所述原孵化器10套接口所維持的連接被關(guān)閉。也就是說,前面提到AMS通過socket與Zygote直接通信,但這一通信機制在此處被關(guān)斷,從而使AMS不能直接與原孵化器10進行通信。需要注意的是,向系統(tǒng)服務進程注入用于關(guān)閉活動管理服務與原孵化器的連接的關(guān)斷模塊120這一功能,雖然在本實施例中由連接器來執(zhí)行,但本領(lǐng)域技術(shù)人員應當理解,該功能也可由較之連接器122更上位的一個模塊來執(zhí)行。[0112]3、通過子孵化器13所具有的套接口建立所述控制模塊12與該子孵化器13的連接,以向該子孵化器13(StepZygote)傳遞所述的請求。在本發(fā)明的構(gòu)造器121構(gòu)造了新的孵化器之后,依據(jù)Zygote固有的功能,將在本地目錄下產(chǎn)生一個與子孵化器13相應的套接口文名。這個套接口文件可以與子孵化器13的進程名稱(St印Zygote)同名以利識別,當然也可不同名。同理,盡管這個套接口文件可以存儲于本地的其它目錄,但推薦存儲于/del/socket目錄以利識別。由此,該連接器122便讀取該套接口文件,以該套接口與該子孵化器13建立基于socket機制的通信。[0113]所述連接器122通過執(zhí)行上述的功能,使得控制模塊12可以利用所述原孵化器10的套接口監(jiān)聽所述活動管理服務3進程(AMS)為運行應用程序而發(fā)起的請求,并且控制著原孵化器10和子孵化器13的連接端口。一旦AMS嘗試建立與默認的原孵化器10(Zygote)的連接,控制模塊12便可以收到該請求,并將其按需傳遞給原孵化器10或者子孵化器13,由相應的孵化器向其返回所需的進程PID。[0114]所述的構(gòu)造器121,參照前述關(guān)于ELF感染接觸技術(shù)的介紹,可以知曉,該構(gòu)造器121所執(zhí)行的功能中,先是復制原孵化器10的可執(zhí)行代碼,然后在執(zhí)行代碼中插入用于實現(xiàn)外部調(diào)用的調(diào)用指令,必要時加入實現(xiàn)子孵化器13的程序自校驗的代碼,最后運行修改的可執(zhí)行代碼以實現(xiàn)所述子孵化器13的構(gòu)造,由此便可實現(xiàn)利用原孵化器10構(gòu)造子孵化器13的功能。[0115]這里所稱的調(diào)用指令,可由本領(lǐng)域技術(shù)人員靈活實現(xiàn),例如,調(diào)用一個外部函數(shù),也即調(diào)用本發(fā)明后續(xù)即將詳細揭示的監(jiān)控單元130,來輔以實現(xiàn)一個沙箱實例,具體而言,實現(xiàn)對當前子孵化器13所構(gòu)造的進程空間所發(fā)生的事件行為的監(jiān)控。應當知曉,子孵化器13調(diào)用fork函數(shù)復制自身之后,這些外部調(diào)用及自校驗代碼均會被復制,也就是說,不僅子孵化器13進程自身,而且由其孵化的進程也能夠加載所述的監(jiān)控單元130,從而子孵化器13孵化一個新進程,即意味著為相應的目標應用程序提供了一個沙箱環(huán)境,也就實現(xiàn)了本發(fā)明的沙箱實例。[0116]所述控制模塊12可以依照相同的邏輯,按需調(diào)用構(gòu)造器121去實現(xiàn)多個子孵化器13,使多個子孵化器13分別用于響應不同的應用程序分類的請求,從而為Android系統(tǒng)創(chuàng)建多個安全的孵化器。外部程序?qū)υ趸?0的攻擊,理論上將不會影響到由所述控制模塊12構(gòu)建的子孵化器13。[0117]所述驗證單元123,是為了便于系統(tǒng)操作從而實現(xiàn)交互而設(shè)置的可選組件,該驗證單元123用于在控制模塊12接收所述AMS的請求之后,從該請求中提取應用程序特征信息,例如前文所述的WD、包名等信息,基于該些特征信息從本地或遠程已知設(shè)置數(shù)據(jù)(例如存儲于本地的或遠程的數(shù)據(jù)庫中)中檢驗該特征信息所對應的應用程序是否應被限制或被禁止,當其為應被限制或應被禁止的應用程序時,由控制模塊12負責將該請求中轉(zhuǎn)至所述原孵化器10之外的其余子孵化器13或不中轉(zhuǎn)該請求至任何孵化器。該已知設(shè)置數(shù)據(jù)可以存儲各個UID到子孵化器13之間的映射關(guān)系,以及是否被限制或被禁止的信息。顯然,設(shè)置驗證單元123能夠提供更安全的控制效果,通過配置所述的已知設(shè)置數(shù)據(jù),尤其在該已知設(shè)置數(shù)據(jù)能夠得到及時的遠程的更新時,可以借助這一數(shù)據(jù)來及時控制移動終端的惡意應用程序的運行。[0118]有鑒于該驗證單元123,本發(fā)明的控制模塊12在建立好與其他部件的socket連接之后,實際上發(fā)揮著路由器的作用。因此,控制模塊12需要一張類似路由表的預設(shè)置數(shù)據(jù),這一預設(shè)置數(shù)據(jù)既可以與前述驗證單元123中的已知設(shè)置數(shù)據(jù)一致,也可以是獨立的,這種情況下驗證單元123成為控制模塊12實現(xiàn)其路由功能的依據(jù),特別適用于具有多個子孵化器13的情況。而在一些簡單的實例中,例如,僅僅通過由一前臺終端提供的用戶界面收集的用戶指令,由用戶選定將待運行的目標應用程序置于沙箱中運行,即意味著將該應用程序置于子孵化器13所孵化的進程空間中運行,這種情況下,所述的預設(shè)置數(shù)據(jù)可以理解為針對該待運行目標應用而設(shè)置的參數(shù),控制模塊12通過獲取該參數(shù),便可確定將與該待運行目標應用程序相對應的請求中轉(zhuǎn)給子孵化器13而非原孵化器10,從而由該子孵化器13構(gòu)造該目標應用程序的進程空間,加載該目標應用程序使其運行。同理,如果用戶通過前臺模塊提供的用戶界面選定非沙箱運行,則控制模塊12可將其理解為應中轉(zhuǎn)給原孵化器10,從而由原孵化器10運行該目標應用程序。[0119]通過上述的分析可以看出,一個或多個子孵化器13與原孵化器10如何利用,既可取決于程序提供的安全策略,也可取決于用戶的按需選定;既可以利用數(shù)據(jù)庫技術(shù)來實現(xiàn),也可以利用參數(shù)的形式來實現(xiàn);既可以只實現(xiàn)單個子孵化器13與原孵化器10之間的調(diào)度實例,也可以實現(xiàn)多個子孵化器13與原孵化器10并存的調(diào)度實例。不管依據(jù)如何,本發(fā)明的控制模塊12均能實現(xiàn)有效的進程孵化控制和調(diào)度效果。[0120]如前所述,本發(fā)明的子孵化器13,由于本發(fā)明是采用ELF感染接觸原理去復制Zygote而構(gòu)造子孵化器13的,這種情況下,Zygote自身公知且固有的運行機制未被改變,因此,控制模塊12控制之下產(chǎn)生的子孵化器13,其依然按照原孵化器10的實現(xiàn)機理,用于響應于控制模塊12中轉(zhuǎn)的請求,而孵化出新進程,并以進程PID應答相應的請求。AMS獲得該進程PID了,即將待運行的目標應用程序加載到該相應的進程空間中,使目標應用程序得以運行??梢钥闯觯粋€子孵化器13崩潰,或者一個由子孵化器13孵化的進程死亡,不會對原孵化器10及其相關(guān)進程產(chǎn)生影響,反之亦然。[0121]由此可見,本發(fā)明的安全進程孵化控制裝置可以實現(xiàn)更為安全的進程孵化機制。[0122]為了說明本發(fā)明的應用程序進程孵化控制裝置的詳細實現(xiàn)過程,請參閱圖2,本發(fā)明結(jié)合其運行機制而提供一種應用程序進程孵化控制方法。該方法包括如下步驟:[0123]S11、向系統(tǒng)服務進程2注入關(guān)斷模塊120。[0124]由該方法所實現(xiàn)的程序在運行后,基于已獲Root權(quán)限為前提,利用公知的注入方法,向系統(tǒng)服務進程SystemServer2注入本發(fā)明的關(guān)斷模塊120,這一部分,既包括前述的共享庫文件libbinder.so,也包括對諸如地址表的修改等一切便于實現(xiàn)成功注入的操作,以便借此實現(xiàn)關(guān)閉AMS與Zygote之間的Socket連接。[0125]S12、由所述控制模塊12利用原孵化器10構(gòu)造子孵化器13。[0126]需要注意的是,這一步驟的實現(xiàn),與步驟S13中部分子步驟可以根據(jù)實際情況調(diào)整順序執(zhí)行。[0127]本步驟在實質(zhì)上是前述裝置中的構(gòu)造器121所實現(xiàn)的功能的程序化執(zhí)行過程,用于實現(xiàn)按需獲得子孵化器13,而這種需求將由控制模塊12依據(jù)前述的已知設(shè)置數(shù)據(jù)和/或預設(shè)置數(shù)據(jù)來實現(xiàn),或者依照默認規(guī)則強制自動構(gòu)造并應用。結(jié)合所述構(gòu)造器121的功能,參閱圖3,本步驟可細分為如下步驟:[0128]S121、復制原孵化器Zygote10的可執(zhí)行代碼;[0129]S122、向該可執(zhí)行代碼中插入用于實現(xiàn)外部調(diào)用的調(diào)用指令,根據(jù)不同實施例的需要,通過該調(diào)用指令調(diào)用用于實現(xiàn)本發(fā)明的沙箱實例的監(jiān)控單元130,采用該監(jiān)控單元130來實現(xiàn)對由構(gòu)造后的子孵化器13所孵化的進程空間的事件行為的監(jiān)控;[0130]S123、向該可執(zhí)行代碼插入可用于實現(xiàn)子孵化器St印Zygote13的程序自校驗的代碼,使得子孵化器13不易被攻擊;[0131]S124、運行修改后的可執(zhí)行代碼,從而使所述子孵化器13得以成功構(gòu)造,待命用于為活動管理服務ActivityManagerService3的請求孵化新進程。[0132]本領(lǐng)域技術(shù)人員應當理解,本發(fā)明中,可以通過本步驟S12在原孵化器10的基礎(chǔ)上構(gòu)造出子孵化器13,但子孵化器13的數(shù)量不應被限制為一個,理論上子孵化器13的可擴展個數(shù)僅受內(nèi)存空間的限制而復制出多個具有相同性質(zhì)的子孵化器13,只要如本發(fā)明所揭示,在控制模塊12中實現(xiàn)對多個這樣的子孵化器13的有效調(diào)度即可。[0133]需要強調(diào)的是,上述步驟S122與S123可以更換順序?qū)崿F(xiàn)。[0134]S13、由所述控制模塊12接收在系統(tǒng)服務進程2注冊的活動管理服務3(進程)為運行應用程序而發(fā)起的請求,并將其傳遞給所述子孵化器13。[0135]參照關(guān)于前述關(guān)于裝置的描述可知,本發(fā)明實現(xiàn)向系統(tǒng)服務進程SystemServer2的注入之后,控制模塊12即可搭建起新的系統(tǒng)架構(gòu),參閱圖4,其搭建過程詳見如下步驟:[0136]S131、利用原孵化器10的套接口建立控制模塊12與原孵化器10的連接。[0137]前文述及,原孵化器Zygote10的套接口文件/dev/socket/zygote是建立套接口連接的基礎(chǔ)。在本步驟中,控制模塊12讀取該套接口文件,建立與原孵化器10的連接。因此,可以優(yōu)先考慮在本子步驟之后執(zhí)行前述步驟S12,將更符合程序?qū)崿F(xiàn)邏輯。[0138]S132、執(zhí)行關(guān)斷模塊120以關(guān)閉活動管理服務3(進程)基于所述原孵化器10套接口所維持的連接。[0139]結(jié)合前文可知,AMS進程維持著其與原孵化器Zygote10的socket連接,本步驟通過注入到systemserver進程的關(guān)斷模塊120,獲得android,os.process類的sZygoteSocket成員,調(diào)用該成員的close方法例如socket,close()關(guān)閉AMS與Zygote的socket連接,使得原孵化器10不能直接響應于AMS的孵化進程的請求,以便進一步獲取更大的控制權(quán)??梢钥闯?,前述步驟Sll應于步驟S132之前實施,既可以將Sll置于S131與S132之間實施,也可以將步驟S132置于步驟Sll之后緊接實施。本領(lǐng)域技術(shù)人員可以據(jù)此變化出本發(fā)明的多個實施例。[0140]S133、利用所述原孵化器10的套接口監(jiān)聽所述活動管理服務3的為運行應用進程而發(fā)起的請求。[0141]在前述的步驟中,在控制模塊12的控制下,已經(jīng)實現(xiàn)了所述子孵化器13的構(gòu)造,因此,依照init函數(shù)創(chuàng)建Zygote的邏輯,子孵化器StepZygotel3將創(chuàng)建/dev/socket/stepzygote套接口文件,當然該套接口文件可以存儲于本地他處,也未必需與子孵化器10的進程名稱相同。在本步驟中,控制模塊12通過該套接口建立與該子孵化器13的socket連接,與此同時,開始監(jiān)聽原孵化器10的套接口,以便監(jiān)聽AMS發(fā)起的孵化進程的請求,以便在后續(xù)由控制模塊12向原孵化器10或子孵化器13中轉(zhuǎn)該請求。[0142]在本步驟中,控制模塊12以上述子步驟實現(xiàn)了新的系統(tǒng)架構(gòu)的搭建,為了進一步實現(xiàn)更為智能化的管理,控制模塊12還實現(xiàn)了類似路由的功能。具體而言,當控制模塊12接收到AMS發(fā)起的所述的請求時,需要對其做出傳遞給何種孵化器的判斷,這一判斷的邏輯依據(jù)可以有多種實施方式。在前述有關(guān)本發(fā)明的孵化控制裝置的揭示中已經(jīng)給出的預設(shè)置數(shù)據(jù)與已知設(shè)置數(shù)據(jù)及其相關(guān)輔助邏輯,便是本方法的執(zhí)行基礎(chǔ)。[0143]為了實現(xiàn)這種類路由的控制功能,所述控制模塊12將按照如下過程來處理其所監(jiān)聽到的AMS請求:[0144]所述控制模塊12,在控制模塊12接收所述AMS的請求之后,從該請求中提取應用程序特征信息,例如前文所述的WD、包名等信息,基于該些特征信息從本地或遠程已知設(shè)置數(shù)據(jù)(例如存儲于本地的或遠程的數(shù)據(jù)庫中)中檢驗該特征信息所對應的應用程序是否應被限制或被禁止,當其為應被限制或應被禁止的應用程序時,由控制模塊12負責將該請求中轉(zhuǎn)至所述原孵化器10之外的其余子孵化器13或不中轉(zhuǎn)該請求至任何孵化器。該已知設(shè)置數(shù)據(jù)可以存儲各個WD到子孵化器13之間的映射關(guān)系,以及是否被限制或被禁止的信息。顯然,經(jīng)控制模塊12的這一處理過程,能夠提供更安全有效的控制管理效果,通過配置所述的已知設(shè)置數(shù)據(jù),尤其在該已知設(shè)置數(shù)據(jù)能夠得到及時的遠程的更新時,可以借助這類數(shù)據(jù)來及時控制移動終端的惡意應用程序的運行。[0145]本發(fā)明的控制模塊12在建立好與其他部件的socket連接之后,實際上已經(jīng)發(fā)揮著路由器的作用。因此,控制模塊12需要一張類似路由表的預設(shè)置數(shù)據(jù),這一預設(shè)置數(shù)據(jù)既可以與前述的已知設(shè)置數(shù)據(jù)一致,甚至合二為一,也可以是獨立的,這種情況下相關(guān)數(shù)據(jù)便成為控制模塊12實現(xiàn)其路由功能的依據(jù),特別適用于具有多個子孵化器13的情況。在一些簡單的實例中,例如,僅僅通過由一前臺模塊提供的用戶界面收集的用戶指令,由用戶選定將待運行的目標應用程序置于沙箱中運行,即意味著將該應用程序置于子孵化器13所孵化的進程空間中運行,這種情況下,所述的預設(shè)置數(shù)據(jù)可以將該用戶指令表征為針對該待運行目標應用而設(shè)置的參數(shù),控制模塊12通過獲取該參數(shù),便可確定將與該待運行目標應用程序相對應的請求中轉(zhuǎn)給子孵化器13而非原孵化器10,從而由該子孵化器13構(gòu)造該目標應用程序的進程空間,加載該目標應用程序使其運行。同理,如果用戶通過前臺終端提供的用戶界面選定非沙箱運行,則控制模塊12可將其理解為應中轉(zhuǎn)給原孵化器10,從而由原孵化器10運行該目標應用程序。[0146]通過上述的分析可以看出,一個或多個子孵化器13與原孵化器10如何利用,既可取決于程序提供的安全策略,也可取決于用戶的按需選定;既可以利用數(shù)據(jù)庫技術(shù)來實現(xiàn),也可以利用參數(shù)的形式來實現(xiàn);既可以只實現(xiàn)單個子孵化器13與原孵化器10之間的調(diào)度實例,也可以實現(xiàn)多個子孵化器13與原孵化器10并存的調(diào)度實例。不管依據(jù)如何,本發(fā)明的控制模塊12均能實現(xiàn)有效的進程孵化控制和調(diào)度效果。[0147]S14、由所述子孵化器13響應于該請求而孵化新進程以運行所述應用程序。[0148]如前所述,經(jīng)過所述控制模塊12的控制,當控制模塊12將AMS的請求進行中轉(zhuǎn)后,其中轉(zhuǎn)目標是確定的,如果不是中轉(zhuǎn)給系統(tǒng)的原孵化器10,則轉(zhuǎn)給由本發(fā)明構(gòu)造的一個子孵化器13。需要注意的是,這里所稱的中轉(zhuǎn),不僅包括形式與構(gòu)造上與AMS發(fā)起的原請求一致的指令,還包括經(jīng)過所述控制模塊12按照與子孵化器13協(xié)議(例如通過在構(gòu)造子孵化器13時向可執(zhí)行代碼插入相關(guān)代碼)的既定規(guī)則進行加工轉(zhuǎn)換、能被所述子孵化器13依照該協(xié)議而讀取的指令。[0149]所述子孵化器13接收到控制模塊12中轉(zhuǎn)過來的源自AMS的請求后,按照其繼承自原孵化器Zygote10的固有機制,利用其forkO函數(shù)復制出新進程,將進程PID返回給AMS0新進程負責加載在構(gòu)造子孵化器13時預置了接口的監(jiān)控單元130,還負責構(gòu)造用于運行發(fā)起所述請求的目標應用程序的虛擬機實例。[0150]AMS獲得進程入口之后,便將所述目標應用程序加載到所述新進程的進程空間中,使所述目標應用程序成功運行。當該目標應用程序結(jié)束運行時,由系統(tǒng)依其機制回收虛擬機空間即可。[0151]如上所述,本發(fā)明提供的應用程序進程孵化控制方法能夠?qū)贸绦蚨云鸬礁鼮榘踩姆雷o效果。[0152]可以看出,前文對本發(fā)明的應用程序進程孵化控制方法和裝置的揭示,著重在系統(tǒng)層面的實現(xiàn)。進一步,本發(fā)明將通過其他實例突出揭示本發(fā)明在應用層的實施例。應當理解,基于同一發(fā)明構(gòu)思的事實,前文所揭示的方法和裝置中所采用的思路,也將同樣適用于后文的方法和裝置中。[0153]請再次參閱圖1,本發(fā)明進一步提供的一種安全沙箱構(gòu)造裝置,包括控制模塊12、子孵化器13,以及監(jiān)控單元130。[0154]所述的控制模塊12,參考圖1,具體包括連接器122、構(gòu)造器121,進一步還可以包括一驗證單元123。所述連接器122用于維護控制模塊12基于套接口進行的連接,以實現(xiàn)控制模塊12分別與原孵化器10和子孵化器13之間的連接;所述構(gòu)造器121用于以原孵化器10為基礎(chǔ)構(gòu)造所述子孵化器13;所述驗證單元123用于依據(jù)已知設(shè)置數(shù)據(jù)確定是否滿足所述活動管理服務3(進程)發(fā)起的請求。在僅實現(xiàn)一個子孵化器13并且默認由該子孵化器13為所有應用程序孵化新進程的實例中,所述驗證單元123顯然可以直接省略。[0155]所述的控制模塊12通過前文所揭示的方法向系統(tǒng)服務進程SystemServer2注入關(guān)斷模塊120,該關(guān)斷模塊120的注入可以由控制模塊12的連接器122來實施并負責調(diào)用。所述的控制模塊12,作為一個基于系統(tǒng)底層的獨立進程,可以建立基于Binder機制的通信,可以通過用戶的點擊指令觸發(fā)界面程序而被該程序進程所調(diào)用;也可以通過adbshell命令登錄到系統(tǒng)去執(zhí)行??刂颇K負責建立進程運行環(huán)境,為此建立各種相關(guān)連接。可以看出,基于接入Android系統(tǒng)底層的需要,控制模塊具有相對復雜的功能,以下列出有助于實現(xiàn)本發(fā)明的幾個方面:一方面,需要在運行過程中利用原孵化器1(Zygote)構(gòu)造出一個或多個子孵化器13(St印Zygote),另一方面,需要負責向系統(tǒng)服務進程注入關(guān)斷模塊而切斷活動管理服務與原孵化器10之間的Socket連接,再一方面,控制模塊12還需要負責監(jiān)控并接收在系統(tǒng)服務進程2注冊的AMS進程所發(fā)起的請求,該請求是AMS為了加載運行應用程序而基于原孵化器10的套接口而建立的連接而提出的,控制模塊12需要將該請求轉(zhuǎn)發(fā)給所述的子孵化器13,以便確保AMS的請求得到有效的響應。AMS發(fā)起的請求,通常包括程序WD、包名之類的參數(shù),而正常情況下,孵化器將為相應的請求返回進程PID,AMS由此獲得其程序入口地址而得以加載應用程序。但由于本發(fā)明的控制模塊12的控制作用,這種機制將通過控制模塊12來中轉(zhuǎn)實現(xiàn)。[0156]所述的連接器122負責執(zhí)行如下的功能:[0157]1、利用原孵化器10的套接口建立控制模塊12與原孵化器10的連接。這一功能的實現(xiàn),是在控制模塊12得以運行之后執(zhí)行的??刂颇K12運行之后,通過讀取原孵化器10位于/dev/socket/目錄下的zygote套接口文件,該套接口文件存儲有相應的套接口數(shù)據(jù),來建立控制模塊12到原孵化器10之間的連接,以便后續(xù)通過構(gòu)造器121構(gòu)造子孵化器13以及實現(xiàn)對原孵化器10的其他控制。[0158]2、向系統(tǒng)服務進程2注入一關(guān)斷模塊120以使之執(zhí)行,以關(guān)閉AMS與Zygote之間的Socket。具體而言,先連接并注入到SystemServer進程,獲得android,os.process類的sZygoteSocket成員,調(diào)用該成員的close方法,例如socket,closeO,實現(xiàn)AMS與Zygote之間的Socket連接的關(guān)斷,由此,活動管理服務3基于所述原孵化器10套接口所維持的連接被關(guān)閉。也就是說,前面提到AMS通過socket與Zygote直接通信,但這一通信機制在此處被關(guān)斷,從而使AMS不能直接與原孵化器10進行通信。[0159]3、通過子孵化器13所具有的套接口建立所述控制模塊12與該子孵化器13的連接,以向該子孵化器13(StepZygote)傳遞所述的請求。在本發(fā)明的構(gòu)造器121構(gòu)造了新的孵化器之后,依據(jù)Zygote固有的功能,將在本地目錄下產(chǎn)生一個與子孵化器13相應的套接口文名。這個套接口文件可以與子孵化器13的進程名稱(St印Zygote)同名以利識別,當然也可不同名。同理,盡管這個套接口文件可以存儲于本地的其它目錄,但推薦存儲于/del/socket目錄以利識別。,由此,該連接器122便讀取該套接口文件,以該套接口與該子孵化器13建立基于socket機制的通信。[0160]所述連接器122通過執(zhí)行上述的功能,使得控制模塊12可以利用所述原孵化器10的套接口監(jiān)聽所述活動管理服務3進程(AMS)為運行應用程序而發(fā)起的請求,并且控制著原孵化器10和子孵化器13的連接端口。一旦AMS嘗試建立與默認的原孵化器10(Zygote)的連接,控制模塊12便可以收到該請求,并將其按需傳遞給原孵化器10或者子孵化器13,由相應的孵化器向其返回所需的進程PID。[0161]所述的構(gòu)造器121,參照前述關(guān)于ELF感染接觸技術(shù)的介紹,可以知曉,該構(gòu)造器121所執(zhí)行的功能中,先是復制原孵化器10的可執(zhí)行代碼,然后在執(zhí)行代碼中插入用于實現(xiàn)外部調(diào)用的調(diào)用指令,必要時加入實現(xiàn)子孵化器13的程序自校驗的代碼,最后運行修改的可執(zhí)行代碼以實現(xiàn)所述子孵化器13的構(gòu)造,由此便可實現(xiàn)利用原孵化器10構(gòu)造子孵化器13的功能。[0162]這里所稱的調(diào)用指令,可由本領(lǐng)域技術(shù)人員靈活實現(xiàn),例如,調(diào)用一個外部函數(shù),也即調(diào)用本裝置的監(jiān)控單元130,來輔以實現(xiàn)一個沙箱實例,具體而言,實現(xiàn)對當前子孵化器13所構(gòu)造的進程空間所發(fā)生的事件行為的監(jiān)控。應當知曉,子孵化器13調(diào)用fork函數(shù)復制自身之后,這些外部調(diào)用及自校驗代碼均會被復制,也就是說,不僅子孵化器13進程自身,而且由其孵化的進程也能夠加載所述的監(jiān)控單元130,從而子孵化器13孵化一個新進程,即意味著為相應的目標應用程序提供了一個沙箱運行環(huán)境。[0163]理論上,所述控制模塊12可以依照相同的邏輯,按需調(diào)用構(gòu)造器121去實現(xiàn)多個子孵化器13,使多個子孵化器13分別用于響應不同的應用程序分類的請求,從而為Android系統(tǒng)創(chuàng)建多個安全的孵化器。外部程序?qū)υ趸?0的攻擊,理論上將不會影響到由所述控制模塊12構(gòu)建的子孵化器13。[0164]所述驗證單元123,是為了便于系統(tǒng)操作從而實現(xiàn)交互而設(shè)置的可選組件,該驗證單元123用于在控制模塊12接收所述AMS的請求之后,從該請求中提取應用程序特征信息,例如前文所述的WD、包名等信息,基于該些特征信息從本地或遠程已知設(shè)置數(shù)據(jù)(例如存儲于本地的或遠程的數(shù)據(jù)庫中)中檢驗該特征信息所對應的應用程序是否應被限制或被禁止,當其為應被限制或應被禁止的應用程序時,由控制模塊12負責將該請求中轉(zhuǎn)至所述原孵化器10之外的其余子孵化器13或不中轉(zhuǎn)該請求至任何孵化器。該已知設(shè)置數(shù)據(jù)可以存儲各個UID到子孵化器13之間的映射關(guān)系,以及是否被限制或被禁止的信息。顯然,設(shè)置驗證單元123能夠提供更安全的控制效果,通過配置所述的已知設(shè)置數(shù)據(jù),尤其在該已知設(shè)置數(shù)據(jù)能夠得到及時的遠程的更新時,可以借助這一數(shù)據(jù)來及時控制移動終端的惡意應用程序的運行。[0165]有鑒于該驗證單元123,本發(fā)明的控制模塊12在建立好與其他部件的socket連接之后,實際上發(fā)揮著路由器的作用。因此,控制模塊12需要一張類似路由表的預設(shè)置數(shù)據(jù),這一預設(shè)置數(shù)據(jù)既可以與前述驗證單元123中的已知設(shè)置數(shù)據(jù)一致,也可以是獨立的,這種情況下驗證單元123成為控制模塊12實現(xiàn)其路由功能的依據(jù),特別適用于具有多個子孵化器13的情況。而在一些簡單的實例中,例如,僅僅通過由一前臺終端提供的用戶界面收集的用戶指令,由用戶選定將待運行的目標應用程序置于沙箱中運行,即意味著將該應用程序置于子孵化器13所孵化的進程空間中運行,這種情況下,所述的預設(shè)置數(shù)據(jù)可以理解為針對該待運行目標應用而設(shè)置的參數(shù),控制模塊12通過獲取該參數(shù),便可確定將與該待運行目標應用程序相對應的請求中轉(zhuǎn)給子孵化器13而非原孵化器10,從而由該子孵化器13構(gòu)造該目標應用程序的進程空間,加載該目標應用程序使其運行。同理,如果用戶通過前臺模塊提供的用戶界面選定非沙箱運行,則控制模塊12可將其理解為應中轉(zhuǎn)給原孵化器10,從而由原孵化器10運行該目標應用程序。[0166]通過上述的分析可以看出,一個或多個子孵化器13與原孵化器10如何利用,既可取決于程序提供的安全策略,也可取決于用戶的按需選定;既可以利用數(shù)據(jù)庫技術(shù)來實現(xiàn),也可以利用參數(shù)的形式來實現(xiàn);既可以只實現(xiàn)單個子孵化器13與原孵化器10之間的調(diào)度實例,也可以實現(xiàn)多個子孵化器13與原孵化器10并存的調(diào)度實例。不管依據(jù)如何,本發(fā)明的控制模塊12均能實現(xiàn)有效的進程孵化控制和調(diào)度效果。[0167]所述的子孵化器13,用于通過自身孵化出進程環(huán)境并在該進程環(huán)境中加載監(jiān)控單元130及待運行程序。子孵化器13由控制模塊12加以構(gòu)造,控制模塊12采用ELF感染接觸原理去復制Zygote而構(gòu)造子孵化器13的,這種情況下,Zygote自身公知且固有的運行機制未被改變,因此,控制模塊12控制之下產(chǎn)生的子孵化器13,其依然按照原孵化器10的實現(xiàn)機理,用于響應于控制模塊12中轉(zhuǎn)的請求,而孵化出新進程,并以進程PID應答相應的請求。AMS獲得該進程PID了,即將待運行的目標應用程序加載到該相應的進程空間中,使目標應用程序得以運行??梢钥闯?,一個子孵化器13崩潰,或者一個由子孵化器13孵化的進程死亡,不會對原孵化器10及其相關(guān)進程產(chǎn)生影響,反之亦然。而在目標應用程序得以運行之前,由于控制模塊12已經(jīng)在子孵化器13內(nèi)部插入了調(diào)用所述監(jiān)控單元130的指令,因此,這種情況下,監(jiān)控單元130將被提前加載,并且開始監(jiān)視其所在的進程所發(fā)生的事件行為,也就實現(xiàn)了對后續(xù)運行的目標應用程序的事件行為的監(jiān)控。[0168]所述監(jiān)控單元130,如前所述,先于所述目標應用程序而加載。該監(jiān)控單元130便是沙箱運行環(huán)境的實現(xiàn)者,采用Hook技術(shù),由若干掛鉤插件構(gòu)成,每個掛鉤插件均可利用鉤子函數(shù)對目標應用程序中的相關(guān)調(diào)用指令的入口點進行監(jiān)視,截獲此一調(diào)用指令,轉(zhuǎn)向執(zhí)行相應的鉤子函數(shù),由該鉤子函數(shù)依據(jù)沙箱自身邏輯來應答該調(diào)用指令,從而達到監(jiān)控事件行為的目的。[0169]這里需要補充的是:術(shù)語“鉤子”涵蓋了用于通過攔截在軟件組件之間傳遞的函數(shù)調(diào)用、消息、或事件來改變或增加操作系統(tǒng)、應用程序、或其他軟件組件的行為的技術(shù)。而處理這種被攔截的函數(shù)調(diào)用、事件或消息的代碼就被稱為鉤子hook函數(shù)。鉤子通常用于各種目標,包括對功能進行調(diào)試和對功能進行擴展。其示例可以包括在鍵盤或鼠標事件傳遞到應用程序之前攔截它們,或者攔截系統(tǒng)調(diào)用(systemcall),以監(jiān)視或修改應用程序或其他組件的功能等等。本實施例即可采用鉤子hook函數(shù)接管所述應用程序運行時所需的安裝自校驗操作。[0170]為敘述的簡潔,涉及利用本發(fā)明的監(jiān)控單元130的具體介紹將在后續(xù)集中給出,此處暫緩說明。[0171]由于本裝置主要在于說明沙箱實例的構(gòu)造,因此,有必要進一步披露以本發(fā)明所實現(xiàn)的程序中的一個前臺模塊,該前臺模塊可以通過一個安全軟件所提供的活動組件(Activity)來實現(xiàn),運行該活動組件將提供一用戶界面,通過該用戶界面可以羅列出所有系統(tǒng)應用和用戶應用,當用戶點擊運行某個應用時,可以進一步彈框讓用戶選定是否通過沙箱運行此一目標應用,當用戶選定通過沙箱運行時,自然地,將驅(qū)動調(diào)用本發(fā)明中控制模塊12以此為依據(jù),將AMS因上述的界面操作所產(chǎn)生的請求中轉(zhuǎn)給子孵化器13而非原孵化器10,使該目標應用運行于本發(fā)明的監(jiān)控單元130所實現(xiàn)的沙箱運行環(huán)境中。當然,前臺模塊所提供的用戶界面的實現(xiàn)是非常靈活多變的,以上僅僅給出一個示例,本領(lǐng)域技術(shù)人員可以靈活變通。如果出于便利考慮,本領(lǐng)域技術(shù)人員可以避開這一用戶界面提供過程,直接默認為通過子孵化器13啟動用戶在桌面點擊的目標應用程序,則整個過程將變得更為快捷便利,而控制模塊12的路由工作以及其驗證單元123的工作也將相應簡化。[0172]可見,本發(fā)明的安全沙箱構(gòu)造裝置,通過構(gòu)建子孵化器13的形式,能夠為待運行應用程序?qū)崿F(xiàn)更為安全、可靠、獨立的運行環(huán)境。[0173]相應的,本發(fā)明的安全沙箱構(gòu)造方法,在于依照機器的處理流程做更高效的組織,通過執(zhí)行本方法,優(yōu)化依照本發(fā)明所實現(xiàn)的程序的運行效率,以便更高效地為應用程序構(gòu)造沙箱運行環(huán)境。[0174]請參閱圖5所示,本發(fā)明的安全沙箱構(gòu)造方法,包括如下步驟:[0175]S31、利用系統(tǒng)原孵化器10構(gòu)造用于孵化進程環(huán)境的子孵化器13。[0176]本步驟的目的在于構(gòu)造出獨立于系統(tǒng)原孵化器Zygote10進程的新的子孵化器13,可以參閱圖6所示細分為如下子步驟:[0177]S311、運行控制模塊12。[0178]如前所述,用戶可以通過前臺模塊接收用戶在桌面或者該前臺模塊提供的用戶界面的點擊操作,或者通過adbshell指令,來驅(qū)動某個目標應用程序被前臺模塊識別為需要運行于沙箱中,從而調(diào)用本發(fā)明的控制模塊12使之得以運行。關(guān)于控制模塊12所實現(xiàn)的功能詳見前文,恕不贅述。[0179]S312、利用所述控制模塊12,以原孵化器10為基礎(chǔ)構(gòu)造所述子孵化器13。[0180]本步驟采用控制模塊12按需獲得子孵化器13,而這種需求可由控制模塊12依據(jù)前述的已知設(shè)置數(shù)據(jù)和/或預設(shè)置數(shù)據(jù)來實現(xiàn),或者依照默認規(guī)則強制自動構(gòu)造并應用。結(jié)合圖7,本子步驟可細分為如下由控制模塊12執(zhí)行的子步驟:[0181]S3121、所述控制模塊12利用原孵化器10的套接口建立與原孵化器10的連接。[0182]原孵化器Zygote10的套接口文件/dev/socket/zygote是建立套接口連接的基礎(chǔ)。在本步驟中,控制模塊12讀取該套接口文件,建立與原孵化器10的連接。[0183]S3122、向系統(tǒng)服務進程注入關(guān)斷模塊使之執(zhí)行以關(guān)閉活動管理服務3基于原孵化器10的套接口所維持的連接。[0184]如前所述,由控制模塊向系統(tǒng)服務進程2注入一關(guān)斷模塊120以使之執(zhí)行,以關(guān)閉AMS與Zygote之間的Socket。具體而言,先連接并注入到SystemServer進程,獲得android,os.process類的sZygoteSocket成員,調(diào)用該成員的close方法,例如socket,closeO,實現(xiàn)AMS與Zygote之間的Socket連接的關(guān)斷,由此,使得原孵化器10不能直接響應于AMS的孵化進程的請求,控制模塊進一步獲取更大的控制權(quán)。需要指出的是,參閱前文所述,向系統(tǒng)服務進程2注入關(guān)斷模塊120與利用該關(guān)斷模塊120去執(zhí)行關(guān)斷操作可以分為兩個細分步驟,且只要保持這種先后關(guān)系,兩個細分步驟可以分離執(zhí)行。也就是說,關(guān)斷模塊120并注入后,并不一定要即時實施關(guān)斷操作,可以是在后續(xù)再因為后一細分步驟的需要而被提前調(diào)用實施關(guān)斷。前一細分步驟可在控制模塊12—被調(diào)用即被執(zhí)行,然后執(zhí)行S3121,再執(zhí)行后一步驟。本領(lǐng)域技術(shù)人員應當知曉此一變通,將這種原理作用下的所有變化情況均視為同于本實施例。[0185]S3123、復制原孵化器10的可執(zhí)行代碼并向其植入用于加載所述監(jiān)控單元130的調(diào)用指令。[0186]本子步驟的執(zhí)行,可以參閱前述關(guān)于步驟S121-S124的過程:[0187]S121、復制原孵化器Zygote10的可執(zhí)行代碼;[0188]S122、向該可執(zhí)行代碼中插入用于實現(xiàn)外部調(diào)用的調(diào)用指令,根據(jù)不同實施例的需要,通過該調(diào)用指令調(diào)用本發(fā)明的監(jiān)控單元130,以便采用該監(jiān)控單元130來實現(xiàn)對由構(gòu)造后的子孵化器13所孵化的進程空間的事件行為的監(jiān)控;[0189]S123、按需向該可執(zhí)行代碼插入可用于實現(xiàn)子孵化器St印Zygote13的程序自校驗的代碼,使得子孵化器13不易被攻擊,請注意,本子步驟在本發(fā)明中是可選的;[0190]S124、運行修改后的可執(zhí)行代碼,從而使所述子孵化器13得以成功構(gòu)造,待命用于為活動管理服務ActivityManagerService3的請求孵化新進程。[0191]S3124、執(zhí)行所述子孵化器的代碼以構(gòu)造子孵化器13。一旦該子孵化器13得以運行,便相對于原孵化器Zygote10而獨立存在。[0192]S313、建立控制模塊12與子孵化器13的連接。[0193]在控制模塊12的控制下,已經(jīng)實現(xiàn)了所述子孵化器13的構(gòu)造和運行,因此,依照ini進程創(chuàng)造Zygote的邏輯,子孵化器StepZygote13將創(chuàng)建/dev/socket/stepzygote套接口文件。在本子步驟中,控制模塊12通過該套接口建立與該子孵化器13的socket連接,由此,便可開始監(jiān)聽原孵化器10的套接口,以便監(jiān)聽AMS發(fā)起的孵化進程的請求,以便在后續(xù)由控制模塊12向原孵化器10或子孵化器13中轉(zhuǎn)該請求。[0194]本領(lǐng)域技術(shù)人員應當理解,本發(fā)明中,可以通過本步驟S31在原孵化器10的基礎(chǔ)上構(gòu)造出子孵化器13,但子孵化器13的數(shù)量不應被限制為一個,理論上子孵化器13的可擴展個數(shù)僅受內(nèi)存空間的限制而復制出多個具有相同性質(zhì)的子孵化器13,只要如本發(fā)明所揭示,在控制模塊12中實現(xiàn)對多個這樣的子孵化器13的有效調(diào)度即可。[0195]需要強調(diào)的是,為了簡化篇幅,本安全沙箱構(gòu)造方法中所涉及控制模塊12,與本發(fā)明的安全沙箱構(gòu)造裝置所描述的控制裝置有一一對應性,故控制模塊12在該裝置中所實現(xiàn)的其它可選性功能,例如關(guān)于中轉(zhuǎn)、路由的功能等,也同樣適用于本方法中,由適用這些可選性功能而引起的一系列的變化,也應當隨帶考慮到本方法中來,恕不贅述。[0196]S32、通過該子孵化器13進行孵化,以為待運行應用程序建立所述進程環(huán)境。[0197]到達本步驟時,已經(jīng)過所述控制模塊12的控制,當控制模塊12監(jiān)聽到AMS的請求后,將對該請求進行中轉(zhuǎn),其中轉(zhuǎn)目標是確定的,如果不是中轉(zhuǎn)給系統(tǒng)的原孵化器10,則轉(zhuǎn)給由本發(fā)明構(gòu)造的一個子孵化器13。需要注意的是,這里所稱的中轉(zhuǎn),不僅包括形式與構(gòu)造上與AMS發(fā)起的原請求一致的指令,還包括經(jīng)過所述控制模塊12按照與子孵化器13協(xié)議(例如通過在構(gòu)造子孵化器13時向可執(zhí)行代碼插入相關(guān)代碼)的既定規(guī)則進行加工轉(zhuǎn)換、能被所述子孵化器13依照該協(xié)議而讀取的指令。[0198]所述子孵化器13接收到控制模塊12中轉(zhuǎn)過來的源自AMS的請求后,按照其繼承自原孵化器Zygote10的固有機制,利用其forkO函數(shù)復制出新進程,將進程PID返回給AMS,以此便為待運行應用程序建立了相應的進程環(huán)境。[0199]S33、利用該子孵化器13孵化而得的進程,將監(jiān)控單元130及待運行應用程序加載到該進程環(huán)境中運行,由所述監(jiān)控單元130對所述待運行應用程序的事件行為實施監(jiān)控。[0200]新進程負責加載在構(gòu)造子孵化器13時預置了接口的監(jiān)控單元130,還負責構(gòu)造用于運行發(fā)起所述請求的目標應用程序的虛擬機實例。AMS獲得進程入口之后,便將所述目標應用程序加載到所述新進程的進程空間中,使所述目標應用程序成功運行。當該目標應用程序結(jié)束運行時,由系統(tǒng)依其機制回收虛擬機空間即可。[0201]以上詳細揭示了利用本發(fā)明的安全沙箱構(gòu)造方法為應用程序構(gòu)造安全的沙箱實例的全過程,借助該方法,可以為每一應用程序建構(gòu)更為安全可靠的進程運行環(huán)境。[0202]盡管前文詳細披露了本發(fā)明的整體構(gòu)思的多個方面,但仍未盡述。本領(lǐng)域技術(shù)人員應當知曉,本發(fā)明的應用程序進程孵化控制方法、裝置與安全沙箱構(gòu)造方法、裝置之間,是本發(fā)明整體構(gòu)思的兩個方面,所采用的技術(shù)手段是相互印證的,因此,其中一個方面的說明,同時也將適用于另一個方面中。故而,即使本發(fā)明的某個方面的揭示存在疏漏,本領(lǐng)域技術(shù)人員也可在另一方面尋找到所需的說明,從而還原該方面的整個方案,而不應以此為據(jù)否定該某個方面的充分記載。[0203]為了突出本發(fā)明的沙箱實例,以下進一步詳細揭示本發(fā)明前文多處述及的被子孵化器13加載的監(jiān)控單元130的相關(guān)具體實例。[0204]利用本發(fā)明的監(jiān)控單元130,可以實現(xiàn)更為強大的沙箱運行環(huán)境的構(gòu)建。所述監(jiān)控單元130可以從一后臺沙箱HOOK框架中獲取對應于特定的事件行為的掛鉤插件(鉤子函數(shù)),利用一個或多個掛鉤插件掛鉤并監(jiān)控目標應用的特定事件行為從而實現(xiàn)對目標應用程序進程的活動的監(jiān)控。所述的后臺沙箱HOOK框架的掛鉤插件,在云端進行集中管理,向各終端進行分發(fā)。其中,云端主要構(gòu)造有Java掛鉤插件庫和Native掛鉤插件庫。監(jiān)控單元130需要掛鉤具體事件行為時,通過遠程插件接口向后臺沙箱HOOK框架發(fā)送請求,獲得針對特定事件行為的HOOK函數(shù),即所述的掛鉤插件,借此建立對特定事件行為的監(jiān)控捕獲和處理。[0205]子孵化器13加載了監(jiān)控單元130之后,將加載向AMS發(fā)起運行請求的所述目標應用程序。由于監(jiān)控單元130先于目標應用程序被加載,目標應用程序一旦運行,便已被監(jiān)控單元130利用掛鉤插件建立了監(jiān)控,因此,目標應用程序的一切事件行為均在監(jiān)控單元130的監(jiān)控范圍之內(nèi)。目標應用程序的安裝包是完整未經(jīng)修改的,能夠通過PackageManagerService的查驗,因此,目標應用程序被加載后,能夠完全合法、正常地運行,實現(xiàn)目標應用程序原本能實現(xiàn)的所有功能。[0206]由于監(jiān)控單元130與目標應用程序均處于同一進程空間,因而,運行中的監(jiān)控單元130即建立了對目標應用程序一切事件行為的監(jiān)控。目標應用程序運行過程中產(chǎn)生的任何事件行為,其事件消息均會被監(jiān)控單元130捕獲并進行相應的處理。[0207]目標應用程序產(chǎn)生的特定事件行為被監(jiān)控單元130捕獲,實質(zhì)上是觸發(fā)特定事件行為時,所產(chǎn)生的事件消息被監(jiān)控單元130中相應的掛鉤插件(鉤子函數(shù))所捕獲。捕獲該事件消息,即可知曉該事件的意圖,繼而可以進行后續(xù)的處理。[0208]對特定事件行為進行處理,需要獲取事件行為處理策略。在這一子步驟中,可以進一步借助系統(tǒng)服務來實現(xiàn)人機交互功能。為了實現(xiàn)人機交互效果,本發(fā)明可預先結(jié)合安全軟件將一交互模塊注冊為系統(tǒng)服務,通過監(jiān)控單元130建立的交互接口與該交互模塊通信,從而實現(xiàn)對用戶指令或預設(shè)指令的獲取。[0209]事件行為策略的獲取方式非常靈活多樣,可通過構(gòu)造一策略生成裝置來執(zhí)行,以下列舉幾種為本發(fā)明所擇一或任意組合使用的策略:[0210](I)監(jiān)控單元130捕獲特定事件行為后,通過該交互接口,向所述交互模塊發(fā)送請求,由交互模塊向安全軟件的用戶界面彈窗問詢用戶處理策略,該彈窗界面可以直接告知用戶有關(guān)事件行為的內(nèi)容及其風險,由用戶選擇相應的選項作為處理策略。用戶選擇相應選項并確定后,交互模塊獲得針對該特定事件行為的處理策略,將其反饋給監(jiān)控單元130,監(jiān)控單元130即可根據(jù)該用戶指令所產(chǎn)生的處理策略對目標應用程序的相應事件行為進行下一步的處理。[0211](2)在某些已被公認為相對低風險的事件行為發(fā)生時,例如對聯(lián)系人的只讀操作行為,或者在用戶為本發(fā)明設(shè)置了自行檢索針對特定事件行為所應采取的處理策略時,本發(fā)明利用一本地策略數(shù)據(jù)庫檢索相應的針對特定事件行為的處理策略。也就是說,該本地策略數(shù)據(jù)庫中,建立了特定事件行為與相應的處理策略之間的關(guān)聯(lián),并且存儲了多種事件行為與相應的處理策略之間對應關(guān)系的記錄數(shù)據(jù),可以供本發(fā)明檢索使用。本發(fā)明從本地策略數(shù)據(jù)庫中獲取相應的處理策略后,方能對相應事件行為做下一步的處理。[0212](3)如果用戶為本發(fā)明設(shè)置了遠程獲取處理策略的選項,或者默認在本地策略數(shù)據(jù)庫檢索不到特定事件行為的具體策略時可以遠程獲取,又或通過前述第(I)種情況進行交互而在規(guī)定時限內(nèi)得不到用戶對彈窗的響應,諸如此類的情況,安全軟件均可通過其內(nèi)建的遠程策略接口,向預架構(gòu)的云端發(fā)送請求,獲得對應于該特定事件行為的相應的處理策略,并用于后續(xù)的處理。[0213]需要指出的是,有關(guān)以上三種獲取處理策略的方式,可以交叉配合使用,例如,一旦交互模塊接收到監(jiān)控單元130傳遞的事件消息的特征,即可依照默認設(shè)置,參照第(2)種方式先行檢索本地策略數(shù)據(jù)庫,獲得系統(tǒng)推薦的處理策略(如果不能從本地策略數(shù)據(jù)庫中獲得,甚至可以進一步按第(3)種方式從云端策略數(shù)據(jù)庫中獲取)。繼而,參照第(I)種方式,在彈窗界面設(shè)置系統(tǒng)推薦的處理策略為默認選項。如果用戶未在規(guī)定時限內(nèi)確認該默認選項,則以系統(tǒng)推薦的處理策略為準執(zhí)行后續(xù)指令;如果用戶將之改變?yōu)樾碌哪J選項,則向監(jiān)控單元130返回用戶設(shè)置的處理策略??梢?,人機交互過程是可以更為靈活自由地實現(xiàn)的。[0214]所述的本地策略數(shù)據(jù)庫,可以是云端策略數(shù)據(jù)庫的一個復件,因此,本發(fā)明中,設(shè)置一個更新步驟,用于下載云端策略數(shù)據(jù)庫用于更新本地策略數(shù)據(jù)庫。[0215]一般情況下,針對特定事件行為的策略可以設(shè)置為“拒絕”、“運行”、“詢問”三個常見選項,其表征的具體意向為:[0216]拒絕:針對該特定事件行為,向目標應用程序發(fā)送事件行為已經(jīng)執(zhí)行完畢的虛假消息,以禁止該事件行為實際發(fā)生;[0217]運行:針對該特定事件行為不做任何改變,將相應的事件消息直接轉(zhuǎn)送給系統(tǒng)消息機制,允許目標應用程序繼續(xù)其事件行為;[0218]詢問:獨立或依附于前述兩個選項任意之一,針對該特定事件行為,標記其狀態(tài)為未知狀態(tài),后續(xù)重復發(fā)生該行為時,需要再行彈窗詢問用戶。[0219]實際應用中,選項“詢問”可被忽略,僅需考慮是否拒絕或允許當前事件行為發(fā)生即可。[0220]所述的事件行為,多種多樣,具體包括如下幾大類型:[0221](I)終端、聯(lián)網(wǎng)有關(guān)的操作:[0222]獲取運營商信息:目標應用程序例如通過getSimOperatorNameO函數(shù)可以獲得移動終端的MSI,由此可進一步判斷運營商的名稱,進一步可以向運營商發(fā)送約定指令,實現(xiàn)扣費之類的非法目的。監(jiān)控平臺通過掛鉤與此相關(guān)的消息,便可以對事件行為的捕獲。[0223]切換APN操作:同理,目標應用程序通過與APN切換有關(guān)的函數(shù)實現(xiàn)ANP切換控制的操作,也可被監(jiān)控單元130通過調(diào)用相應的掛鉤插件進行監(jiān)控。[0224]類似的操作,還包括獲取手機識別碼ME的操作,也與上述同理。[0225](2)通知欄廣告操作:通知欄廣告是最易被惡意程序利用的手段,監(jiān)控單元130通過調(diào)用相應的掛鉤插件對notify函數(shù)產(chǎn)生的事件消息進行監(jiān)控,也可對其實施監(jiān)控。[0226](3)通信操作:[0227]如電話拔打操作,通過StartActivityO函數(shù)可以監(jiān)控調(diào)用系統(tǒng)撥號界面的事件行為,利用相應的掛鉤插件可以對拔打電話操作建立事件行為監(jiān)控。[0228]短信操作,對應于sendTextMessageO之類的函數(shù),同理,可以借助掛鉤插件對這類函數(shù)建立事件行為監(jiān)控。[0229]聯(lián)系人操作:一般對應于queryO、insertO函數(shù),監(jiān)控單元130利用掛鉤插件掛鉤此類函數(shù)可以實現(xiàn)對此類事件行為的監(jiān)控捕獲。[0230](4)命令操作:[0231]如SU提權(quán)操作或執(zhí)行命令操作,均需用到ExecveO函數(shù),監(jiān)控單元130通過監(jiān)控此函數(shù)的返回消息,便可實現(xiàn)該類事件行為的監(jiān)控。[0232](5)界面及訪問操作:[0233]如創(chuàng)造快捷方式的事件行為,則對應于sentBroacastO函數(shù)。同理,對于隱藏程序圖標的操作,也可對應特定函數(shù)監(jiān)控之。[0234]如HTTP網(wǎng)絡訪問操作,貝U對應于sentToO、writeO等函數(shù)。[0235](6)程序操作:[0236]如應用加載操作,指當前目標應用程序加載相關(guān)應用的操作,通過對dexClassloaderO、1adLibrary()等函數(shù)進行掛鉤監(jiān)控,可以實現(xiàn)對此類事件行為的捕-M-犾。[0237]又如安裝子包,貝U對應于installPackageO函數(shù)。[0238](7)其它危險操作:[0239]例如,子進程侵入操作、衍生物操作、激活設(shè)備管理器操作等。[0240]其中,子進程是指目標應用程序建立的子進程,在目標應用程序創(chuàng)建子進程時,該子進程的進程空間同樣由子孵化器13構(gòu)造產(chǎn)生,因此,子進程也難逃監(jiān)控單元130監(jiān)控。因而,無論是目標應用程序的自身進程,還是其創(chuàng)建的子進程,它們直接或間接所觸發(fā)的事件行為,均能被本發(fā)明的監(jiān)控單元130所監(jiān)控,實現(xiàn)較佳的主動防御效果更佳。[0241]而所述衍生物,是指目標應用程序自行創(chuàng)建的文件,或者遠程下載的文件,通常是指敏感的衍生物,例如安裝包。通過掛鉤fCloseO函數(shù)可以捕獲該事件。需要指出的是,當監(jiān)控單元130捕獲該事件行為后,可以按照前述的方法,進一步利用遠程規(guī)則庫接口發(fā)送請求到云端,由云端利用其黑、白、灰的安全等級行為規(guī)則判斷該衍生物的安全等級,本發(fā)明通過遠程規(guī)則庫接口獲得云端判定結(jié)果后,進一步彈窗詢問用戶是否建立對該敏感衍生物的主動防御,由此便可進一步鞏固主動防御的效果。[0242]上述的事件行為僅為摘錄之用,不能理解為對本發(fā)明監(jiān)控的事件行為的限制。[0243]依據(jù)上述的處理策略和上述關(guān)于事件行為的說明,本發(fā)明的主動防御方法便可對各種事件行為進行相應的處理。以下列舉幾種典型的應用實例:[0244](I)對目標應用程序的精細攔截的應用:[0245]部分惡意程序被安裝后,在相當長的一段時間內(nèi)處于正常使用的狀態(tài),麻痹用戶的安全意識。但是,運行一段長時間之后,該目標應用程序嘗試從后臺插入一短信引起用戶的關(guān)注,達到廣告和詐騙的效果。對該目標應用程序應用本發(fā)明的沙箱實例之后,通過監(jiān)控單元130中相應的掛鉤插件對短信操作函數(shù)的監(jiān)控,一旦目標應用程序產(chǎn)生短信操作的事件行為,便可捕獲這一事件行為,繼而,監(jiān)控單元130通過其交互接口通知作為系統(tǒng)服務運行的交互模塊,由交互模塊向用戶界面彈窗示警。用戶點選“拒絕”的處理策略后,被逆反饋給監(jiān)控單元130,其中相應的掛鉤插件便能阻該事件行為的實際發(fā)生,達到防范風險的目的。[0246](2)對目標應用程序釋放惡意文件的應用。[0247]目標應用程序為一游戲軟件,通過檢查更新的方式下載并釋放惡意子包,并且調(diào)用系統(tǒng)功能安裝該子包。本發(fā)明對該目標應用程序建立了主動防御的沙箱運行環(huán)境之后,可以監(jiān)控到其下載完文件而產(chǎn)生的事件行為,據(jù)此通過交互模塊彈窗告警。用戶指令拒絕之后,監(jiān)控單元130中相應的掛鉤插件便可直接刪除該文件,或者僅僅拒絕該文件的安裝行為。[0248]本發(fā)明中,對于諸如此類的惡意子包,視為敏感衍生物,對衍生物是否存在惡意的判斷,可以通過利用預先確定的安全等級進行遠程判斷。具體而言,當檢測到產(chǎn)生衍生物時,將相應的文件或者其簽名之類的特征信息通過遠程規(guī)則庫接口發(fā)送給云端,并從云端獲得其安全等級,如果為黑、灰應用,則在彈窗中建議用戶拒絕安裝;如果為白應用,則可允許其通行。通過這種方法,便可實現(xiàn)對敏感衍生物的安全防御。如果云端檢測不到該衍生物的相關(guān)記錄,可以要求本方法為其上傳該文件,并由云端標示為未知應用,相應的,以灰應用予以標記,以備后用。[0249](3)對子進程侵入的應用。[0250]被監(jiān)控的目標應用程序在運行過程中創(chuàng)建子進程,而子進程進一步釋放惡意事件行為。監(jiān)控單元130監(jiān)控到目標應用程序創(chuàng)建子進程時,即獲得子進程的入口,理論上即可以內(nèi)聯(lián)鉤子的方式加載到該子進程中對該子進程的事件行為的監(jiān)控。然而,子進程由于也是由子孵化器13孵化的,因此,子孵化器13所孵化的新進程將先于該子進程而加載所述監(jiān)控單元130,不必利用內(nèi)聯(lián)鉤子也可以實現(xiàn)對所述子進程的監(jiān)控。可以看出,無論是由目標應用程序進程直接觸發(fā)的事件行為,還是由目標應用程序進程所創(chuàng)建的子進程所觸發(fā)的間接事件行為,均能被監(jiān)控單元130成功監(jiān)控。[0251]由上述的分析可見,本發(fā)明所建構(gòu)的沙箱運行環(huán)境,具有更為高效的可行性。[0252]為便于本領(lǐng)域技術(shù)人員進一步實現(xiàn)本發(fā)明,以下進一步揭示云端服務器與終端設(shè)備如何相互配合實現(xiàn)安裝包安全等級判斷的相關(guān)內(nèi)容:[0253]如前所述,由客戶端通過遠程規(guī)則庫接口發(fā)送到云端服務器的特征信息,包括:Android安裝包的包名,和/或,版本號,和/或,數(shù)字簽名,和/或,Android組件receiver的特征,和/或,Android組件service的特征,和/或,Android組件activity的特征,和/或,可執(zhí)行文件中的指令或字符串,和/或,Android安裝包目錄下各文件的MD5值(簽名)。[0254]實現(xiàn)了本發(fā)明的方法或裝置的客戶端,將指定的特征信息上傳到服務器(云端),在服務器預置的規(guī)則庫中查找與指定的單個特征信息或其組合相匹配的特征記錄;其中,所述服務器預置的規(guī)則庫中包含特征記錄及特征記錄對應的安全級別,每條特征記錄中包含單個特征信息或特征信息的組合;[0255]服務器端規(guī)則庫中預置了數(shù)千條特征記錄,其中,第一條特征記錄中列出了某種病毒的Android安裝包包名,第二條特征記錄中列出了某個正常應用的Android安裝包版本號及其數(shù)字簽名的MD5值,第三條特征記錄中列出了某個正常應用的Android安裝包包名及其receiver特征,第四條特征記錄中列出了某種木馬的Android安裝包包名、版本號及其ELF文件中的特定字符串,等等。[0256]關(guān)于安全等級的標識,即黑,白(安全)或者灰(未知,可疑)三種標識,可以進一步地表示為:[0257]安全:該應用是一個正常的應用,沒有任何威脅用戶手機安全的行為;[0258]危險:該應用存在安全風險,有可能該應用本身就是惡意軟件;也有可能該應用本來是正規(guī)公司發(fā)布的正常軟件,但是因為存在安全漏洞,導致用戶的隱私、手機安全受到威脅;[0259]謹慎:該應用是一個正常的應用,但是存在一些問題,例如會讓用戶不小心被扣費,或者有不友好的廣告遭到投訴等;當發(fā)現(xiàn)這類應用之后,會提示用戶謹慎使用并告知該應用可能的行為,但是由用戶自行決定是否清除該應用;[0260]木馬:該應用是病毒、木馬或者其他惡意軟件,此處為了簡單統(tǒng)稱為木馬,但并不表示該應用僅僅是木馬。[0261]應當理解,云端與客戶端之間的配合,可以由本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明所揭示的內(nèi)容進一步擴充、變換、增刪而改善。因而,以上揭示的內(nèi)容不應理解為實現(xiàn)本發(fā)明的方法和裝置的限制。[0262]經(jīng)過測試,本發(fā)明相對于現(xiàn)有技術(shù)有了較寬廣的應用范圍和應用效果,以下略加闡述:[0263]由于本發(fā)明已經(jīng)將HOOK框架做成了服務平臺,以掛鉤插件的方式為終端配置監(jiān)控單元130,因此,其加載僅需依賴于相應的配置文件,管理高效且易于實現(xiàn),對技術(shù)人員而言,一些簡單的函數(shù)調(diào)用僅需編寫配置文件即可實現(xiàn)掛鉤插件的配置,HOOK重入、并發(fā)性能聞。[0264]采用宿主應用程序先后實現(xiàn)對監(jiān)控單元130和目標應用程序的加載,繼而借助監(jiān)控單元130對目標應用程序的事件行為建立監(jiān)控,可以實現(xiàn)對Java函數(shù)、Native函數(shù)的掛鉤。[0265]綜上所述,本發(fā)明使得目標應用程序能夠運行于更為安全的沙箱運行環(huán)境中。[0266]以上所述僅是本發(fā)明的部分實施方式,應當指出,對于本【
技術(shù)領(lǐng)域:
】的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍?!緳?quán)利要求】1.一種安全沙箱構(gòu)造方法,其特征在于,包括如下步驟:利用系統(tǒng)原孵化器構(gòu)造用于孵化進程環(huán)境的子孵化器;通過該子孵化器進行孵化,以為待運行應用程序建立所述進程環(huán)境;利用該子孵化器孵化而得的進程將監(jiān)控單元及待運行應用程序加載到該進程環(huán)境中運行,由所述監(jiān)控單元對所述待運行應用程序的事件行為實施監(jiān)控。2.根據(jù)權(quán)利要求1所述的安全沙箱構(gòu)造方法,其特征在于,利用原孵化器構(gòu)造子孵化器的進程,包括如下步驟:運行控制模塊;利用所述控制模塊,以原孵化器為基礎(chǔ)構(gòu)造所述子孵化器;建立控制模塊與子孵化器的連接。3.根據(jù)權(quán)利要求2所述的安全沙箱構(gòu)造方法,其特征在于,利用所述控制模塊以原孵化器為基礎(chǔ)構(gòu)造所述子孵化器的步驟包括:所述控制模塊利用原孵化器的套接口建立與原孵化器的連接;所述控制模塊關(guān)閉活動管理服務基于原孵化器的套接口所維持的連接;所述控制模塊復制原孵化器的可執(zhí)行代碼并向其植入用于加載所述監(jiān)控單元的調(diào)用指令;所述控制模塊運行所述子孵化器的代碼以構(gòu)造子孵化器。4.根據(jù)權(quán)利要求3所述的安全沙箱構(gòu)造方法,其特征在于,所述控制模塊通過注入于系統(tǒng)服務進程的關(guān)斷模塊實施關(guān)閉管理服務基于原孵化器的套接口所維持的連接。5.根據(jù)權(quán)利要求2所述的安全沙箱構(gòu)造方法,其特征在于,所述控制模塊基于子孵化器所生成的套接口建立與子孵化器的連接。6.根據(jù)權(quán)利要求1所述的安全沙箱構(gòu)造方法,其特征在于,所述監(jiān)控單元包括若干掛鉤插件,通過監(jiān)視所述應用程序進程的不同調(diào)用指令而適用相應的掛鉤插件,以對所述應用程序進程的事件行為進行處理。7.一種安全沙箱構(gòu)造裝置,其特征在于,包括:控制模塊,用于利用系統(tǒng)原孵化器構(gòu)造用于孵化進程環(huán)境的子孵化器;所述的子孵化器,用于通過自身孵化出進程環(huán)境并在該進程環(huán)境中加載監(jiān)控單元及待運行應用程序;所述的監(jiān)控單元,用于對所述待運行應用程序的事件行為實施監(jiān)控。8.根據(jù)權(quán)利要求7所述的安全沙箱構(gòu)造裝置,其特征在于,所述控制模塊包括連接器與構(gòu)造器,所述連接器用于維護控制模塊基于套接口進行的連接,以分別實現(xiàn)控制模塊與原孵化器和子孵化器之間的連接;所述構(gòu)造器用于以原孵化器為基礎(chǔ)構(gòu)造所述子孵化器。9.根據(jù)權(quán)利要求8所述的安全沙箱構(gòu)造裝置,其特征在于,所述連接器被配置為執(zhí)行如下功能:利用原孵化器的套接口建立與原孵化器的連接;向系統(tǒng)服務進程注入關(guān)斷模塊使之執(zhí)行以關(guān)閉活動管理服務基于原孵化器的套接口所維持的連接;建立控制模塊與子孵化器的連接。10.根據(jù)權(quán)利要求7至9中任意一項所述的安全沙箱構(gòu)造裝置,其特征在于,本裝置包括前臺模塊,被配置為通過提供用戶界面,接收用于啟動所述待運行應用程序的指令而驅(qū)動本裝置工作?!疚臋n編號】A01K41/00GK104375494SQ201410725299【公開日】2015年2月25日申請日期:2014年12月2日優(yōu)先權(quán)日:2014年12月2日【發(fā)明者】曹陽,楊威申請人:北京奇虎科技有限公司,奇智軟件(北京)有限公司