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