還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法和裝置制造方法
【專(zhuān)利摘要】本發(fā)明涉及一種還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法和裝置。所述方法包括以下步驟:獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址;獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址;根據(jù)所述當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址,比對(duì)得到所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址;將所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址替換為所述函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。上述還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法和裝置,通過(guò)獲取被第三動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址后,查找到該函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址,將被修改后的函數(shù)地址替換為原始函數(shù)地址,還原了函數(shù)的原始函數(shù)地址,有效防止函數(shù)被惡意病毒所篡改,提高了信息的安全性。
【專(zhuān)利說(shuō)明】還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全領(lǐng)域,特別是涉及一種還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法和裝置。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)的發(fā)展,智能終端越來(lái)越受到人們的青睞。為了在智能終端上實(shí)現(xiàn)多種多樣的功能,軟件服務(wù)者提供了各種各樣的應(yīng)用程序,安裝這些應(yīng)用程序,需要對(duì)智能終端的軟件平臺(tái)進(jìn)行越獄。在軟件平臺(tái)處于越獄的環(huán)境下,進(jìn)程注入是一種普通的技術(shù),絕大多數(shù)的第三方插件(插件即動(dòng)態(tài)庫(kù))都是通過(guò)進(jìn)程注入實(shí)現(xiàn)的,實(shí)現(xiàn)的原理是修改進(jìn)程中原有的函數(shù),將自己的代碼加入到進(jìn)程中。
[0003]然而,通過(guò)進(jìn)程注入方式修改原有的函數(shù),使得原有的函數(shù)容易被惡意病毒所篡改,信息容易被泄漏,存在較大的安全風(fēng)險(xiǎn)。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對(duì)傳統(tǒng)的進(jìn)程注入方式修改函數(shù)使得信息容易被泄漏,存在較大安全風(fēng)險(xiǎn)的問(wèn)題,提供一種能防止函數(shù)被惡意病毒所篡改,提高信息安全的還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法。
[0005]此外,還有必要提供一種能防止函數(shù)被惡意病毒所篡改,提高信息安全的還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的裝置。
[0006]一種還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法,包括以下步驟:
[0007]獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址;
[0008]獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址;
[0009]根據(jù)所述當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址,比對(duì)得到所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址;
[0010]將所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址替換為所述函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
[0011]一種還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的裝置,包括:
[0012]獲取模塊,用于獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址;
[0013]讀取模塊,用于獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址;
[0014]比對(duì)模塊,用于根據(jù)所述當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址,比對(duì)得到所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址;
[0015]替換模塊,用于將所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址替換為所述函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
[0016]上述還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法和裝置,通過(guò)獲取被第三動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址后,查找到該函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址,將被修改后的函數(shù)地址替換為原始函數(shù)地址,還原了函數(shù)的原始函數(shù)地址,有效防止函數(shù)被惡意病毒所篡改,提高了信息的安全性。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0017]圖1為一個(gè)實(shí)施例中還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法的流程圖;
[0018]圖2為一個(gè)實(shí)施例中獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址的具體流程圖;
[0019]圖3為一個(gè)實(shí)施例中還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的裝置的結(jié)構(gòu)示意圖;
[0020]圖4為一個(gè)實(shí)施例中獲取模塊的內(nèi)部結(jié)構(gòu)示意圖;
[0021]圖5為能實(shí)現(xiàn)本發(fā)明實(shí)施例的一個(gè)計(jì)算機(jī)系統(tǒng)的模塊圖。
【具體實(shí)施方式】
[0022]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0023]圖1為一個(gè)實(shí)施例中還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法的流程圖。如圖1所示,該還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法,包括以下步驟:
[0024]步驟102,獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址。
[0025]圖2為一個(gè)實(shí)施例中獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址的具體流程圖。如圖2所示,該獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址包括步驟202至步驟212,具體如下:
[0026]步驟202,獲取當(dāng)前進(jìn)程類(lèi)的函數(shù)。
[0027]具體的,獲取當(dāng)前進(jìn)程所有類(lèi)的函數(shù)。類(lèi)是一種面向?qū)ο笥?jì)算機(jī)編程語(yǔ)言的構(gòu)造,是創(chuàng)建對(duì)象的藍(lán)圖,描述了所創(chuàng)建的對(duì)象共同的屬性和方法。
[0028]步驟204,獲取當(dāng)前進(jìn)程加載動(dòng)態(tài)庫(kù)的函數(shù)地址范圍。
[0029]具體的,獲取當(dāng)前進(jìn)程所有加載動(dòng)態(tài)庫(kù)的函數(shù)地址范圍。
[0030]步驟206,獲取該當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù)。
[0031]本實(shí)施例中,該獲取該當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù)的步驟包括:通過(guò)NSBundle查找該當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù)。
[0032]具體的,Bundle是一個(gè)目錄,其中包含了程序會(huì)使用的資源。Cocoa提供了類(lèi)NSBundle,用于獲取類(lèi)所屬的動(dòng)態(tài)庫(kù)。
[0033]步驟208,檢測(cè)該當(dāng)前進(jìn)程類(lèi)的函數(shù)的函數(shù)地址,通過(guò)匹配該動(dòng)態(tài)庫(kù)的函數(shù)地址范圍,得到該類(lèi)的函數(shù)所屬的動(dòng)態(tài)庫(kù)。
[0034]具體的,檢測(cè)當(dāng)前進(jìn)程所有類(lèi)的函數(shù)的函數(shù)地址,將該函數(shù)的函數(shù)地址與動(dòng)態(tài)庫(kù)的函數(shù)地址范圍進(jìn)行匹配,即可得到該函數(shù)所屬的動(dòng)態(tài)庫(kù)。
[0035]步驟210,判斷該類(lèi)的函數(shù)所屬的動(dòng)態(tài)庫(kù)與該類(lèi)所屬的動(dòng)態(tài)庫(kù)是否相同,若不同,則表示該函數(shù)的函數(shù)地址被第三方動(dòng)態(tài)庫(kù)修改。
[0036]步驟212,獲取被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)。
[0037]通過(guò)類(lèi)動(dòng)態(tài)庫(kù)和函數(shù)所屬動(dòng)態(tài)庫(kù)不同,判斷得出函數(shù)的函數(shù)地址是否被修改,檢測(cè)準(zhǔn)確。
[0038]步驟104,獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址。
[0039]本實(shí)施例中,該獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址的步驟包括:讀取當(dāng)前可執(zhí)行文件文件頭信息,獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址。
[0040]具體的,可執(zhí)行文件文件頭信息是指Mach-O (mach object)文件頭,Mach-O是一種用于可執(zhí)行文件,目標(biāo)代碼,動(dòng)態(tài)庫(kù),內(nèi)核轉(zhuǎn)存的文件格式。
[0041]步驟106,根據(jù)該當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址,比對(duì)得到該被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
[0042]具體的,函數(shù)名稱(chēng)與原始函數(shù)地址之間存在映射關(guān)系,將被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)從函數(shù)名稱(chēng)與原始函數(shù)地址之間的映射關(guān)系進(jìn)行查找,可得到該被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
[0043]步驟108,將該被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址替換為該函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
[0044]本實(shí)施例中,步驟108包括:通過(guò)runtime的應(yīng)用程序接口直接將該被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址設(shè)置為該函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
[0045]runtime封裝了運(yùn)行時(shí)的環(huán)境,每個(gè)應(yīng)用程序都有一個(gè)runtime類(lèi)實(shí)例,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接。
[0046]上述還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法,通過(guò)獲取被第三動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址后,查找到該函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址,將被修改后的函數(shù)地址替換為原始函數(shù)地址,還原了函數(shù)的原始函數(shù)地址,有效防止函數(shù)被惡意病毒所篡改,提高了信息的安全性。
[0047]上述還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法可應(yīng)用于1S系統(tǒng)、Android系統(tǒng)等中,可以保護(hù)賬號(hào)類(lèi)、支付類(lèi)應(yīng)用的關(guān)鍵函數(shù)被篡改。
[0048]圖3為一個(gè)實(shí)施例中還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的裝置的結(jié)構(gòu)示意圖。如圖3所示,該還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的裝置,包括獲取模塊310、讀取模塊320、比對(duì)模塊330和替換模塊340。其中:
[0049]獲取模塊310用于獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址。
[0050]圖4為一個(gè)實(shí)施例中獲取模塊的內(nèi)部結(jié)構(gòu)示意圖。如圖4所示,該獲取模塊310包括第一獲取單元312、第二獲取單元314、查找單元316、檢測(cè)匹配單元318和判斷單元319。其中:
[0051]第一獲取單元312用于獲取當(dāng)前進(jìn)程類(lèi)的函數(shù)。具體的,第一獲取單元312獲取當(dāng)前進(jìn)程所有類(lèi)的函數(shù)。
[0052]第二獲取單元314用于獲取當(dāng)前進(jìn)程加載動(dòng)態(tài)庫(kù)的函數(shù)地址范圍。具體的,第二獲取單元314獲取當(dāng)前進(jìn)程所有加載動(dòng)態(tài)庫(kù)的函數(shù)地址范圍。
[0053]查找單元316用于獲取該當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù)。
[0054]本實(shí)施例中,查找單元316還用于通過(guò)NSBundle查找該當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù)。
[0055]具體的,Bundle是一個(gè)目錄,其中包含了程序會(huì)使用的資源。Cocoa提供了類(lèi)NSBundle,用于獲取類(lèi)所屬的動(dòng)態(tài)庫(kù)。
[0056]檢測(cè)匹配單元318用于檢測(cè)該當(dāng)前進(jìn)程類(lèi)的函數(shù)的函數(shù)地址,通過(guò)匹配該動(dòng)態(tài)庫(kù)的函數(shù)地址范圍,得到該類(lèi)的函數(shù)所屬的動(dòng)態(tài)庫(kù)。具體的,檢測(cè)匹配單元318檢測(cè)當(dāng)前進(jìn)程所有類(lèi)的函數(shù)的函數(shù)地址,將該函數(shù)的函數(shù)地址與動(dòng)態(tài)庫(kù)的函數(shù)地址范圍進(jìn)行匹配,即可得到該函數(shù)所屬的動(dòng)態(tài)庫(kù)。
[0057]判斷單元319用于判斷該類(lèi)的函數(shù)所屬的動(dòng)態(tài)庫(kù)與該類(lèi)所屬的動(dòng)態(tài)庫(kù)是否相同,若不同,則表示該類(lèi)的函數(shù)地址被第三方動(dòng)態(tài)庫(kù)修改。
[0058]第一獲取單元312還用于獲取被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)。
[0059]通過(guò)類(lèi)動(dòng)態(tài)庫(kù)和函數(shù)所屬動(dòng)態(tài)庫(kù)不同,判斷得出函數(shù)的函數(shù)地址是否被修改,檢測(cè)準(zhǔn)確。
[0060]讀取模塊320用于獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址。
[0061]本實(shí)施例中,讀取模塊320還用于讀取當(dāng)前可執(zhí)行文件文件頭信息,獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址。
[0062]具體的,可執(zhí)行文件文件頭信息是指Mach-O (mach object)文件頭,Mach-O是一種用于可執(zhí)行文件,目標(biāo)代碼,動(dòng)態(tài)庫(kù),內(nèi)核轉(zhuǎn)存的文件格式。
[0063]比對(duì)模塊330用于根據(jù)該當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址,比對(duì)得到該被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。具體的,函數(shù)名稱(chēng)與原始函數(shù)地址之間存在映射關(guān)系,比對(duì)模塊330將被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)從函數(shù)名稱(chēng)與原始函數(shù)地址之間的映射關(guān)系進(jìn)行查找,可得到該被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
[0064]替換模塊340用于將該被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址替換為該函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
[0065]本實(shí)施例中,替換模塊340還用于通過(guò)runtime的應(yīng)用程序接口直接將該被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址設(shè)置為該函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
[0066]runtime封裝了運(yùn)行時(shí)的環(huán)境,每個(gè)應(yīng)用程序都有一個(gè)runtime類(lèi)實(shí)例,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接。
[0067]上述還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的裝置,通過(guò)獲取被第三動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址后,查找到該函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址,將被修改后的函數(shù)地址替換為原始函數(shù)地址,還原了函數(shù)的原始函數(shù)地址,有效防止函數(shù)被惡意病毒所篡改,提高了信息的安全性。
[0068]圖5為能實(shí)現(xiàn)本發(fā)明實(shí)施例的一個(gè)計(jì)算機(jī)系統(tǒng)1000的模塊圖。該計(jì)算機(jī)系統(tǒng)1000只是一個(gè)適用于本發(fā)明的計(jì)算機(jī)環(huán)境的示例,不能認(rèn)為是提出了對(duì)本發(fā)明的使用范圍的任何限制。計(jì)算機(jī)系統(tǒng)1000也不能解釋為需要依賴(lài)于或具有圖示的示例性的計(jì)算機(jī)系統(tǒng)1000中的一個(gè)或多個(gè)部件的組合。
[0069]圖5中示出的計(jì)算機(jī)系統(tǒng)1000是一個(gè)適合用于本發(fā)明的計(jì)算機(jī)系統(tǒng)的例子。具有不同子系統(tǒng)配置的其它架構(gòu)也可以使用。例如個(gè)人數(shù)字助理、智能電話、平板電腦、便攜式媒體播放器等類(lèi)似設(shè)備可以適用于本發(fā)明的一些實(shí)施例。但不限于以上所列舉的設(shè)備。
[0070]如圖5所示,計(jì)算機(jī)系統(tǒng)1000包括處理器1010、存儲(chǔ)器1020和系統(tǒng)總線1022。包括存儲(chǔ)器1020和處理器1010在內(nèi)的各種系統(tǒng)組件連接到系統(tǒng)總線1022上。處理器1010是一個(gè)用來(lái)通過(guò)計(jì)算機(jī)系統(tǒng)中基本的算術(shù)和邏輯運(yùn)算來(lái)執(zhí)行計(jì)算機(jī)程序指令的硬件。存儲(chǔ)器1020是一個(gè)用于臨時(shí)或永久性存儲(chǔ)計(jì)算程序或數(shù)據(jù)(例如,程序狀態(tài)信息)的物理設(shè)備。系統(tǒng)總線1020可以為以下幾種類(lèi)型的總線結(jié)構(gòu)中的任意一種,包括存儲(chǔ)器總線或存儲(chǔ)控制器、外設(shè)總線和局部總線。處理器1010和存儲(chǔ)器1020可以通過(guò)系統(tǒng)總線1022進(jìn)行數(shù)據(jù)通信。其中存儲(chǔ)器1020包括只讀存儲(chǔ)器(ROM)或閃存(圖中都未示出),以及隨機(jī)存取存儲(chǔ)器(RAM),RAM通常是指加載了操作系統(tǒng)和應(yīng)用程序的主存儲(chǔ)器。
[0071]計(jì)算機(jī)系統(tǒng)1000還包括顯示接口 1030(例如,圖形處理單元)、顯示設(shè)備1040(例如,液晶顯示器)、音頻接口 1050(例如,聲卡)以及音頻設(shè)備1060(例如,揚(yáng)聲器)。顯示設(shè)備1040和音頻設(shè)備1060是用于體驗(yàn)多媒體內(nèi)容的媒體設(shè)備。
[0072]計(jì)算機(jī)系統(tǒng)1000 —般包括一個(gè)存儲(chǔ)設(shè)備1070。存儲(chǔ)設(shè)備1070可以從多種計(jì)算機(jī)可讀介質(zhì)中選擇,計(jì)算機(jī)可讀介質(zhì)是指可以通過(guò)計(jì)算機(jī)系統(tǒng)1000訪問(wèn)的任何可利用的介質(zhì),包括移動(dòng)的和固定的兩種介質(zhì)。例如,計(jì)算機(jī)可讀介質(zhì)包括但不限于,閃速存儲(chǔ)器(微型SD卡),CD-R0M,數(shù)字通用光盤(pán)(DVD)或其它光盤(pán)存儲(chǔ)、磁帶盒、磁帶、磁盤(pán)存儲(chǔ)或其它磁存儲(chǔ)設(shè)備,或者可用于存儲(chǔ)所需信息并可由計(jì)算機(jī)系統(tǒng)1000訪問(wèn)的任何其它介質(zhì)。
[0073]計(jì)算機(jī)系統(tǒng)1000還包括輸入裝置1080和輸入接口 1090(例如,1控制器)。用戶(hù)可以通過(guò)輸入裝置1080,如鍵盤(pán)、鼠標(biāo)、顯示裝置1040上的觸摸面板設(shè)備,輸入指令和信息到計(jì)算機(jī)系統(tǒng)1000中。輸入裝置1080通常是通過(guò)輸入接口 1090連接到系統(tǒng)總線1022上的,但也可以通過(guò)其它接口或總線結(jié)構(gòu)相連接,如通用串行總線(USB)。
[0074]計(jì)算機(jī)系統(tǒng)1000可在網(wǎng)絡(luò)環(huán)境中與一個(gè)或者多個(gè)網(wǎng)絡(luò)設(shè)備進(jìn)行邏輯連接。網(wǎng)絡(luò)設(shè)備可以是個(gè)人電腦、服務(wù)器、路由器、智能電話、平板電腦或者其它公共網(wǎng)絡(luò)節(jié)點(diǎn)。計(jì)算機(jī)系統(tǒng)1000通過(guò)局域網(wǎng)(LAN)接口 1100或者移動(dòng)通信單元1110與網(wǎng)絡(luò)設(shè)備相連接。局域網(wǎng)(LAN)是指在有限區(qū)域內(nèi),例如家庭、學(xué)校、計(jì)算機(jī)實(shí)驗(yàn)室、或者使用網(wǎng)絡(luò)媒體的辦公樓,互聯(lián)組成的計(jì)算機(jī)網(wǎng)絡(luò)。WiFi和雙絞線布線以太網(wǎng)是最常用的構(gòu)建局域網(wǎng)的兩種技術(shù)。WiFi是一種能使計(jì)算機(jī)系統(tǒng)1000間交換數(shù)據(jù)或通過(guò)無(wú)線電波連接到無(wú)線網(wǎng)絡(luò)的技術(shù)。移動(dòng)通信單元1110能在一個(gè)廣闊的地理區(qū)域內(nèi)移動(dòng)的同時(shí)通過(guò)無(wú)線電通信線路接聽(tīng)和撥打電話。除了通話以外,移動(dòng)通信單元1110也支持在提供移動(dòng)數(shù)據(jù)服務(wù)的2G,3G或4G蜂窩通信系統(tǒng)中進(jìn)行互聯(lián)網(wǎng)訪問(wèn)。
[0075]應(yīng)當(dāng)指出的是,其它包括比計(jì)算機(jī)系統(tǒng)1000更多或更少的子系統(tǒng)的計(jì)算機(jī)系統(tǒng)也能適用于發(fā)明。例如,計(jì)算機(jī)系統(tǒng)1000可以包括能在短距離內(nèi)交換數(shù)據(jù)的藍(lán)牙單元,用于照相的圖像傳感器,以及用于測(cè)量加速度的加速計(jì)。
[0076]如上面詳細(xì)描述的,適用于本發(fā)明的計(jì)算機(jī)系統(tǒng)1000能執(zhí)行還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法的指定操作。計(jì)算機(jī)系統(tǒng)1000通過(guò)處理器1010運(yùn)行在計(jì)算機(jī)可讀介質(zhì)中的軟件指令的形式來(lái)執(zhí)行這些操作。這些軟件指令可以從存儲(chǔ)設(shè)備1070或者通過(guò)局域網(wǎng)接口 1100從另一設(shè)備讀入到存儲(chǔ)器1020中。存儲(chǔ)在存儲(chǔ)器1020中的軟件指令使得處理器1010執(zhí)行上述還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法。此外,通過(guò)硬件電路或者硬件電路結(jié)合軟件指令也能同樣實(shí)現(xiàn)本發(fā)明。因此,實(shí)現(xiàn)本發(fā)明并不限于任何特定硬件電路和軟件的組合。
[0077]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專(zhuān)利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專(zhuān)利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的方法,包括以下步驟: 獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址; 獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址; 根據(jù)所述當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址,比對(duì)得到所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址; 將所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址替換為所述函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址的步驟包括: 獲取當(dāng)前進(jìn)程類(lèi)的函數(shù); 獲取當(dāng)前進(jìn)程加載動(dòng)態(tài)庫(kù)的函數(shù)地址范圍; 獲取所述當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù); 檢測(cè)所述當(dāng)前進(jìn)程類(lèi)的函數(shù)的函數(shù)地址,通過(guò)匹配所述動(dòng)態(tài)庫(kù)的函數(shù)地址范圍,得到所述類(lèi)的函數(shù)所屬的動(dòng)態(tài)庫(kù); 判斷所述類(lèi)的函數(shù)所屬的動(dòng)態(tài)庫(kù)與所述類(lèi)所屬的動(dòng)態(tài)庫(kù)是否相同,若不同,則表示所述函數(shù)的函數(shù)地址被第三方動(dòng)態(tài)庫(kù)修改; 獲取被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述獲取所述當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù)的步驟包括: 通過(guò)NSBundle查找所述當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址的步驟包括: 讀取當(dāng)前可執(zhí)行文件文件頭信息,獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址替換為所述函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址的步驟包括: 通過(guò)runtime的應(yīng)用程序接口直接將所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址設(shè)置為所述函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
6.一種還原被第三方動(dòng)態(tài)庫(kù)修改函數(shù)地址的裝置,其特征在于,包括: 獲取模塊,用于獲取當(dāng)前進(jìn)程被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)和函數(shù)地址; 讀取模塊,用于獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址; 比對(duì)模塊,用于根據(jù)所述當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址,比對(duì)得到所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址; 替換模塊,用于將所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址替換為所述函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述獲取模塊包括: 第一獲取單元,用于獲取當(dāng)前進(jìn)程類(lèi)的函數(shù); 第二獲取單元,用于獲取當(dāng)前進(jìn)程加載動(dòng)態(tài)庫(kù)的函數(shù)地址范圍; 查找單元,用于獲取所述當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù); 檢測(cè)匹配單元,用于檢測(cè)所述當(dāng)前進(jìn)程類(lèi)的函數(shù)的函數(shù)地址,通過(guò)匹配所述動(dòng)態(tài)庫(kù)的函數(shù)地址范圍,得到所述類(lèi)的函數(shù)所屬的動(dòng)態(tài)庫(kù); 判斷單元,用于判斷所述類(lèi)的函數(shù)所屬的動(dòng)態(tài)庫(kù)與所述類(lèi)所屬的動(dòng)態(tài)庫(kù)是否相同,若不同,則表示所述函數(shù)的函數(shù)地址被第三方動(dòng)態(tài)庫(kù)修改; 所述第一獲取單元還用于獲取被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述查找單元還用于通過(guò)NSBundle查找所述當(dāng)前進(jìn)程類(lèi)所屬的動(dòng)態(tài)庫(kù)。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述讀取模塊還用于讀取當(dāng)前可執(zhí)行文件文件頭信息,獲取當(dāng)前進(jìn)程函數(shù)的原始函數(shù)地址。
10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述替換模塊還用于通過(guò)runtime的應(yīng)用程序接口直接將所述被第三方動(dòng)態(tài)庫(kù)修改的函數(shù)名稱(chēng)的函數(shù)地址設(shè)置為所述函數(shù)名稱(chēng)所對(duì)應(yīng)的原始函數(shù)地址。
【文檔編號(hào)】G06F21/56GK104268472SQ201410461485
【公開(kāi)日】2015年1月7日 申請(qǐng)日期:2014年9月11日 優(yōu)先權(quán)日:2014年9月11日
【發(fā)明者】邱金濤, 丁海峰 申請(qǐng)人:騰訊科技(深圳)有限公司