本發(fā)明涉及程序處理技術(shù)領(lǐng)域,尤其涉及一種程序處理方法、裝置及設(shè)備。
背景技術(shù):
在程序運(yùn)行過程中,程序往往容易被黑客的鉤子(HOOK)代碼所攔截,從而執(zhí)行該HOOK代碼實(shí)現(xiàn)黑客的對(duì)應(yīng)目的。
為避免程序被HOOK,也就是被插入HOOK代碼,目前,可通過對(duì)原程序代碼進(jìn)加殼處理,即在原程序代碼中設(shè)置外部代碼,使得其原程序代碼不能被查看。雖然加殼可以是對(duì)原程序代碼起到一定程度的保護(hù),但是,由于該加殼處理還存在對(duì)應(yīng)的脫殼處理,而脫殼處理使得原程序代碼存在被修改的風(fēng)險(xiǎn)。
因而,現(xiàn)有的程序處理方法使得原程序代碼易被黑客所修改以實(shí)現(xiàn)對(duì)應(yīng)的目的,使得程序運(yùn)行的安全性較差,難以有效保證程序運(yùn)行過程中的數(shù)據(jù)安全。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種程序處理方法、裝置及設(shè)備,以避免程序中某些代碼塊被惡意修改后繼續(xù)執(zhí)行而帶來(lái)的程序運(yùn)行的安全性較差的問題,有效保證程序運(yùn)行過程中的數(shù)據(jù)安全。
本發(fā)明提供一種程序處理方法,包括:
判斷程序的第一代碼塊是否被執(zhí)行;
若所述第一代碼塊被執(zhí)行,則確定所述程序未被修改,并繼續(xù)執(zhí)行所述程序的第二代碼塊;其中,所述第二代碼塊為所述程序中所述第一代碼塊的后一代碼塊。
本發(fā)明還提供一種程序處理裝置,包括:
判斷模塊,用于判斷程序的第一代碼塊是否被執(zhí)行;
第一確定模塊,用于若所述第一代碼塊被執(zhí)行,則確定所述程序未被修改;
執(zhí)行模塊,用于繼續(xù)執(zhí)行所述程序的所述第二代碼塊;其中,所述第二代碼塊為所述程序中所述第一代碼塊的后一代碼塊。
本發(fā)明還提供一種程序處理設(shè)備,包括:存儲(chǔ)器和處理器;所述存儲(chǔ)器和所述處理器連接;
所述存儲(chǔ)器用于存儲(chǔ)程序指令;
所述處理器,用于調(diào)用所述存儲(chǔ)器存儲(chǔ)的所述程序指令,用以執(zhí)行上述程序處理方法。
本發(fā)明提供的程序處理方法、裝置及設(shè)備,通過判斷程序的第一代碼塊是否被執(zhí)行,若該第一代碼塊被執(zhí)行,則確定該程序未被修改,并繼續(xù)執(zhí)行該程序的第一代碼塊的后一代碼塊的第二代碼塊。該程序處理方法,可在程序運(yùn)行過程中,及時(shí)準(zhǔn)確確定當(dāng)前程序是否被修改,僅在確定程序未被修改的情況下繼續(xù)后續(xù)程序代碼,可有效避免程序被惡意修改后繼續(xù)執(zhí)行程序代碼帶來(lái)的程序運(yùn)行的安全性較差的問題,有效保證程序運(yùn)行過程中的數(shù)據(jù)安全。
附圖說(shuō)明
圖1為本發(fā)明提供的程序處理方法的流程圖一;
圖2為本發(fā)明提供的程序處理方法的流程圖二;
圖3為本發(fā)明提供的程序處理方法的流程圖三;
圖4為本發(fā)明提供的程序處理方法所針對(duì)的程序代碼塊的一種示意圖;
圖5為本發(fā)明提供的程序處理方法的流程圖四;
圖6為本發(fā)明提供的程序處理方法的流程圖五;
圖7為本發(fā)明提供的一種程序處理裝置的結(jié)構(gòu)示意圖;
圖8為本發(fā)明提供的另一種程序處理裝置的結(jié)構(gòu)示意圖;
圖9為本發(fā)明提供的一種程序處理設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施方式
本發(fā)明下述提供的各程序處理方法,可由程序處理裝置執(zhí)行,該程序處理裝置可由軟件和/或硬件的方式集成在程序處理設(shè)備中,該程序處理設(shè)備可以為計(jì)算機(jī)設(shè)備、智能硬件設(shè)備、智能手機(jī)、智能手環(huán)等可執(zhí)行程序代碼的電子設(shè)備。
通過執(zhí)行本發(fā)明下述提供的各程序處理方法,可在程序運(yùn)行過程中,及時(shí)準(zhǔn)確當(dāng)前程序是否被修改,并在程序未被修改的情況下繼續(xù)程序代碼,實(shí)現(xiàn)對(duì)應(yīng)的程序目的;而在確定該程序被修改的情況下,及時(shí)停止程序的代碼的繼續(xù)執(zhí)行,有效避免了程序被惡意修改后繼續(xù)執(zhí)行程序代碼帶來(lái)的程序運(yùn)行的安全性較差的問題,有效保證程序運(yùn)行過程中的數(shù)據(jù)安全。
圖1為本發(fā)明提供的程序處理方法的流程圖一。如圖1所示,該程序處理方法可包括如下:
S101、判斷程序的第一代碼塊是否被執(zhí)行。
具體地,該S101中可以是在對(duì)該程序的第二代碼塊進(jìn)行執(zhí)行之前,也就是確定該程序的第一代碼塊是否被執(zhí)行。其中,該第一代碼塊可以為該程序的預(yù)設(shè)代碼塊,如預(yù)設(shè)的重要代碼塊。第二代碼塊為該程序中該第一代碼塊的后一代碼塊。
S102、若該第一代碼塊被執(zhí)行,則確定該程序未被修改,并繼續(xù)執(zhí)行該程序的第二代碼塊。
由于程序被HOOK后,通常會(huì)繞過程序中部分原有代碼,而執(zhí)行被插入的HOOK代碼,因而,該方法中可以通過判斷程序的第一代碼塊是否被執(zhí)行,根據(jù)該判斷結(jié)果確定是否該程序被HOOK,從而確定該程序是否被修改。
因而,若該第一代碼塊被執(zhí)行,則可確定該程序未被HOOK,即未被插入HOOK代碼,因而,可確定該程序未被修改。反之,若該第一代碼塊未被執(zhí)行,則可確定該程序中被HOOK,即被插入HOOK代碼,由于該插入的HOOK代碼的執(zhí)行,使得該第一代碼塊未被執(zhí)行,因而可確定該程序已被修改。
本發(fā)明提供的程序處理方法,通過判斷程序的第一代碼塊是否被執(zhí)行,若該第一代碼塊被執(zhí)行,則確定該程序未被修改,并繼續(xù)執(zhí)行該程序的第一代碼塊的后一代碼塊的第二代碼塊。該程序處理方法,可在程序運(yùn)行過程中,及時(shí)準(zhǔn)確確定當(dāng)前程序是否被修改,僅在確定程序未被修改的情況下繼續(xù)后續(xù)程序代碼,可有效避免程序被惡意修改后繼續(xù)執(zhí)行程序代碼帶來(lái)的程序運(yùn)行的安全性較差的問題,有效保證程序運(yùn)行過程中的數(shù)據(jù)安全。
同時(shí),在確定程序未被修改的情況下繼續(xù)后續(xù)程序代碼,還可實(shí)現(xiàn)該程序?qū)?yīng)的目的。
可選的,在如上所述的程序處理方法的基礎(chǔ)上,該方法還可包括:
若該第一代碼塊未被執(zhí)行,則確定該程序被修改,并發(fā)出提示信息,以指示該程序被修改;其中,該第二代碼塊為該程序中該第一代碼塊的后一代碼塊。
具體地,若該第一代碼塊未被執(zhí)行,則該方法還需停止繼續(xù)執(zhí)行該第二代碼塊。
可選的,本發(fā)明還可提供一種程序處理方法。圖2為本發(fā)明提供的程序處理方法的流程圖二。如圖2所示,如上所述的S101中判斷程序的第一代碼塊是否被執(zhí)行,可以包括:
S201、判斷該第一代碼塊對(duì)應(yīng)的變量的值是否被修改。
具體地,該第一代碼塊對(duì)應(yīng)的變量可以是預(yù)先設(shè)置在該第一代碼塊中的變量(variable)參數(shù)。該第一代碼塊對(duì)應(yīng)的變量為該第一代碼塊的執(zhí)行所關(guān)聯(lián)的變量。也就是,只要執(zhí)行該第一代碼塊,該第一代碼塊對(duì)應(yīng)的變量的值便會(huì)發(fā)生變化,即被修改。只要未執(zhí)行該第一代碼塊,該第一代碼塊對(duì)應(yīng)的變量的值便不會(huì)發(fā)生變化,即不會(huì)被修改。
該S201中是通過比較該第一代碼塊對(duì)應(yīng)的變量的當(dāng)前值,與,預(yù)設(shè)值是否一致,判斷該第一代碼塊對(duì)應(yīng)的變量的值是否被修改。若一致,則可確定該變量的值被修改;反之,若不一致,則可確定該變量的值未被修改。
S202、若該變量的值被修改,則確定該第一代碼塊被執(zhí)行。
S203、若該變量的值未被修改,則確定該第一代碼塊未被執(zhí)行。
可替代地,本發(fā)明還可提供一種程序處理方法。圖3為本發(fā)明提供的程序處理方法的流程圖三。如圖3所示,如上所述的S101中判斷程序的第一代碼塊是否被執(zhí)行,可以包括:
S301、判斷當(dāng)前的狀態(tài)流程碼與預(yù)設(shè)的狀態(tài)流程碼是否一致。
具體地,該當(dāng)前的狀態(tài)流程碼中按照代碼塊的執(zhí)行順序,依次記錄了已執(zhí)行的各個(gè)代碼塊的標(biāo)識(shí)等信息。該預(yù)設(shè)的狀態(tài)流程碼中包括該程序中該第二代碼塊之前需依次執(zhí)行的各代碼塊的標(biāo)識(shí)等信息。
S302、若該當(dāng)前的狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼一致,則確定該第一代碼塊被執(zhí)行。
如該當(dāng)前的狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼一致,則已執(zhí)行的各個(gè)代碼塊即為該程序中該第二代碼塊之前需依次執(zhí)行的各代碼塊,因而,可確定該第一代碼塊已被執(zhí)行。
S303、若該當(dāng)前的狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼不一致,則確定該第一代碼塊未被執(zhí)行。
若如該當(dāng)前的狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼不一致,則已執(zhí)行的各個(gè)代碼塊中包括了該程序中該第二代碼塊之前需依次執(zhí)行的各代碼塊之外的其他代碼塊,如被插入的HOOK代碼塊,因而,可確定該第一代碼塊實(shí)際未被執(zhí)行。
本發(fā)明上述提供的各程序處理方法,可通過提供多種確定第一代碼塊是否被執(zhí)行的方案,可在程序運(yùn)行過程中,更加及時(shí)準(zhǔn)確確定當(dāng)前程序是否被修改,繼而有效避免程序被惡意修改后繼續(xù)執(zhí)行程序代碼帶來(lái)的程序運(yùn)行的安全性較差的問題,有效保證程序運(yùn)行過程中的數(shù)據(jù)安全。
本發(fā)明還可提供一種程序處理方法。圖4為本發(fā)明提供的程序處理方法所針對(duì)的程序代碼塊的一種示意圖。如圖4所示,若該程序中包括:代碼塊A、代碼塊B、代碼塊C和代碼塊D,該程序的執(zhí)行順序應(yīng)該為代碼塊A->代碼塊B->代碼塊C->代碼塊D。若該程序中被插入HOOK代碼塊,則該程序的執(zhí)行順序可變?yōu)榇a塊A->HOOK代碼塊->代碼塊C->代碼塊D。
為避免程序被插入HOOK代碼塊后繼續(xù)執(zhí)行帶來(lái)的程序運(yùn)行安全問題,在一種實(shí)例中,可在程序中的預(yù)設(shè)重要代碼塊,如代碼塊B中增加變量修改操作指令,如該代碼塊B被執(zhí)行,則便會(huì)執(zhí)行該變量修改操作指令,使得該代碼塊B對(duì)應(yīng)的變量的值發(fā)生變化。如下結(jié)合該實(shí)例進(jìn)行舉例說(shuō)明。圖5為本發(fā)明提供的程序處理方法的流程圖四。如圖5所示,該方法可包括:
S501、判斷代碼塊B對(duì)應(yīng)的變量的值是否被修改。
S502、若該代碼塊B對(duì)應(yīng)的變量的值被修改,則確定代碼塊B被執(zhí)行。
S503、確定該程序未被修改,并繼續(xù)執(zhí)行代碼塊C和代碼塊D。
S504、若該代碼塊B對(duì)應(yīng)的變量的值未被修改,則確定代碼塊B未被執(zhí)行。
若該代碼塊B對(duì)應(yīng)的變量的值未被修改,則可確定在此之前由于執(zhí)行了被插入的HOOK代碼塊,使得代碼塊B未被執(zhí)行。
S505、確定該程序被修改,并發(fā)出提示信息,以指示該程序被修改。
為避免程序被插入HOOK代碼塊后繼續(xù)執(zhí)行帶來(lái)的程序運(yùn)行安全問題,在另外一種實(shí)例中,可在每個(gè)代碼塊被執(zhí)行后,便記錄其對(duì)應(yīng)的狀態(tài)流程碼。不同代碼塊被執(zhí)行后,狀態(tài)流程碼便會(huì)不同,因此,如HOOK代碼塊被執(zhí)行,其狀態(tài)流程碼,便會(huì)與預(yù)設(shè)的狀態(tài)流程碼不同。圖6為本發(fā)明提供的程序處理方法的流程圖五。如圖6所示,該方法可包括:
S601、判斷當(dāng)前狀態(tài)流程碼與預(yù)設(shè)的狀態(tài)流程碼是否一致。
執(zhí)行代碼塊C之前,該當(dāng)前狀態(tài)流程碼可以為代碼塊A->代碼塊B,或者,代碼塊A->HOOK代碼塊。該預(yù)設(shè)的狀態(tài)流程碼可以為代碼塊A->代碼塊B。
S602、若該當(dāng)前狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼一致,則確定代碼塊B被執(zhí)行。
若該當(dāng)前狀態(tài)流程碼為代碼塊A->代碼塊B,則該當(dāng)前狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼一致,可確定代碼塊B被執(zhí)行。
S603、確定該程序未被修改,并繼續(xù)執(zhí)行代碼塊C和代碼塊D。
S604、若該當(dāng)前狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼不一致,則確定代碼塊B未被執(zhí)行。
若該當(dāng)前狀態(tài)流程碼為代碼塊A->HOOK代碼塊,則該當(dāng)前狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼不一致,可確定代碼塊B未被執(zhí)行,而HOOK代碼塊被執(zhí)行。
S605、確定該程序被修改,并發(fā)出提示信息,以指示該程序被修改。
本發(fā)明提供的上述各程序處理方法,可僅在確定程序未被修改的情況下繼續(xù)后續(xù)程序代碼,而在程序被修改的情況下,發(fā)出指示該程序被修改的提示信息,可有效避免程序被惡意修改后繼續(xù)執(zhí)行程序代碼帶來(lái)的程序運(yùn)行的安全性較差的問題,有效保證程序運(yùn)行過程中的數(shù)據(jù)安全。
本發(fā)明提供一種程序處理裝置。圖7為本發(fā)明提供的一種程序處理裝置的結(jié)構(gòu)示意圖。如圖7所示,該程序處理裝置700可包括:
判斷模塊701,用于在執(zhí)行程序的第二代碼塊之前,判斷程序的第一代碼塊是否被執(zhí)行。
第一確定模塊702,用于若該第一代碼塊被執(zhí)行,則確定該程序未被修改。
執(zhí)行模塊703,用于繼續(xù)執(zhí)行該程序的該第二代碼塊;其中,該第二代碼塊為該程序中該第一代碼塊的后一代碼塊。
可選的,圖8為本發(fā)明提供的另一種程序處理裝置的結(jié)構(gòu)示意圖。如圖8所示,該程序處理裝置700還可包括:
第二確定模塊704,用于若該第一代碼塊未被執(zhí)行,則確定該程序被修改。
發(fā)送模塊705,用于發(fā)出提示信息,以指示該程序被修改。
可選的,判斷模塊701,具體用于判斷該第一代碼塊對(duì)應(yīng)的預(yù)設(shè)變量的值是否被修改;若該預(yù)設(shè)變量的值被修改,則確定該第一代碼塊被執(zhí)行;若該預(yù)設(shè)變量的值未被修改,則確定該第一代碼塊未被執(zhí)行。
可選的,判斷模塊701,具體用于判斷當(dāng)前的狀態(tài)流程碼與預(yù)設(shè)的狀態(tài)流程碼是否一致;若該當(dāng)前的狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼一致,則確定該第一代碼塊被執(zhí)行;若該當(dāng)前的狀態(tài)流程碼與該預(yù)設(shè)的狀態(tài)流程碼不一致,則確定該第一代碼塊未被執(zhí)行。
本發(fā)明提供的程序處理裝置可執(zhí)行上述圖1至圖6中任一項(xiàng)所述的程序處理方法,其具體實(shí)現(xiàn)過程及有益效果可參見上述,在此不再贅述。
本發(fā)明還提供一種程序處理設(shè)備。圖9為本發(fā)明提供的一種程序處理設(shè)備的結(jié)構(gòu)示意圖。如圖9所述,該程序處理設(shè)備900可包括:存儲(chǔ)器901和處理器902;存儲(chǔ)器901和處理器902連接。
存儲(chǔ)器901用于存儲(chǔ)程序指令。
處理器902,用于調(diào)用存儲(chǔ)器901存儲(chǔ)的該程序指令,用以執(zhí)行上述圖1至圖6中任一項(xiàng)所述的程序處理方法。
本發(fā)明提供的程序處理設(shè)備可執(zhí)行上述圖1至圖6中任一項(xiàng)所述的程序處理方法,其具體實(shí)現(xiàn)過程及有益效果可參見上述,在此不再贅述。
最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。