亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

混淆技術(shù)的制作方法

文檔序號(hào):6600214閱讀:202來源:國知局
專利名稱:混淆技術(shù)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及阻止、預(yù)防或檢測(cè)計(jì)算機(jī)代碼的反向工程或“剽竊”。
技術(shù)背景 已知一些人試圖在沒有計(jì)算機(jī)程序設(shè)計(jì)者或所有者的許可的情況下分析或改變計(jì)算機(jī)程序的功能。計(jì)算機(jī)程序的改變可用作分析工具,或用于使程序產(chǎn)生程序設(shè)計(jì)者不想要的真實(shí)世界結(jié)果的目的。
已提出多種措施包括“混淆”來阻止反向工程,其通常涉及包括無功能的、不必要的、或不合邏輯地放置的代碼,該代碼使分析員在不訪問初始程序設(shè)計(jì)者的文獻(xiàn)的情況下更難理解代碼怎樣運(yùn)行。
在任何反向工程嘗試中,大量計(jì)算機(jī)代碼的重要部分是“條件分支”或“條件跳轉(zhuǎn)”,根據(jù)一些可變因素或其它事件,在前述點(diǎn)代碼的運(yùn)行可采取不同的路線?;跅l件的結(jié)果,條件分支可導(dǎo)致跳轉(zhuǎn)到程序的不同部分。更普遍地,條件分支通過如果符合指定條件則跳轉(zhuǎn)的命令形成。之后,有如果不符個(gè)條件則繼續(xù)條件跳轉(zhuǎn)命令后面的命令的隱含命令。 總的來說,在本說明書中,選擇在一個(gè)分支上跳轉(zhuǎn)還是兩個(gè)分支上跳轉(zhuǎn)及如果只有一個(gè)跳轉(zhuǎn)而選擇哪一分支跳轉(zhuǎn)均無關(guān)緊要,術(shù)語“條件跳轉(zhuǎn)”和“條件分支”在所有三種情況下均可無區(qū)別地使用。
反向工程師通常能容易地在編譯的程序二進(jìn)制代碼中認(rèn)出條件跳轉(zhuǎn)語句。使用現(xiàn)在廣泛可用的調(diào)試程序可容易地定位和分析條件語句。之后,反向工程師可使條件跳轉(zhuǎn)無效,使得程序總是沿同一隨后的路線而行,因而使其運(yùn)行更容易理解。惡意的黑客可改變條件跳轉(zhuǎn),使得隨后的運(yùn)行路線不正確地遵照可變因素或其它事件。例如,其可能撤消安全性或完整性測(cè)試,或?qū)е抡]斎氘a(chǎn)生異常輸出。傳統(tǒng)的混淆不能防止反向工程師識(shí)別二進(jìn)制代碼中的條件跳轉(zhuǎn)命令。

發(fā)明內(nèi)容
本發(fā)明公開了在運(yùn)行程序的計(jì)算機(jī)中進(jìn)行條件跳轉(zhuǎn)的方法及其計(jì)算機(jī)程序,包括在計(jì)算機(jī)中提供真實(shí)條件分支以其為條件的輸入。在計(jì)算機(jī)中提供混淆性不可預(yù)見的數(shù)據(jù)。在計(jì)算機(jī)程序中,運(yùn)行代碼以產(chǎn)生以不可預(yù)見的數(shù)據(jù)為條件的混淆性分支。在計(jì)算機(jī)程序中由混淆性條件分支確定的點(diǎn)處,進(jìn)行以前面提及的輸入為條件的真實(shí)分支??偟膩碚f,“真實(shí)條件分支”為與程序的真實(shí)目的有關(guān)的任何條件分支。
在實(shí)施例中,可重復(fù)混淆性條件分支,使得程序沿分支樹結(jié)構(gòu)工作。在計(jì)算機(jī)程序中的通過連續(xù)混淆性條件分支的累積效應(yīng)從真實(shí)條件分支的幾種可用情形中選擇的點(diǎn)即樹杈處進(jìn)行真實(shí)條件分支。
在實(shí)施例中,不可預(yù)見的數(shù)據(jù)選擇矩陣的一行,及混淆性條件分支由所選行中的項(xiàng)確定。
在實(shí)施例中,真實(shí)條件分支可使程序進(jìn)行到程序中隨進(jìn)行真實(shí)條件分支的情形而定的點(diǎn),之后,可選地,通過進(jìn)一步混淆,程序可進(jìn)行到獨(dú)立于進(jìn)行真實(shí)條件分支情形的點(diǎn)。 在一例子中,不同的真實(shí)條件分支情形可向程序發(fā)送不同的目的地序列,之后程序可通過該序列重復(fù),在獨(dú)立點(diǎn)結(jié)束。在另一例子中,在真實(shí)條件分支之后,可以有另外的不可預(yù)見的選擇,例如,程序可將另外的混淆性代碼重復(fù)不可預(yù)見的次數(shù)。
在實(shí)施例中,其它計(jì)算機(jī)程序代碼可包括在混淆性條件分支和真實(shí)條件分支之間,或真實(shí)條件分支之后的混淆性代碼之中。在有兩個(gè)或兩個(gè)以上連續(xù)混淆性條件分支時(shí), 其它程序代碼可在第一混淆性條件分支之后的任何點(diǎn)處。其它程序代碼可以是不起作用的混淆。如果其被運(yùn)行,其可以是無意義的混淆,或者其可以是來自與真實(shí)條件分支的主題不緊密相關(guān)的程序部分的不調(diào)和代碼,或者其可以是在混淆性條件分支中復(fù)制的相關(guān)代碼。 尤其在后者情況下,其它代碼可能是黑客希望改變的代碼。之后,如果黑客未完全理解混淆結(jié)構(gòu),黑客僅可改變其它代碼的一份或一些副本,則其在進(jìn)一步的剽竊中可被阻止,因?yàn)橛袝r(shí)運(yùn)行改變后的代碼及有時(shí)運(yùn)行未被改變的代碼。
在實(shí)施例中,前述其它計(jì)算機(jī)程序代碼的運(yùn)行可在不同的混淆性條件分支選擇之后試圖檢測(cè)其它程序代碼的運(yùn)行之間的差異時(shí)進(jìn)行監(jiān)視。例如,如果黑客試圖改變其它程序代碼,在沒有認(rèn)識(shí)到全部混淆結(jié)構(gòu)的情況下,黑客可改變通過混淆樹的一路徑上的其它程序代碼,但不能改變另一路徑上的其它程序代碼,使得通過樹的相繼重復(fù)導(dǎo)致明顯不同的結(jié)果。
在實(shí)施例中,輸入可從同一程序的另一部分提供,例如作為計(jì)算的結(jié)果。作為備選,輸入可從程序外面發(fā)送或取回。
在實(shí)施例中,不可預(yù)見的數(shù)據(jù)可在程序內(nèi)通過從不可預(yù)見的數(shù)據(jù)源調(diào)用而提供。 例如,該源可以是隨機(jī)或偽隨機(jī)數(shù)發(fā)生器。作為備選,不可預(yù)見的數(shù)據(jù)可以是來自同一或另一計(jì)算機(jī)程序的無關(guān)部分的數(shù)據(jù)或結(jié)果。由于目標(biāo)是進(jìn)行混淆,不調(diào)和的鏈路有利。


上述及其它方面、特征和優(yōu)點(diǎn)從下面結(jié)合附圖進(jìn)行的詳細(xì)描述將更明顯看出,其中 圖1為計(jì)算機(jī)網(wǎng)絡(luò)的示意圖。
圖2為對(duì)條件分支進(jìn)行混淆的過程的流程圖。
圖3A-3D為實(shí)現(xiàn)圖2的過程的計(jì)算機(jī)源代碼的例子。
具體實(shí)施例方式參考附圖,及初始參考圖1,總體上由附圖標(biāo)記10指示的計(jì)算機(jī)系統(tǒng)的一實(shí)施例包括處理器12,通過總線14連接到計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)如RAM16、R0M18、硬盤20和可移動(dòng)磁盤22??偩€14還連接到I/O設(shè)備如鍵盤24、點(diǎn)擊設(shè)備如鼠標(biāo)26、及因特網(wǎng)連接28。通過28的外設(shè)16僅為例子。如本領(lǐng)域技術(shù)人員已知的,可提供其它形式的存儲(chǔ)和1/0,及將來可能開放另外的其它形式。處理器12運(yùn)行多種形式的軟件,包括存儲(chǔ)在R0M18中或磁盤 20上的操作系統(tǒng)和其它安全軟件30,及應(yīng)用軟件32,其可在可移動(dòng)磁盤20或因特網(wǎng)28上傳送及可保存在硬盤20上。RAM16通常用于使用中的程序和數(shù)據(jù)的臨時(shí)存儲(chǔ)。
還參考圖2,根據(jù)本發(fā)明的計(jì)算機(jī)程序40的一實(shí)施例可連同計(jì)算機(jī)系統(tǒng)10—起使用。當(dāng)不使用時(shí),計(jì)算機(jī)程序40可保存在ROM18或硬盤20上,及當(dāng)使用時(shí)可保存在RAM16 上。計(jì)算機(jī)程序40可以是希望進(jìn)行保護(hù)以免遭剽竊或反向工程的任何計(jì)算機(jī)程序。這樣的程序的無數(shù)例子為本領(lǐng)域技術(shù)人員眾所周知,為了簡(jiǎn)明,不詳細(xì)描述前述程序的與本發(fā)明無關(guān)的部分。
在圖2的模塊50中,加載計(jì)算機(jī)程序40并開始運(yùn)行程序。在模塊52中,執(zhí)行多個(gè)命令,直到程序到達(dá)要進(jìn)行混淆的條件分支為止。在模塊53中,進(jìn)行不可預(yù)見的選擇,及程序進(jìn)行到模塊54或模塊56。不可預(yù)見的選擇可以隨機(jī)、偽隨機(jī)、或基于一些與正進(jìn)行混淆的條件分支不緊密相關(guān)的數(shù)據(jù)或結(jié)果。
模塊54和56為可選模塊。在模塊54或模塊56中,如果存在,程序運(yùn)行可能沒有作用、用于程序40的另一部分中的目的、或用于檢測(cè)模塊54或模塊56已運(yùn)行的代碼,在這種情況下兩個(gè)模塊的代碼可以相同或不同。模塊54或模塊56可包括用于這些功能中的兩個(gè)或兩個(gè)以上功能的代碼。作為備選,或另外,模塊54和/或模塊56可代表根本不實(shí)際運(yùn)行的代碼,而是僅使編譯后的程序40更難閱讀。模塊54和56可以相同或不同。即使模塊 54和56用于共同的有用目的,它們也可使用不同的代碼,以使它們完全相同的事實(shí)不太明
Mo 之后,程序進(jìn)行到模塊58或模塊60。在模塊58或模塊60中,進(jìn)行不可預(yù)見的選擇,及程序進(jìn)行到可選模塊62、64、66或68。在模塊62、64、66或68中,如果存在,程序運(yùn)行可能沒有作用、用于程序40的另一部分中的目的、或用于檢測(cè)所涉及模塊已運(yùn)行的代碼, 在這種情況下四個(gè)模塊的代碼可以相同或不同。模塊62、64、66和68可包括用于這些功能中的兩個(gè)或兩個(gè)以上功能的代碼。作為備選,或另外,模塊62、64、66和/或68可代表根本不實(shí)際運(yùn)行的代碼,而是僅使編譯后的程序40更難閱讀。為使混淆不太明顯,即使模塊54、 56、62、64、66和68中的兩個(gè)的運(yùn)行結(jié)果一樣,這些模塊的代碼也可以不同。
之后,程序進(jìn)行到模塊70、72、74和76之一,在那里進(jìn)行進(jìn)一步的不可預(yù)見的選擇,然后程序進(jìn)行到可選模塊78、80、82、84、86、88、90和92中的所選模塊。模塊54、56、62、 64,66和68的上述描述也應(yīng)用于模塊78、80、82、84、86、88、90和92,為了簡(jiǎn)明不再重復(fù)。
不可預(yù)見的選擇的連續(xù)層級(jí)的數(shù)量可大于或小于所示的三級(jí)。不同分支中的層級(jí)數(shù)量可以不同,盡管通常相同數(shù)量可能更安全,因?yàn)榉浅6痰穆窂娇赡芟驒C(jī)敏或幸運(yùn)的黑客呈現(xiàn)脆弱性。然而,導(dǎo)致8個(gè)杈的三級(jí)被認(rèn)為對(duì)許多目的而言均很方便。
該及其它不可預(yù)見的選擇的基礎(chǔ)可取決于環(huán)境、所需要的混淆程度、可用的不可預(yù)見資源、及寫程序40的各個(gè)程序員。通常優(yōu)選兩個(gè)結(jié)果約略相等的概率?;趥坞S機(jī)數(shù)的選擇通常足夠安全并易于實(shí)施,但偶然使用更無規(guī)律的東西可能有利。在快速連續(xù)多次重復(fù)不可預(yù)見的選擇時(shí),單一偽隨機(jī)數(shù)或其它不可預(yù)見的數(shù)據(jù)可用于選擇整個(gè)路徑,例如通過選擇矩陣中的一行,然后使用該行中的項(xiàng)指定形成該路徑的連續(xù)選擇。在圖2所示的例子中,矩陣可具有8行,每行包含三個(gè)二進(jìn)制數(shù)字的不同排列。
程序40 從可選模塊 78、80、82、84、86、88、90 和 92 進(jìn)行到模塊 94、96、98、100、102、 104、106和108,在那里獲得真實(shí)輸入,及根據(jù)該輸入運(yùn)行真實(shí)條件分支。八個(gè)真實(shí)條件分支模塊94、96、98、100、102、104、106和108形式上可以不同,盡管它們實(shí)質(zhì)上測(cè)試同一條件。在簡(jiǎn)單例子中,不同的模塊可測(cè)試是否χ > y、是否χ-y > 0、是否x+k > y+k,依此類推。本領(lǐng)域技術(shù)人員將理解怎樣產(chǎn)生所希望混淆程度的、所希望次數(shù)的測(cè)試以進(jìn)行比較,或條件分支通?;谄涞钠渌鼦l件。
根據(jù)真實(shí)條件分支的結(jié)果,對(duì)于一真實(shí)結(jié)果,程序40進(jìn)行到模塊110、112、114、 116、118、120、122或124之一;或?qū)τ诹硪徽鎸?shí)結(jié)果,程序40進(jìn)行到模塊126、128、130、 132、134、136、138 或 140 之一。如果每一結(jié)果組 110、112、114、116、118、120、122 或 124 或 126、128、130、132、134、136、138或140中的模塊數(shù)量等于真實(shí)條件分支模塊94、96、98、 100、102、104、106和108的數(shù)量,則每一真實(shí)條件分支模塊可將控制轉(zhuǎn)到每一結(jié)果組中的具體模塊。作為備選,真實(shí)條件分支的結(jié)果可選擇結(jié)果組,及每一結(jié)果組中的具體模塊可被不可預(yù)見地選擇,在這種情況下,結(jié)果組中的模塊數(shù)量可不同于真實(shí)條件分支模塊的數(shù)量。
自所選結(jié)果模塊 110、112、114、116、118、120、122、124 或 126、128、130、132、134、 136、138、140,程序40反復(fù)地進(jìn)行到相鄰模塊直到控制達(dá)到“真實(shí)”結(jié)果模塊142或144為止。該過程可與確定模塊的初始選擇的數(shù)向下計(jì)數(shù)到零一樣簡(jiǎn)單,或可以是更復(fù)雜的過程。 控制可沿每一結(jié)果組中的模塊按一個(gè)方向傳遞,或按不可預(yù)見地選擇的方向,模塊形成邏輯環(huán),如圖所示。真實(shí)結(jié)果模塊142或144可以是所選結(jié)果模塊之一,或可以是獨(dú)立于真實(shí)結(jié)果模塊142或144的模塊,程序40分別進(jìn)行到模塊150或152,在那里根據(jù)真實(shí)條件分支的結(jié)果運(yùn)行其它代碼。
在實(shí)施例中,與模塊54、56等類似的另外的可選模塊可包括在真實(shí)條件分支模塊 94等和結(jié)果模塊110等或126等之間。對(duì)于兩個(gè)分支,前述另外的可選模塊可以相同或不同。另外的可選模塊可包括在結(jié)果組內(nèi)。然而,根據(jù)程序40在哪一結(jié)果模塊進(jìn)入結(jié)果組, 前述可選模塊將以可預(yù)測(cè)的方式運(yùn)行和跳過,或前述可選模塊的重復(fù)次數(shù)以可預(yù)測(cè)的方式變化,該可預(yù)測(cè)性可導(dǎo)致脆弱性。因此,程序員在選擇用于前述可選模塊的適當(dāng)材料時(shí)應(yīng)利用其技能和判斷。
如果反向工程師試圖通過圖2中所示的程序模塊分析路徑,十五個(gè)而不是一個(gè)條件分支命令的存在及通過這些程序模塊的至少十六個(gè)不同備選路徑的存在可迷惑和阻止分析。例如,調(diào)試工具通常將能夠定位條件分支,但調(diào)試程序?qū)⒉荒軈^(qū)分混淆性條件分支和真實(shí)條件分支,及將不能解釋為什么有這樣多的分支。例如,如果黑客試圖改變真實(shí)條件分支命令以確保結(jié)果與真實(shí)輸入無關(guān),黑客必須找到并改變真實(shí)條件分支的所有八個(gè)情形, 或必須理解混淆性條件分支樹并使其無效,以獲得可靠的結(jié)果。類似地,如果任何可選代碼模塊用于真實(shí)功能及黑客希望改變?cè)撃K,黑客必須找到和改變?cè)摯a模塊的每一情形, 或必須摧毀任何在前的混淆性條件分支,以獲得一致結(jié)果。
作為另外的安全措施,可監(jiān)視部分或所有可選功能模塊54等的運(yùn)行。例如,篡改任何混淆性條件分支可通過監(jiān)視該混淆性條件分支之后其兩側(cè)的一對(duì)可選功能模塊的相對(duì)運(yùn)行率而進(jìn)行檢測(cè)。例如,篡改或繞過可選功能模塊之一可通過在相繼通過樹時(shí)觀察運(yùn)行樹中該層級(jí)的模塊的結(jié)果及檢測(cè)相繼通過連續(xù)路徑是否產(chǎn)生相同或不同結(jié)果而進(jìn)行檢測(cè)。
現(xiàn)在參考圖3A、3B、3C、3D (統(tǒng)稱為圖3),示出了用于實(shí)現(xiàn)圖2的過程的計(jì)算機(jī)程序?qū)嵤├脑创a的例子。為便于引用,已對(duì)代碼行進(jìn)行編號(hào)。
在7-15行,定義了 8行、3列的矩陣,每一個(gè)均包含二進(jìn)制數(shù)字。列數(shù)選擇為等于混淆性分支的層級(jí)數(shù),見圖2中的53、58、70等在該例子中,選擇行數(shù)使得每一可能的不同行出現(xiàn)一次,為清晰起見,行以有條理的順序列出。其它排列也是可能的。例如,行可被混洗以使矩陣在二進(jìn)制對(duì)象代碼中不太容易認(rèn)出。在23和24行,產(chǎn)生代表矩陣中的行號(hào)的偽隨機(jī)數(shù)i。行i中的相繼數(shù)字將用作不可預(yù)見的數(shù)據(jù),相繼的混淆性分支決定的程度將基于該數(shù)據(jù)。
在行25,讀矩陣行i的第一數(shù)字,項(xiàng)矩陣[i] W],及在26和67行(對(duì)應(yīng)于圖2中的步驟53),程序根據(jù)矩陣[i]
為0還是1而轉(zhuǎn)到代碼的不同部分。為清晰起見,兩個(gè)備選部分,即27-66行和68-107行,被示作一樣,但除28和69行的識(shí)別說明“左”和“右”之夕卜。然而,即使兩個(gè)部分實(shí)質(zhì)上執(zhí)行相同計(jì)算,它們也可寫成看起來不同。這樣的區(qū)別可使黑客或反向工程師更難認(rèn)識(shí)到有復(fù)制的分支及識(shí)別所有分支。此外,為清晰和簡(jiǎn)明起見,圖 2的可選代碼如模塊54、56、62等、78等不包括在圖3中。
在29、30和48行,對(duì)應(yīng)于圖2中的第二級(jí)混淆性條件分支58,程序讀項(xiàng)矩陣[i] [1]即矩陣行i的第二數(shù)字,并據(jù)其進(jìn)行分支。行70、71和89為同樣的行,其對(duì)應(yīng)于圖2中的另一第二級(jí)混淆性條件分支60,為簡(jiǎn)潔起見,將不單獨(dú)進(jìn)行描述。在32、33和40行,對(duì)應(yīng)于圖2中的第三級(jí)混淆性條件分支70,程序讀項(xiàng)矩陣[i] [2]即矩陣行i的第三數(shù)字,并據(jù)其進(jìn)行分支。行50、73和91對(duì)應(yīng)于第三級(jí)混淆性條件分支72、74和76的行32。
最后,在行35-38、42-45、53-56、60-63、76-79、83-86、94-97 和 101-104,程序到達(dá)八個(gè)不同的點(diǎn),對(duì)應(yīng)于圖2中的真實(shí)條件分支94、96、98、100、102、104、106和108。在該例子中,分支以其為條件的輸入簡(jiǎn)單地為值a和b之間的差,a和b在行21中預(yù)定義。在實(shí)施例中,輸入可隨程序的另一部分中計(jì)算的值、從程序外面接收的數(shù)據(jù)或二者而定。
如果a > b,程序從選擇的無論哪一真實(shí)條件分支進(jìn)行到cirl (行109);如果a < b則進(jìn)行到cir2 (行133)。在cirl和cir2的每一個(gè)中,具有從1到8的值的新隨機(jī)值 i用作switch語句的自變量,八個(gè)值對(duì)應(yīng)于圖2中的模塊110-124或126-140。之后,程序循環(huán),重復(fù)遞減i直到i = 0為止,對(duì)應(yīng)于圖2中的模塊142或144,因此printf語句輸出 A是否大于B,對(duì)應(yīng)于圖2中的模塊150或152。為清晰起見,cirl和cir2被視作一樣。在實(shí)施例中,它們可完全不同,即使它們具有類似的功能,它們也可不同地表示。如上所述,其它代碼可在cirl和cir2之前或之內(nèi)內(nèi)插。
盡管已描述了具體的實(shí)施例,但在不脫離本發(fā)明范圍的情況下,技術(shù)人員將理解可怎樣組合和替代不同實(shí)施例的特征。
例如,圖2示出了真實(shí)條件分支之前和之后的具體混淆性結(jié)構(gòu)。這些混淆性結(jié)構(gòu)中的任一結(jié)構(gòu)均可與真實(shí)條件分支的另一側(cè)的無混淆或不同形式的混淆一起使用。
前面關(guān)于本發(fā)明系統(tǒng)的目前預(yù)期最佳實(shí)施方式的描述不應(yīng)視為限制,而僅用于描述本發(fā)明系統(tǒng)的一般運(yùn)行原理的目的。本發(fā)明的保護(hù)范圍由權(quán)利要求確定。
權(quán)利要求
1.在運(yùn)行程序的計(jì)算機(jī)中進(jìn)行條件跳轉(zhuǎn)的方法,包括在計(jì)算機(jī)中提供真實(shí)條件分支以其為條件的輸入;在計(jì)算機(jī)中提供混淆性不可預(yù)見的數(shù)據(jù);在計(jì)算機(jī)程序中,運(yùn)行代碼以產(chǎn)生以不可預(yù)見的數(shù)據(jù)為條件的混淆性分支;及在計(jì)算機(jī)程序中由混淆性條件分支確定的點(diǎn)處,進(jìn)行以所述輸入為條件的真實(shí)分支。
2.根據(jù)權(quán)利要求1的方法,還包括重復(fù)混淆性條件分支,及在計(jì)算機(jī)程序中由混淆性條件分支確定的點(diǎn)處進(jìn)行真實(shí)條件分支。
3.根據(jù)權(quán)利要求2的方法,其中所述不可預(yù)見的數(shù)據(jù)選擇矩陣的一行,及混淆性條件 分支由所選行中的項(xiàng)確定。
4.根據(jù)權(quán)利要求1的方法,還包括從真實(shí)條件分支進(jìn)行到程序中隨進(jìn)行真實(shí)條件分支 的點(diǎn)而定的點(diǎn),之后,進(jìn)行到與進(jìn)行真實(shí)條件分支的點(diǎn)無關(guān)的點(diǎn)。
5.根據(jù)權(quán)利要求4的方法,其中從隨進(jìn)行真實(shí)條件分支的點(diǎn)而定的點(diǎn)進(jìn)行到與進(jìn)行真 實(shí)條件分支的點(diǎn)無關(guān)的點(diǎn)被使得包括反復(fù)進(jìn)行,直到到達(dá)獨(dú)立點(diǎn)為止。
6.根據(jù)權(quán)利要求1的方法,在真實(shí)條件分支之后,將另外的混淆性代碼重復(fù)不可預(yù)見 的次數(shù)。
7.根據(jù)權(quán)利要求1的方法,還包括運(yùn)行所述混淆性條件分支和所述真實(shí)條件分支之間 的其它計(jì)算機(jī)程序代碼。
8.根據(jù)權(quán)利要求7的方法,還包括監(jiān)視所述其它計(jì)算機(jī)程序代碼的運(yùn)行,及嘗試在不 同的混淆性條件分支選擇之后檢測(cè)其它程序代碼的運(yùn)行之間的差異。
9.根據(jù)權(quán)利要求1的方法,其中提供輸入包括從同一程序的另一部分提供輸入。
10.根據(jù)權(quán)利要求1的方法,其中提供不可預(yù)見的數(shù)據(jù)包括在程序內(nèi)從不可預(yù)見的數(shù) 據(jù)源調(diào)用。
全文摘要
本發(fā)明公開了在運(yùn)行程序的計(jì)算機(jī)中進(jìn)行條件跳轉(zhuǎn)的方法,包括提供輸入,以該輸入為條件進(jìn)行真實(shí)條件分支;提供混淆性不可預(yù)見的數(shù)據(jù);運(yùn)行代碼以產(chǎn)生以不可預(yù)見的數(shù)據(jù)為條件的混淆性分支;在計(jì)算機(jī)程序中由混淆性條件分支確定的點(diǎn)處,進(jìn)行以所述輸入為條件的真實(shí)分支。本發(fā)明可很好地防止剽竊和反向工程。
文檔編號(hào)G06F21/22GK101847194SQ20101014002
公開日2010年9月29日 申請(qǐng)日期2010年3月24日 優(yōu)先權(quán)日2009年3月24日
發(fā)明者B·辛格, N·薩克塞納, V·S·S·拉維納德, R·S·肖漢 申請(qǐng)人:安全網(wǎng)絡(luò)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1