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

一種保護(hù)Python程序的方法與流程

文檔序號(hào):12864088閱讀:1967來源:國(guó)知局
一種保護(hù)Python程序的方法與流程

本發(fā)明涉及計(jì)算機(jī)程序領(lǐng)域,具體地,涉及一種保護(hù)python程序的方法。



背景技術(shù):

python程序是使用python腳本語言開發(fā)的應(yīng)用程序。為了保護(hù)源代碼不泄露,使用python腳本語言開發(fā)的應(yīng)用程序(app.py)一般會(huì)先通過python腳本編譯器將其編譯為具有特定結(jié)構(gòu)的二進(jìn)制字節(jié)碼文件(app.pyc),然后將字節(jié)碼文件(app.pyc)發(fā)布給客戶運(yùn)行。

使用python腳本語言開發(fā)的應(yīng)用編譯生成的字節(jié)碼(.pyc)文件,不是針對(duì)特定處理器和系統(tǒng)的二進(jìn)制文件,而是針對(duì)python虛擬機(jī)(pythonvirtualmachine)的具有特定的結(jié)構(gòu)和特征的二進(jìn)制文件,其保留了python源碼文件中除注釋外的全部信息。

因?yàn)樽止?jié)碼文件具有特定的格式,所以使用python腳本語言開發(fā)的應(yīng)用程序容易被攻擊者反編譯為源碼文件,對(duì)開發(fā)者和公司造成損失。字節(jié)碼文件中最重要的一個(gè)屬性域就是操作碼序列,其中包含了對(duì)程序執(zhí)行邏輯的控制,和對(duì)程序中各個(gè)參數(shù)的執(zhí)行的操作等信息,因此對(duì)操作碼序列和字節(jié)碼文件格式的保護(hù)顯得尤為重要。

由于使用python腳本語言開發(fā)的應(yīng)用程序一般會(huì)使用大量的第三方庫,尤其是部署在linux環(huán)境上的應(yīng)用程序(linux系統(tǒng)也會(huì)使用python的一些庫),所以需要保證python程序和第三方庫的兼容性。

現(xiàn)有的python程序保護(hù)方法主要是修改操作碼,而單純的修改操作碼會(huì)導(dǎo)致運(yùn)行特定的代碼時(shí)程序崩潰。由于pyc文件僅針對(duì)python虛擬機(jī),所以當(dāng)pyc程序被轉(zhuǎn)移到其他環(huán)境依舊可以被正常運(yùn)行。

綜上所述,本申請(qǐng)發(fā)明人在實(shí)現(xiàn)本申請(qǐng)發(fā)明技術(shù)方案的過程中,發(fā)現(xiàn)上述技術(shù)至少存在如下技術(shù)問題:

現(xiàn)有的python程序保護(hù)方法存在一定兼容性問題,以及在某些特定程序下會(huì)出現(xiàn)崩潰,以及現(xiàn)有保護(hù)方法不能保護(hù)pyc程序被盜用。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明提供了一種保護(hù)python程序的方法,解決了現(xiàn)有的python程序保護(hù)方法中存在的兼容性問題以及在運(yùn)行特定代碼時(shí)出現(xiàn)程序崩潰的問題,實(shí)現(xiàn)了在防止反編譯的基礎(chǔ)上提高了兼容性,防止程序出現(xiàn)崩潰的技術(shù)效果。

為實(shí)現(xiàn)上述發(fā)明目的,本申請(qǐng)?zhí)峁┝艘环N保護(hù)python程序的方法,所述方法包括:

平行步驟和位于平行步驟之后的非平行步驟,其中,平行步驟包括:

平行子步驟a:基于任意預(yù)設(shè)的操作碼對(duì)應(yīng)關(guān)系,在opcode.h中交換第一預(yù)設(shè)號(hào)操作碼,然后再交換第二預(yù)設(shè)號(hào)操作碼;

平行子步驟b:修改opcode.py中的操作碼,保持與預(yù)設(shè)的操作碼對(duì)應(yīng)關(guān)系一致;

非平行步驟包括:

步驟1:重新編譯源碼,獲得新的python解釋器。

其中,平行步驟中的子步驟之間沒有先后順序,在平行步驟完成后進(jìn)行非平行步驟,本發(fā)明主要解決了python程序容易被反編譯獲得源碼,并且克服現(xiàn)有保護(hù)程序存在的不足之處。本發(fā)明基于修改python源碼和電子狗加密來達(dá)到上述目的。python解釋器使用4字節(jié)的整形數(shù)字來表示版本編號(hào),python解釋器只會(huì)執(zhí)行具有相同版本號(hào)的編譯后的pyc程序。版本號(hào)在解釋器的import.c中定義。python解釋器在執(zhí)行過程中,對(duì)于被引用(既import)的模塊,會(huì)自動(dòng)為其生成pyc文件,當(dāng)再次加載該模塊的時(shí)候,就直接執(zhí)行該pyc文件,而不會(huì)再次進(jìn)行編譯操作。python解釋器使用1字節(jié)容量來儲(chǔ)存操作碼,理論上可以有256個(gè)操作碼,現(xiàn)在使用了0-147號(hào)操作碼,其中0-89號(hào)操作碼為不需要參數(shù)的操作碼,90-147號(hào)操作碼為需要參數(shù)的操作碼。操作碼在opcode.h文件中定義,如圖1所示。

python解釋器的操作碼在opcode.h中被定義,首先在opcode.h中任意交換0-89號(hào)操作碼,然后再任意交換90-147號(hào)操作碼。這樣修改過操作碼的python解釋器,就具有了自己獨(dú)有的一套操作碼,在不知道我們的操作碼的對(duì)應(yīng)關(guān)系的情況下,別人也就沒辦法對(duì)我們的pyc程序進(jìn)行反編譯,由此我們便達(dá)到了防止程序被反編譯,保護(hù)源代碼的目的。修改opcode.py中的操作碼,保持和步驟a交換后的操作碼一致。如果不修改這個(gè)文件中的操作碼,導(dǎo)致python解釋器在執(zhí)行步驟1操作的時(shí)候出現(xiàn)錯(cuò)誤,無法獲得新的python解釋器。

進(jìn)一步的,所述平行步驟還包括:修改import.c中定義的版本號(hào)為一個(gè)沒有被使用的值。為了保證我們修改后的python解釋器,在執(zhí)行這些已經(jīng)存在pyc文件的模塊時(shí)不出現(xiàn)兼容性問題,需要修改import.c中定義的版本號(hào)為一個(gè)沒有被使用的值。

進(jìn)一步的,所述平行步驟還包括:修改import.c中的生成pyc文件的相關(guān)內(nèi)容,使python解釋器不能生成pyc文件。python解釋器可以直接生成編譯后的pyc文件,如果將修改過操作碼的python解釋器生成的pyc文件和普通python解釋器生成的pyc文件進(jìn)行對(duì)比,容易被破解獲得修改后的操作碼對(duì)應(yīng)關(guān)系,進(jìn)而導(dǎo)致程序被反編譯獲得源代碼,失去了保護(hù)的意義。

進(jìn)一步的,所述平行步驟還包括:修改marshal.c中有關(guān)顯示編譯后pyc文件內(nèi)容的接口,使其他程序不能調(diào)用這些接口獲得編譯之后的pyc文件內(nèi)容。

進(jìn)一步的,所述非平行步驟還包括:步驟2:使用加密狗對(duì)新的python解釋器進(jìn)行加密。為了增加保護(hù)效果,防止他人修改,破解獲得的新的python解釋器,使用加密狗對(duì)新的python解釋器進(jìn)行加密。

進(jìn)一步的,所述非平行步驟還包括:步驟3:刪除opcode.py和opcode.h。防止通過opcode.py或者opcode.h獲得交換后的操作碼。

進(jìn)一步的,所述步驟1具體為:使用gcc或者vs重新編譯源碼,獲得新的python解釋器。

進(jìn)一步的,在opcode.h中交換0-89號(hào)操作碼,然后再交換90-147號(hào)操作碼。

本申請(qǐng)?zhí)峁┑囊粋€(gè)或多個(gè)技術(shù)方案,至少具有如下技術(shù)效果或優(yōu)點(diǎn):

本申請(qǐng)中的方法修改了magic_number和操作碼,使得現(xiàn)有的反編譯工具無法反編譯得到源碼。

進(jìn)一步的,本申請(qǐng)中的方法對(duì)修改后的python執(zhí)行環(huán)境進(jìn)行了加密狗加密,可以保護(hù)其只能在受保護(hù)的環(huán)境下運(yùn)行,防止他人直接盜用。

進(jìn)一步的,本申請(qǐng)中的方法同時(shí)修改了opcode.py中定義的操作碼,可以防止一些引用了這個(gè)文件的程序出現(xiàn)崩潰。

進(jìn)一步的,本申請(qǐng)中的方法因?yàn)槭褂玫氖菦]被使用的magic_number,所以不會(huì)對(duì)其它python執(zhí)行環(huán)境造成影響,提高了兼容性。

附圖說明

此處所說明的附圖用來提供對(duì)本發(fā)明實(shí)施例的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,并不構(gòu)成對(duì)本發(fā)明實(shí)施例的限定;

圖1是操作碼在opcode.h文件中定義示意圖;

圖2是本申請(qǐng)中修改import.c中定義的版本號(hào)示意圖;

圖3是本申請(qǐng)中修改import.c中的生成pyc文件的相關(guān)內(nèi)容示意圖;

圖4是本申請(qǐng)中修改marshal.c中有關(guān)顯示編譯后pyc文件內(nèi)容的接口示意圖;

圖5是本申請(qǐng)中在opcode.h中任意交換操作碼示意圖;

圖6是本申請(qǐng)中保護(hù)python程序的方法的流程示意圖。

具體實(shí)施方式

本發(fā)明提供了一種保護(hù)python程序的方法,解決了現(xiàn)有的python程序保護(hù)方法中存在的兼容性問題以及在運(yùn)行特定代碼時(shí)出現(xiàn)程序崩潰的問題,實(shí)現(xiàn)了在防止反編譯的基礎(chǔ)上提高了兼容性,防止程序出現(xiàn)崩潰的技術(shù)效果。

為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說明的是,在相互不沖突的情況下,本申請(qǐng)的實(shí)施例及實(shí)施例中的特征可以相互組合。

在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述范圍內(nèi)的其他方式來實(shí)施,因此,本發(fā)明的保護(hù)范圍并不受下面公開的具體實(shí)施例的限制。

實(shí)施例一,請(qǐng)參考圖2-圖6:

(1)因?yàn)閜ython解釋器只會(huì)執(zhí)行具有相同版本號(hào)的pyc程序,且如果存在pyc文件,python解釋器會(huì)優(yōu)先執(zhí)行pyc程序,而不會(huì)再去編譯執(zhí)行源代碼文件,為了保證我們修改后的python解釋器,在執(zhí)行這些已經(jīng)存在pyc文件的模塊時(shí)不出現(xiàn)兼容性問題,我們需要修改import.c中定義的版本號(hào)為一個(gè)沒有被使用的值(如圖2所示)。如果不修改,雖然不會(huì)影響保護(hù)效果,但是python解釋器在執(zhí)行這些已經(jīng)有pyc文件的模塊時(shí),便會(huì)發(fā)生錯(cuò)誤,程序無法正確運(yùn)行,因此需要先修改版本號(hào)為一個(gè)未被使用過的值。

(2)python解釋器的操作碼在opcode.h中被定義,首先在opcode.h中任意交換0-89號(hào)操作碼,然后再任意交換90-147號(hào)操作碼,如圖5所示。這樣修改過操作碼的python解釋器,就具有了自己獨(dú)有的一套操作碼,在不知道我們的操作碼的對(duì)應(yīng)關(guān)系的情況下,別人也就沒辦法對(duì)我們的pyc程序進(jìn)行反編譯,由此我們便達(dá)到了防止程序被反編譯,保護(hù)源代碼的目的

(3)修改opcode.py中的操作碼,保持和(2)交換后的操作碼一致。如果不修改這個(gè)文件中的操作碼,導(dǎo)致python解釋器在執(zhí)行第(6)步操作的時(shí)候出現(xiàn)錯(cuò)誤,無法獲得新的python解釋器。

(4)python解釋器可以直接生成編譯后的pyc文件,如果將修改過操作碼的python解釋器生成的pyc文件和普通python解釋器生成的pyc文件進(jìn)行對(duì)比,容易被破解獲得修改后的操作碼對(duì)應(yīng)關(guān)系,進(jìn)而導(dǎo)致程序被反編譯獲得源代碼,失去了保護(hù)的意義,因此還需要修改import.c中的生成pyc文件的相關(guān)內(nèi)容,使python解釋器不能生成pyc文件(如圖3所示),增大他人破解的難度。

(5)python在執(zhí)行時(shí)也許可以由程序主動(dòng)地調(diào)用相關(guān)接口,來顯示編譯后pyc文件的內(nèi)容,與(4)同理,為了增強(qiáng)保護(hù)效果,還需要修改marshal.c中有關(guān)顯示編譯后pyc文件的內(nèi)容的接口,使其他程序不能調(diào)用這些接口獲得編譯之后的pyc文件內(nèi)容,如圖4所示。

(6)使用gcc或者vs重新編譯源碼,獲得新的python解釋器。這個(gè)操作必須在完成前面5個(gè)操作之后,而且前面的5個(gè)操作可以不按特定順序執(zhí)行。

(7)為了增加保護(hù)效果,防止他人修改,破解(6)中獲得的新的python解釋器,我們使用加密狗對(duì)新的python解釋器進(jìn)行加密。使新的python解釋器只能在有加密狗的環(huán)境下才能運(yùn)行,且不能被調(diào)試破解。該操作需要完成第(6)步操作后再進(jìn)行

(8)最后并刪除opcode.py和opcode.h,防止通過opcode.py或者opcode.h獲得交換后的操作碼。

上述本申請(qǐng)實(shí)施例中的技術(shù)方案,至少具有如下的技術(shù)效果或優(yōu)點(diǎn):

本申請(qǐng)中的方法修改了magic_number和操作碼,使得現(xiàn)有的反編譯工具無法反編譯得到源碼。

進(jìn)一步的,本申請(qǐng)中的方法對(duì)修改后的python執(zhí)行環(huán)境進(jìn)行了加密狗加密,可以保護(hù)其只能在受保護(hù)的環(huán)境下運(yùn)行,防止他人直接盜用。

進(jìn)一步的,本申請(qǐng)中的方法同時(shí)修改了opcode.py中定義的操作碼,可以防止一些引用了這個(gè)文件的程序出現(xiàn)崩潰。

進(jìn)一步的,本申請(qǐng)中的方法因?yàn)槭褂玫氖菦]被使用的magic_number,所以不會(huì)對(duì)其它python執(zhí)行環(huán)境造成影響,提高了兼容性。

盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。

顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1