專利名稱:標識出可因子分解的代碼的制作方法
技術領域:
本發(fā)明涉及計算機程序的反盜版技木。
背景技術:
用于個人計算機的計算機程序易于反向工程。例如,可通過編輯程序的機器碼來檢測并禁用這種程序中的許可實施碼。結果,一旦計算機程序進入市場,敵意用戶可以對它的保護機制進行反向工程并產(chǎn)生功能上表現(xiàn)為與真實副本等效、但是反盜版實施被禁用的新的副本。反盜版技術的新近發(fā)展已經(jīng)導致了分拆計算反盜版方法的發(fā)展。分拆計算方法涉及將程序劃分或因子分解成兩個或更多個片段,這些片段在彼此的遠程執(zhí)行。例如,在ー些實施例中,程序的較小的、功能上重要的片段定位在服務器上,而程序的其余部分則定位在客戶機上??蛻魴C將執(zhí)行程序至控制流引向服務器部分的那一點??蛻魴C然后可以準備適當?shù)臄?shù)據(jù)來作為輸入,并對存在于服務器處的功能作出遠程的過程調(diào)用。如果程序的客戶機副本是經(jīng)授權的,那么服務器執(zhí)行該調(diào)用井向客戶機返回結果。另ー方面,如果客戶機副本是未經(jīng)授權的或者如果服務器檢測到篡改嘗試,那么服務器將拒絕執(zhí)行調(diào)用或者將以與它對經(jīng)授權的客戶機所執(zhí)行的調(diào)用不同的方式來執(zhí)行調(diào)用,由此中斷客戶機上的程序執(zhí)行。
發(fā)明內(nèi)容
公開了涉及自動標識出潛在地放置在分拆計算的計算環(huán)境中的遠程計算設備上的一個或多個計算機程序功能的各個實施例。例如,一個公開的實施例在計算設備上提供了一種確定程序中的代碼的、要定位在該代碼的其他部分的遠程的可因子分解的部分以阻礙對該程序的非經(jīng)授權的使用的方法。該方法包括在計算設備上接收程序的代碼的ー表示的輸入;對所述代碼的所述表示執(zhí)行分析,該分析包括靜態(tài)分析和動態(tài)分析中的ー個或多個;以及,基于對所述代碼的所述分析,輸出通過所述分析確定的一個或多個功能的列表來作為要定位在遠程的候選功能。提供本發(fā)明內(nèi)容以便以簡化形式介紹在以下具體實施方式
中進ー步描述的ー些概念。本發(fā)明內(nèi)容并不旨在標識所要求保護主題的關鍵特征或必要特征,也不旨在用于限制所要求保護主題的范圍。此外,所要求保護的主題不限于解決在本公開的任一部分中所提及的任何或所有缺點的實現(xiàn)。
圖1示出了經(jīng)因子分解的程序的使用環(huán)境的示例的實施例。圖2示出了以使性能與反盜版顧慮平衡的方式來標識出程序中的可因子分解的代碼的方法的實施例。圖3示出了描繪計算設備的一實施例的框圖。
具體實施例方式在出于反盜版顧慮而查找定位在代碼的另一部分的遠程的代碼的一部分吋,可能難以定位在經(jīng)因子分解后會有效地阻止盜版但并不會使程序的經(jīng)授權版本的性能被影響到有害的程度的代碼。對于諸如視頻游戲之類大的、復雜的應用,此任務尤其困難。例如, 期望定位在遠程的經(jīng)因子分解的代碼具有難以推斷的功能性,使得在向該代碼提供已知輸入?yún)?,該代碼可提供不容易與輸入相關的輸出。而且,期望不存在對程序性能具有充分負面影響的經(jīng)因子分解的代碼,因為俘獲這種經(jīng)因子分解的代碼將使程序所提供的用戶體驗的質(zhì)量的顯著降級。這些顧慮可能偏好相對大的和/或復雜的功能的因子分解。另ー方面,并不期望將經(jīng)因子分解的代碼移動至對應用的經(jīng)授權的版本的用戶體驗過度有害的遠程網(wǎng)絡位置。例如,期望控制往返程時間和數(shù)據(jù)在客戶機和服務器之間來回傳遞的等待時間,并減少與將經(jīng)因子分解的代碼主存在服務器上相關聯(lián)的計算資源和/ 或經(jīng)濟成本。這些顧慮可能偏好相對小的和/或簡單的功能的因子分解。針對這些沖突的顧慮,公開了涉及自動標識出應用中用于因子分解的、可平衡這些顧慮的功能的實施例。此處還公開了涉及將這些功能的列表呈現(xiàn)給用戶以允許用于劃分的ー個或多個功能的最終選擇的人類確認。應當理解,此處用于描述經(jīng)因子分解的代碼的術語“功能”等可表示與程序的其余部分分開的任何代碼部分。在討論對代碼部分的自動標識之前,參考圖1描述了示例使用環(huán)境的實施例。使用環(huán)境100包括其上正運行有程序代碼104的經(jīng)授權的副本的第一客戶機設備(客戶機A 102),以及其上正運行有程序代碼的未經(jīng)授權的副本107的第二客戶機106。程序代碼的經(jīng)授權的版本和未經(jīng)授權的版本都缺少改為駐留在遠程服務器上的 ー個或多個功能。這被示為駐留在可經(jīng)由網(wǎng)絡112訪問的服務器系統(tǒng)110上的功能i 108。 如以下所述,可基于各種考慮來選擇與程序代碼的其他部分分開的缺少的功能i,這些考慮包括但不限干功能108的使用對于令人滿意的用戶體驗的重要性、通過輸入/輸出分析來推斷出功能108的操作的難度、與功能108的遠程主存相關聯(lián)的任何經(jīng)濟和/或計算資源成本、以及其他這樣的考慮。盡管缺少的功能i被描繪為存儲在遠程服務器系統(tǒng)上,但是可以理解,該缺少的功能可以存儲在任何合適的遠程計算設備上。進ー步地,可以理解此處所使用的術語“服務器”可以指主存ー個或多個缺少的功能的任何遠程計算設備。服務器系統(tǒng)110包括缺少的功能i 108存儲在其中的經(jīng)因子分解的功能存儲114, 還包括可將關于經(jīng)授權的用戶的信息存儲在其中的經(jīng)授權的用戶信息存儲116。作為示例, 圖1描繪了與客戶機A 102的用戶相對應的“用戶A許可” 118,用戶A許可118存儲在服務器系統(tǒng)110上。相反,并沒有存儲運行在客戶機B上的未經(jīng)授權的副本的任何許可。圖1還示出了在服務器系統(tǒng)110與客戶機A和B之間的示例通信。在客戶機A執(zhí)行程序代碼時,在到達代碼中需要使用缺少的功能108的那個點吋,客戶機A經(jīng)由網(wǎng)絡112 調(diào)用在服務器系統(tǒng)110處的缺少的功能108。服務器系統(tǒng)接收該調(diào)用、確定客戶機A正在運行程序代碼的經(jīng)授權副本、然后執(zhí)行該功能井向客戶機A返回結果。另ー方面,在客戶機B 調(diào)用缺少的功能108吋,服務器系統(tǒng)110確定客戶機B不在運行程序代碼的經(jīng)授權副本并且不執(zhí)行缺少的功能110也不向客戶機B返回結果。在此情況下,各種不同的失敗模式都是可能的。
圖1還示出了包括因子分解工具122的開發(fā)者計算設備120。因子分解工具122 被實現(xiàn)為存儲在開發(fā)者計算設備上的代碼,該代碼可由開發(fā)者計算設備執(zhí)行以自動確定應用中可能適合用于因子分解并放置在服務器系統(tǒng)110上的潛在功能的列表。在一些實施例中,因子分解工具可改為如IM處所示部分地或全部地駐留在服務器系統(tǒng)110上和/或駐留在可移動計算機可讀存儲介質(zhì)上。因子分解工具122被配置成接收程序的表示的輸入,并分析程序的表示以標識出用于因子分解的各候選功能。如上所述,因子分解工具可被配置成基于各種因素的平衡來作出這種判定。這些因素可包括但不限于通過輸入/輸出分析來推斷出功能的操作的難度、功能對程序的整體功能的相對重要性、以及對一功能進行因子分解對整體系統(tǒng)性能和操作成本的影響。因子分解工具122還可被配置成向顯示設備1 上的圖形用戶界面1 輸出要因子分解的一個或多個所建議的候選功能的列表。用戶界面126可被配置成允許開發(fā)者選擇顯示在用戶界面上的功能以查看對應于該功能的源代碼。以此方式,開發(fā)者可以查看所建議的候選功能的列表,由此允許對自動產(chǎn)生的侯選列表中的最終候選功能的進行人類確認。這可以有助于避免表現(xiàn)為通過靜態(tài)和動態(tài)代碼分析來進行的對功能的選擇是復雜的, 但是通過輸入/輸出分析來推斷出功能實際上可能是相當容易的。具有復雜結構和易于推斷功能性的操作的功能的ー個示例是快速傅立葉變換,如正弦波輸入產(chǎn)生簡單的spike輸出ο圖2示出了用于經(jīng)由計算設備來確定程序中定位在該程序其他部分的遠程的代碼的可因子分解的部分以阻礙對該程序的非經(jīng)授權的使用的方法200的示例實施例。方法 200包括在202處,接收程序的代碼的表示的輸入。取決于將在代碼上運行的分析,可以使用任何合適的代碼的表示。例如,在將執(zhí)行靜態(tài)代碼分析的情況下,代碼的表示可包括諸如調(diào)用圖之類的控制流圖204、數(shù)據(jù)流圖205,或者其他任何合適的程序的結構表示和功能依賴關系。可以理解,此處所使用的術語“控制流圖”和“數(shù)據(jù)流圖”可表示完整或不完整的圖。類似地,可以更一般地理解的,此處使用的術語“代碼的表示”可表示程序的完整代碼集合的表示或者程序的非完整代碼集合的表示。類似地,在分析包括動態(tài)運行時分析的情況下,代碼的表示可包括代碼206的受操縱(instrumented)版本以允許運行時數(shù)據(jù)獲取和分析被執(zhí)行。進ー步地,諸如在靜態(tài)分折和動態(tài)分析兩者都被執(zhí)行的情況下,控制流圖和代碼的受操縱版本以及代碼的任何其他合適表示都可被接收為輸入??梢岳斫猓梢允褂酶鞣N已知方法來生成程序的過程間控制流和數(shù)據(jù)流圖以及操縱程序的代碼,并且在此不進行進ー步討論。方法200接下來包括在208處,執(zhí)行對代碼的表示的分析以確定用于因子分解的候選功能。如上所述,該分析可包括如210處所指示的經(jīng)由代碼的控制流圖和/或數(shù)據(jù)流圖執(zhí)行的靜態(tài)分析,和/或還包括如212處所指示的經(jīng)由代碼的受操縱版本執(zhí)行的動態(tài)分折。在一些實施例中,可先執(zhí)行靜態(tài)分析經(jīng)由對代碼的功能依賴關系的分析來濾除不合適的功能,以將候選功能的列表從全局列表減少至候選功能的子集,然后可對候選功能的子集執(zhí)行動態(tài)分析以進ー步縮減列表。與通過單獨使用動態(tài)分析相比,這可以有助于更容易地標識出候選功能,因為靜態(tài)分析比動態(tài)分析使用的計算資源少。可以理解,可以按任何合適的次序執(zhí)行靜態(tài)和動態(tài)分析。例如,在一些實施例中,因子分解分析可以交錯在動態(tài)和靜態(tài)分析階段之間。如214處所指示的,在一些實施例中,可以以漸進的方式來執(zhí)行多個不同的動態(tài)分析,使得執(zhí)行逐漸變得更計算密集的功能分析。以此方式,可以對通過靜態(tài)分析(或者通過控制流圖)獲得的功能列表執(zhí)行較不計算密集的分析,以將列表過濾至較少數(shù)量的功能。然后,隨著候選功能的列表通過每ー分析階段而變得越來越小,可以執(zhí)行越來越復雜的分析,因此與在較早階段執(zhí)行較為計算密集的分析相比,這有助于節(jié)省計算資源。任何合適的方法或多個方法都可用于靜態(tài)和/或動態(tài)地分析接收到的代碼表示。 例如,在一些實施例中,可應用各種試探法來幫助將功能集合過濾為候選功能的列表。候選功能的列表然后可被熟悉代碼的開發(fā)者查看,以作為最終的過濾步驟??捎糜趯⒁唤M功能過濾為用于因子分解的候選功能的列表的試探法的ー些具體示例如下??梢岳斫猓@些實施例是出于示例的目的而呈現(xiàn)的,而不旨在以任何方式進行限制。首先,可對多個功能中的每一功能執(zhí)行靜態(tài)分析以確定該功能中的基本功能塊的數(shù)量, 并基于每一功能中的基本塊的數(shù)量進行過濾,因為對具有更多數(shù)量的基本塊的功能的操作可能比對更簡單的功能的操作更難推斷。類似地,靜態(tài)分析可用于基于向存儲器寫入功能的次數(shù)來進行過濾。例如,相對于寫入存儲器(或盤、和/或任何其他永久存儲)較多次的功能而言,未寫入存儲器(或盤、和/或任何其他永久存儲)的功能、或僅寫入存儲器少量次的功能、和/或?qū)懭肓己枚x的數(shù)據(jù)結構的功能可以更占優(yōu)勢。另外,靜態(tài)分析可用于標識出任何死代碼(例如,并不被程序的其他部分所使用或者不可到達的代碼),和/或其他對于反盜版的目的而言表現(xiàn)為太簡單或?qū)φw程序功能不重要的任何代碼。類似地,因子分解工具可執(zhí)行靜態(tài)分析來偏好具有在控制流圖中具有大量依賴關系的輸出的功能,和/或與控制流圖的至少一部分中的其他功能相比影響顯著數(shù)量的變量的功能。例如,從控制流圖中移除功能的影響可通過例如對移除該功能所造成的程序的數(shù)據(jù)流圖中新斷開的頂點的數(shù)量進行歸一化來表征。諸如最大割(max-cut)試探之類的各種已知試探法都可用于執(zhí)行這樣的分析。作為另ー示例,靜態(tài)分析可用于確定功能中遞歸數(shù)據(jù)依賴關系(例如,由循環(huán)和/ 或調(diào)用圖遞歸所引起)和/或該功能的覆蓋(coverage)的存在,因為具有較多數(shù)量的遞歸依賴關系和/或較多覆蓋的代碼的功能可能比具有較少數(shù)量的遞歸依賴關系和/或較少覆蓋的代碼功能更難于推斷。在此實例中,可在此分析中使用檢測自然循環(huán)的貪婪算法。此外,在循環(huán)較多的程序中,過濾可基于循環(huán)的特征(例如,帶有循環(huán)的索引變量的特性)來執(zhí)行。作為又ー示例,可執(zhí)行靜態(tài)分析來移除將來自客戶機的個人可標識信息放置在服務器上的功能。此外,靜態(tài)分析可涉及為多個功能中的每個功能確定在功能被調(diào)用時被傳遞至該功能的狀態(tài)的量。以此方式,可過濾涉及傳遞較大量的狀態(tài)的功能,因為這樣的功能可能對整體系統(tǒng)性能具有更多不利影響。而且,諸如類結構之類的語義程序知識可被用在靜態(tài)分折中,因為類結構可提供關于在哪里實現(xiàn)了重要功能的信息。作為又ー實施例,靜態(tài)分析可用于確定諸如日期/吋間和隨機數(shù)依賴性、第三方調(diào)用等非確定性元素的存在。然后,可基于功能是否包含這樣的非確定性元素來執(zhí)行過濾。作為又ー示例,代碼的靜態(tài)度量(包括但不限于秩復雜度)可用在附加的靜態(tài)分析過濾步驟中。類似地,可以采用任何合適的方式來執(zhí)行動態(tài)分析。在一些動態(tài)分析中,作為因子分解工具的輸入來接收的程序代碼的受操縱版本被運行了一次或多次以收集統(tǒng)計數(shù)字。例如,在視頻游戲的情形下,可運行視頻游戲若干次,每一次都沿著視頻游戲中的常規(guī)路徑運行。在此過程中可收集任何合適的統(tǒng)計數(shù)字。示例包括但不限干多個功能中的每個功能的平均運行時間、由各功能共享和/或在各功能之間傳遞的狀態(tài)的量、線程信息(例如,功能在主線程中多久運行一次),以及功能被調(diào)用的頻率??梢岳斫猓谝恍嵗?,諸如功能的最大/最小和平均運行時之類的各種運行時統(tǒng)計數(shù)字可以從處理器級工具處來獲得。在一些實施例中,受操縱的代碼還可用于從觀察到的軌跡生成數(shù)據(jù)流圖。在其他實施例中,除執(zhí)行受操縱的代碼以外,還可以采用任何其他合適的方式來收集關于程序執(zhí)行的動態(tài)信息。示例包括通過使用虛擬機以及通過仿真箱(例如,映射在現(xiàn)場可編程門陣列的網(wǎng)絡上的CPU等)?;谶@樣的統(tǒng)計數(shù)字,可應用與程序的運行時性能相關的各種試探法來進ー步過濾用于因子分解的候選功能。例如,從性能觀點來看,期望對較不頻繁地被調(diào)用的功能而不是對較頻繁地被調(diào)用的功能進行因子分解。由此,較頻繁地被調(diào)用的功能可被濾除。此外, 期望濾除具有較短平均運行時的功能,因為這樣的功能可被假定為對于進行有效的反盜版而言太過簡単。作為進一歩的示例,其中功能具有在主線程中執(zhí)行的部分,過濾可被配置成偏好較不頻繁地調(diào)用在主線程中執(zhí)行的部分的那些功能。關于線程的其他信息也可以用于過濾。另外,如上所述,與其中被共享的和/或被傳遞的狀態(tài)較高的功能相比,過濾可被配置成更偏好其中共享的和/或傳遞的狀態(tài)較低的功能。作為另ー示例,可使用熵減試探法來標識出具有共享片段(這些共享片段具有不同的前導者)的一組軌跡(trace),并基于共享片段的不同前導者的數(shù)量來進行過濾。此外,在過濾中可標識出并偏好會増加分支預測的難度的無偏向分支。此外,在過濾中可標識出并偏好其中陣列索引的閉合形式依賴于條件的功能??梢岳斫猓褂眯阅茉囂椒ǖ姆治隹赡苁艿叫枰哂袑?zhí)行功能的靈活定時的影響,還受到期望低帶寬客戶機-服務器通信的影響。因此,為了解決這樣的顧慮,因子分解工具122可被配置成偏好選擇增加等待時間間隙的功能,這些功能減少了被共享和被傳遞的狀態(tài)的總體大小并且不會被過于頻繁地調(diào)用。功能的等待時間容差可采用任何合適的方式來確定。一般而言,接受某輸入并產(chǎn)生某輸出的給定功能的等待時間容差可通過確定該功能的輸入何時被創(chuàng)建以及來自該功能的輸出何時將被使用來評估。這可被數(shù)學地表達為(輸出被使用的時間減去輸入可用的時間)減去執(zhí)行該功能的時間之間的差。這些值的確定可能在計算上很復雜。由此,等待時間容差確定和過濾可在稍后的過濾步驟中執(zhí)行,以減少被執(zhí)行分析的功能的數(shù)量。除了等待時間容差之外,還可以應用其他基于性能的試探法。例如,在收集用于動態(tài)分析的統(tǒng)計數(shù)字時訓練程序運行的軌跡可被重放,以確定對最終用戶等待時間/體驗的影響。然后,可執(zhí)行過濾以排除導致大于最終用戶等待時間的所期望的増加的功能。此外, 相對于使用較多數(shù)量的第三方調(diào)用的功能,更偏好在服務器部分上沒有使用或者使用相對較少的第三方通信的功能。此外,還可基干與在遠程服務器上主存功能的成本相關的試探法對功能進行過濾。例如,期望選擇允許批量處理對服務器的調(diào)用的功能(例如,如果在簡檔軌跡上觀察到對功能的輸入常常在網(wǎng)絡調(diào)用之前或者之后)。另選地,在這樣的情況下,可擴展經(jīng)因子分解的代碼來包括環(huán)繞調(diào)用。而且,可能期望減少經(jīng)因子分解的代碼在服務器上的存儲器占用。由此,如上所述,因子分解工具可基于有多少狀態(tài)被傳遞至服務器來進行過濾。較少量的共享狀態(tài)可具有關于包括調(diào)試和從崩潰恢復這樣的因素的正面含義。此外,在存在被共享和/或被傳遞的狀態(tài)的情況下,期望偏好其中被傳遞和/或被共享的狀態(tài)是非確定性的功能,和/或偏好導致服務器的較少功耗的功能。繼續(xù)圖2,如216處所指示的,通過執(zhí)行輸入至因子分解工具的代碼的表示的靜態(tài)和/或動態(tài)分析,確定潛在地適于因子分解并定位在遠程服務器上的功能的列表。然后,在 218處輸出該列表供用戶審閱。例如,該列表可被輸出例如至顯示設備上的圖形用戶界面 220,或可被輸出至其他合適的設備。如上所述,輸出列表至圖形用戶界面可允許開發(fā)者很快審閱用于因子分解的候選功能的列表。這樣的用戶界面還可允許用戶選擇功能以查看被選擇的功能的源代碼。以此方式,通過了由因子分解工具所應用的自動過濾步驟但是具有潛在易于推斷的功能性的功能(諸如快速傅立葉變換)可被識別出來并被拒絕。此外,這可以允許熟悉代碼的個人基于功能對最終用戶體驗的重要性來選擇功能。如上參考圖1所述,因子分解工具以計算機程序的形式來實現(xiàn),該計算機程序被配置成在計算設備上運行并可在服務器的本地或遠程運行。圖3示意性示出了可以執(zhí)行上述方法和過程之中的一個或多個的非限制性計算系統(tǒng)300。計算系統(tǒng)300可表示圖1的客戶機A 102、客戶機B 106、服務器系統(tǒng)110以及開發(fā)者計算設備120中的任何ー個。以簡化形式示出了計算系統(tǒng)300。應當理解,可使用基本上任何計算機架構而不背離本公開的范圍。在不同的實施例中,計算系統(tǒng)300可以采取大型計算機、服務器計算機、 臺式計算機、膝上型計算機、平板計算機、家庭娛樂計算機、網(wǎng)絡計算設備、移動計算設備、 移動通信設備、游戲設備等等的形式。計算系統(tǒng)300包括邏輯子系統(tǒng)302和數(shù)據(jù)保持子系統(tǒng)304。計算系統(tǒng)300可以任選地包括顯示子系統(tǒng)306、通信子系統(tǒng)308和/或在圖3中未示出的其他組件。計算系統(tǒng) 300還可以任選地包括諸如下列用戶輸入設備例如鍵盤、鼠標、游戲控制器、相機、話筒和
/或觸摸屏等等。邏輯子系統(tǒng)302可包括被配置為執(zhí)行ー個或多個指令的ー個或多個物理設備。例如,邏輯子系統(tǒng)302可被配置為執(zhí)行ー個或多個指令,該ー個或多個指令是ー個或多個應用、服務、程序、例程、庫、對象、組件、數(shù)據(jù)結構、或其他邏輯構造的一部分??蓪崿F(xiàn)此類指令以執(zhí)行任務、實現(xiàn)數(shù)據(jù)類型、變換ー個或多個設備的狀態(tài)、或以其他方式得到所需結果。邏輯子系統(tǒng)302可以包括被配置為執(zhí)行軟件指令的一個或多個處理器。附加地或可替代地,邏輯子系統(tǒng)302可以包括被配置為執(zhí)行硬件或固件指令的一個或多個硬件或固件邏輯機器。邏輯子系統(tǒng)302的處理器可以是單核或多核的,且在上面執(zhí)行的程序可以被配置為供并行或分布式地處理。邏輯子系統(tǒng)可以任選地包括遍布兩個或多個設備的獨立組件,所述設備可遠程放置和/或被配置為進行協(xié)同處理。邏輯子系統(tǒng)302的ー個或多個方面可被虛擬化并由以云計算配置進行配置的可遠程訪問的聯(lián)網(wǎng)計算設備執(zhí)行。數(shù)據(jù)保持子系統(tǒng)304可包括ー個或多個物理、非瞬時設備,這些設備被配置成保持數(shù)據(jù)和/或可由該邏輯子系統(tǒng)302執(zhí)行的指令,以實現(xiàn)此處描述的方法和過程。在實現(xiàn)這樣的方法和過程吋,可以變換數(shù)據(jù)保持子系統(tǒng)304的狀態(tài)(例如,以保持不同的數(shù)據(jù))。
數(shù)據(jù)保持子系統(tǒng)304可包括可移動介質(zhì)和/或內(nèi)置設備。數(shù)據(jù)保持子系統(tǒng)304尤其是可以包括光學存儲器設備(例如,⑶、DVD、HD-DVD、藍光盤等)、半導體存儲器設備(例如,RAM、EPROM、EEPROM等)和/或磁存儲器設備(例如,硬盤驅(qū)動器、軟盤驅(qū)動器、磁帶驅(qū)動器、MRAM等)。數(shù)據(jù)保持子系統(tǒng)304可包括具有以下特性中的ー個或多個特性的設備易失性、非易失性、動態(tài)、靜態(tài)、讀/寫、只讀、隨機存取、順序存取、位置可尋址、文件可尋址、 以及內(nèi)容可尋址。在某些實施例中,可以將邏輯子系統(tǒng)302和數(shù)據(jù)保持子系統(tǒng)304集成到一個或更多個常見設備中,如專用集成電路或片上系統(tǒng)。圖3還示出以可移動計算機可讀存儲介質(zhì)310形式的數(shù)據(jù)保持子系統(tǒng)的一方面, 該可移動計算機可讀存儲介質(zhì)310可用于存儲和/或傳輸可執(zhí)行以實現(xiàn)此處所述的方法和過程的數(shù)據(jù)和/或指令??梢苿佑嬎銠C可讀存儲介質(zhì)310尤其是可以采取CD、DVD、HD-DVD、 藍光盤、EEPROM和/或軟盤形式。術語“程序”可用于描述被實現(xiàn)來執(zhí)行ー個或多個特定功能的計算系統(tǒng)300的一個方面。在一些情況中,這樣的程序可經(jīng)由執(zhí)行由數(shù)據(jù)保持子系統(tǒng)304保持的指令的邏輯子系統(tǒng)302來實例化。應當理解,可以從相同的應用、服務、代碼塊、對象、例程、API、功能等來實例化不同的模塊、程序和/或引擎。類似地,相同的模塊、程序和/或引擎可由不同的應用、服務、代碼塊、對象、例程、API、功能等來實例化。術語“程序”和“引擎”意在涵蓋單個或成組的可執(zhí)行文件、數(shù)據(jù)文件、庫、驅(qū)動程序、腳本、數(shù)據(jù)庫記錄等。顯示子系統(tǒng)306可用于呈現(xiàn)由數(shù)據(jù)保持子系統(tǒng)304所保持的數(shù)據(jù)的可視表示。由于此處所描述的方法和過程改變由數(shù)據(jù)保持子系統(tǒng)保持的數(shù)據(jù),并由此變換數(shù)據(jù)保持子系統(tǒng)的狀態(tài),因此同樣可以變換顯示子系統(tǒng)306的狀態(tài)以在視覺上表示底層數(shù)據(jù)的改變。顯示子系統(tǒng)306可以包括使用實際上任何類型的技術的ー個或多個顯示設備??蓪⒋祟愶@示設備與邏輯子系統(tǒng)302和/或數(shù)據(jù)保存子系統(tǒng)304 —起組合在共享封裝中,或此類顯示設備可以是外圍顯示設備。當被包括在內(nèi)吋,通信子系統(tǒng)308可以被配置成將計算系統(tǒng)308與ー個或多個其他計算設備可通信地耦合。通信子系統(tǒng)308可包括與ー個或多個不同的通信協(xié)議相兼容的有線和/或無線通信設備。作為非限制性示例,通信子系統(tǒng)可被配置為經(jīng)由無線電話網(wǎng)、無線局域網(wǎng)、有線局域網(wǎng)、無線廣域網(wǎng)、有線廣域網(wǎng)等進行通信。在一些實施例中,通信子系統(tǒng)可允許計算系統(tǒng)300經(jīng)由諸如因特網(wǎng)之類的網(wǎng)絡發(fā)送消息至其他設備和/或從其他設備接收消息。應該理解,此處所述的配置和/或方法在本質(zhì)上是示例性的,并且這些特定實施例或示例不是限制意義,因為多個變體是可能的。此處所述的特定例程或方法可表示任意數(shù)量的處理策略中的ー個或多個。由此,所示出的各個動作可按所示順序執(zhí)行、按其他順序執(zhí)行、并行地執(zhí)行、或者在一些情況下省略。同樣,可改變上述過程的次序。本公開的主題包括各種過程、系統(tǒng)和配置的所有新穎和非顯而易見的組合和子組合,和此處所公開的其他特征、功能、動作、和/或特性、以及其任何和全部等效物。
權利要求
1.在計算設備(110)上,一種用于確定程序中的代碼的、要定位在所述代碼的其他部分的遠程的可因子分解的部分以阻礙對所述程序的未經(jīng)授權的使用或分發(fā)的方法(200), 所述方法包括接收(20 所述程序的所述代碼的表示的輸入;對所述代碼的所述表示執(zhí)行(208)分析,所述分析包括靜態(tài)分析和動態(tài)分析中的ー個或多個;以及基于對所述代碼的所述分析,輸出(218)通過所述分析確定016)的一個或多個功能的列表來作為要定位在遠程的候選功能。
2.如權利要求1所述的方法,其特征在干,所述列表被輸出至用戶界面,并且還包括 接收從所述ー個或多個功能的列表選擇所選功能的用戶輸入,并作為響應向所述用戶界面輸出所述所選功能的源代碼。
3.如權利要求1所述的方法,其特征在干,接收所述程序的所述代碼的表示的輸入包括接收以下各項中的ー個或多個表示所述代碼的控制流圖、表示所述代碼的數(shù)據(jù)流圖以及所述代碼的受操縱版本。
4.如權利要求1所述的方法,其特征在干,對所述代碼上執(zhí)行分析包括基于每一功能中的基本塊的數(shù)量對多個功能進行過濾。
5.如權利要求1所述的方法,其特征在干,對所述代碼執(zhí)行分析包括基于每一功能已被觀察到在執(zhí)行期間寫入存儲器、盤和/或其他永久存儲的次數(shù)來對多個功能進行過濾。
6.如權利要求1所述的方法,其特征在干,對所述代碼執(zhí)行分析包括濾除死代碼。
7.如權利要求1所述的方法,其特征在干,對所述代碼執(zhí)行分析包括對于多個功能中的每一功能,確定在該功能被調(diào)用時傳遞至該功能的狀態(tài)的量,并基于在該功能被調(diào)用時所傳遞的狀態(tài)的量進行過濾。
8.如權利要求1所述的方法,其特征在干,對所述代碼執(zhí)行分析包括動態(tài)地確定所述代碼的所述受操縱的版本中多個功能中的每一功能的覆蓋,并基于所述覆蓋進行過濾。
9.如權利要求1所述的方法,其特征在干,對所述代碼執(zhí)行分析包括確定如下各項中的一個或多個所述代碼的所述受操縱版本中多個功能中的每一功能被調(diào)用的頻率、功能在主線程中多久被執(zhí)行一次、以及等待時間容差,所述等待時間容差基于所述功能的輸出被使用的時間減去對所述功能的輸入可用的時間與執(zhí)行所述功能的持續(xù)時間相比的差。
10.如權利要求1所述的方法,其特征在干,對所述代碼執(zhí)行分析包括首先執(zhí)行靜態(tài)分析以從功能的全局列表中選擇功能的子組,然后執(zhí)行動態(tài)分析以對所述功能的子組進行
全文摘要
本發(fā)明涉及標識出可因子分解的代碼。公開了涉及自動標識出潛在地放置在分拆計算的計算環(huán)境中的遠程計算設備上的一個或多個計算機程序功能的各個實施例。例如,一個公開的實施例在計算設備(11)上提供了一種確定程序中的代碼的、要定位在該代碼的其他部分的遠程的可因子分解的部分以阻礙對程序的未經(jīng)授權的使用和/或分發(fā)的方法(200)。該方法(200)包括接收(202)程序的代碼的表示的輸入;對代碼的表示執(zhí)行(208)分析,該分析包括靜態(tài)分析和動態(tài)分析中的一個或多個;以及,基于代碼的分析,輸出(218)通過該分析確定的一個或多個功能的列表來作為要定位在遠程的候選功能。
文檔編號G06F21/00GK102592087SQ20111044909
公開日2012年7月18日 申請日期2011年12月28日 優(yōu)先權日2010年12月28日
發(fā)明者B·利夫希茨, D·基洛夫斯基, G·梅德文斯基, J·林德, K·雷, V·蓋加拉 申請人:微軟公司