欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

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

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



背景技術(shù):

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

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

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

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

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

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

現(xiàn)有的python程序保護(hù)方法存在一定兼容性問題,以及在某些特定程序下會出現(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ā)明目的,本申請?zhí)峁┝艘环N保護(hù)python程序的方法,所述方法包括:

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

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

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

非平行步驟包括:

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

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

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

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

進(jìn)一步的,所述平行步驟還包括:修改import.c中的生成pyc文件的相關(guān)內(nèi)容,使python解釋器不能生成pyc文件。python解釋器可以直接生成編譯后的pyc文件,如果將修改過操作碼的python解釋器生成的pyc文件和普通python解釋器生成的pyc文件進(jìn)行對比,容易被破解獲得修改后的操作碼對應(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:使用加密狗對新的python解釋器進(jìn)行加密。為了增加保護(hù)效果,防止他人修改,破解獲得的新的python解釋器,使用加密狗對新的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號操作碼,然后再交換90-147號操作碼。

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

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

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

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

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

附圖說明

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

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

圖2是本申請中修改import.c中定義的版本號示意圖;

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

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

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

圖6是本申請中保護(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í)施方式對本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說明的是,在相互不沖突的情況下,本申請的實(shí)施例及實(shí)施例中的特征可以相互組合。

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

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

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

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

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

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

(5)python在執(zhí)行時(shí)也許可以由程序主動地調(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解釋器。這個操作必須在完成前面5個操作之后,而且前面的5個操作可以不按特定順序執(zhí)行。

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

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

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

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

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

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

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

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

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

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
友谊县| 白河县| 泊头市| 宜川县| 咸丰县| 清徐县| 那坡县| 保德县| 承德县| 措勤县| 辽宁省| 凉城县| 铁岭市| 如皋市| 新和县| 岑巩县| 临潭县| 龙门县| 兖州市| 叙永县| 中方县| 鹿邑县| 大荔县| 奇台县| 绥棱县| 黎川县| 盐边县| 梁河县| 武平县| 厦门市| 渑池县| 定陶县| 绥江县| 龙岩市| 嘉禾县| 海城市| 浦江县| 屏边| 鄄城县| 中西区| 兴海县|