一種腳本加密方法、腳本運行方法及裝置的制造方法
【專利摘要】本發(fā)明公開了一種腳本加密方法、腳本運行方法及裝置。所述腳本加密方法包括:在原始的操作符及其函數(shù)的對應關系表中添加自定義的操作符及其對應的函數(shù);對添加后的對應關系表中的各個操作符和各個函數(shù)的對應關系進行調整,獲得操作符關系表;根據所述操作符關系表,將腳本中的源代碼編譯為基于所述操作符的字節(jié)碼。采用本發(fā)明實施例,能夠避免源代碼被反編譯,實現(xiàn)對腳本的保護。
【專利說明】
一種腳本加密方法、腳本運行方法及裝置
技術領域
[0001]本發(fā)明涉及計算機技術領域,尤其涉及一種腳本加密方法、腳本運行方法及裝置。
【背景技術】
[0002]由于腳本語言(如Python,Lua等)具有易學易用,無需編譯以及能提高開發(fā)效率等特點,得到了廣泛的采用。對于使用腳本語言開發(fā)的應用程序來說,為了保護源代碼的知識產權以及應用程序的安全性,需要對源代碼通過加密進行保護。
[0003]在現(xiàn)有技術中,腳本中源代碼保護的常用方式是將源代碼編譯為字節(jié)碼,或者進一步打包生成可執(zhí)行文件,然后再進行發(fā)布。
【發(fā)明內容】
[0004]【背景技術】中提及的源代碼的保護方式較簡單,使得源代碼很容易被有經驗的開發(fā)人員反編譯,無法達到保護源代碼的目的。
[0005]本發(fā)明實施例提出一種腳本加密方法、腳本運行方法及裝置,能夠避免源代碼被反編譯,實現(xiàn)對腳本的保護。
[0006]本發(fā)明實施例提供一種腳本加密方法,包括:
[0007]在原始的操作符及其函數(shù)的對應關系表中添加自定義的操作符及其對應的函數(shù);
[0008]對添加后的對應關系表中的各個操作符和各個函數(shù)的對應關系進行調整,獲得操作符關系表;
[0009]根據所述操作符關系表,將腳本中的源代碼編譯為基于所述操作符的字節(jié)碼。
[0010]進一步地,在所述根據所述操作符關系表,將腳本中的源代碼編譯為基于所述函數(shù)的字節(jié)碼之后,還包括:
[0011 ]在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼。
[0012]在一個優(yōu)選地實施方式中,所述在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼,具體包括:
[0013]每編譯為一段基于所述操作符的字節(jié)碼時,產生一個對應的隨機數(shù);
[0014]若檢測到所述對應的隨機數(shù)小于預設的閾值,在所述字節(jié)碼之后插入基于自定義操作符的無效字節(jié)碼。
[0015]在另一個優(yōu)選地實施方式中,所述在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼,具體包括:
[0016]對所述基于所述操作符的字節(jié)碼進行檢測;
[0017]每檢測到N段相鄰的字節(jié)碼中的操作符符合預設的合并規(guī)則時,將所述N段相鄰的字節(jié)碼合并為基于自定義操作符的合并字節(jié)碼;其中,N>1。
[0018]本發(fā)明實施例還提供一種腳本運行方法,包括:
[0019]讀取腳本中的上述基于操作符的字節(jié)碼;
[0020]根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù);
[0021]運行所述基于操作符的字節(jié)碼。
[0022]在一個優(yōu)選地實施方式中,所述根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù),具體包括:
[0023]對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼是否為預存的基于自定義操作符的無效字節(jié)碼;
[0024]若是,則跳過所述無效字節(jié)碼;
[0025]若否,則根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。
[0026]在另一個優(yōu)選地實施方式中,所述根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù),具體包括:
[0027]對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼否為預存的基于自定義操作符的合并字節(jié)碼;
[0028]若是,則根據預存的合并規(guī)則,調用所述合并字節(jié)碼中的自定義操作符所對應的函數(shù);
[0029]若否,則根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。
[0030]相應的,本發(fā)明實施例還提供一種腳本加密裝置,包括:
[0031]添加模塊,用于在原始的操作符及其函數(shù)的對應關系表中添加自定義的操作符及其對應的函數(shù);
[0032]操作符關系表獲取模塊,用于對添加后的對應關系表中的各個操作符和各個函數(shù)的對應關系進行調整,獲得操作符關系表;以及,
[0033]加密模塊,用于根據所述操作符關系表,將腳本中的源代碼編譯為基于所述操作符的字節(jié)碼。
[0034]進一步地,所述腳本加密裝置還包括:
[0035]混淆模塊,用于在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼。
[0036]在一個優(yōu)選地實施方式中,所述混淆模塊具體包括:
[0037]隨機數(shù)產生單元,用于每編譯為一段基于所述操作符的字節(jié)碼時,產生一個對應的隨機數(shù);以及,
[0038]無效字節(jié)碼插入單元,用于在檢測到所述對應的隨機數(shù)小于預設的閾值時,在所述字節(jié)碼之后插入基于自定義操作符的無效字節(jié)碼。
[0039]在另一個優(yōu)選地實施方式中,所述混淆模塊具體包括:
[0040]第二檢測單元,用于對所述基于所述操作符的字節(jié)碼進行檢測;以及,
[0041]合并單元,用于每檢測到N段相鄰的字節(jié)碼中的操作符符合預設的合并規(guī)則時,將所述N段相鄰的字節(jié)碼合并為基于自定義操作符的合并字節(jié)碼;其中,N>1。
[0042]相應的,本發(fā)明實施例還提供一種腳本運行裝置,包括:
[0043]讀取模塊,用于讀取腳本中上述基于操作符的字節(jié)碼;
[0044]操作符識別模塊,用于根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù);以及,
[0045]運行模塊,用于運行所述基于操作符的字節(jié)碼。
[0046]在一個優(yōu)選地實施方式中,所述操作符識別模塊具體包括:
[0047]無效字節(jié)碼判斷單元,用于對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼是否為預存的基于自定義操作符的無效字節(jié)碼;
[0048]跳過單元,用于在所述無效字節(jié)碼判斷單元判定為是時,跳過所述無效字節(jié)碼;以及,
[0049]第一調用單元,用于在所述無效字節(jié)碼判斷單元判定為否時,根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。
[0050]在另一個優(yōu)選地實施方式中,所述操作符識別模塊具體包括:
[0051]合并字節(jié)碼判斷單元,用于對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼否為預存的基于自定義操作符的合并字節(jié)碼;
[0052]第二調用單元,用于在所述合并字節(jié)碼判斷單元判定為是時,根據預存的合并規(guī)則,調用所述合并字節(jié)碼中的自定義操作符所對應的函數(shù);以及,
[0053]第三調用單元,用于在所述合并字節(jié)碼判斷單元判定為否時,根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。
[0054]實施本發(fā)明實施例,具有如下有益效果:
[0055]本發(fā)明實施例提供的腳本加密方法、腳本運行方法及裝置,能夠在原始的對應關系表中添加自定義的操作符及其對應的函數(shù),并打亂添加后的對應關系表中的操作符與函數(shù)的對應關系,以根據打亂后的對應關系來對源代碼進行編譯,從而避免通過原始的對應關系表對源代碼進行反編譯,實現(xiàn)對腳本的保護;在將源代碼編譯為字節(jié)碼后,在字節(jié)碼中混淆進基于自定義操作符的字節(jié)碼,進一步避免源代碼的反編譯,實現(xiàn)對腳本的進一步的保護。
【附圖說明】
[0056]圖1是本發(fā)明提供的腳本加密方法的一個實施例的流程示意圖;
[0057]圖2是本發(fā)明提供的腳本加密裝置的一個實施例的結構示意圖;
[0058]圖3是本發(fā)明提供的腳本運行方法的一個實施例的流程示意圖;
[0059]圖4是本發(fā)明提供的腳本運行裝置的一個實施例的結構示意圖。
【具體實施方式】
[0060]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0061 ]參見圖1,本發(fā)明提供的腳本加密方法的一個實施例的流程示意圖,包括:
[0062]Sll、在原始的操作符及其函數(shù)的對應關系表中添加自定義的操作符及其對應的函數(shù);
[0063]S12、對添加后的對應關系表中的各個操作符和各個函數(shù)的對應關系進行調整,獲得操作符關系表;
[0064]S13、根據所述操作符關系表,將腳本中的源代碼編譯為基于所述操作符的字節(jié)碼。
[0065]需要說明的是,現(xiàn)有的Python虛擬機可根據原始的操作符及其函數(shù)的對應關系表反編譯出腳本中的源代碼。為了避免源代碼被反編譯,在原始的對應關系表中增加若干個新的宏定義,即在原始的對應關系表中增加若干個自定義的操作符和函數(shù)。進而,將所有的函數(shù)與所有的操作符進行隨機排列,打亂對應關系表中操作符與函數(shù)的對應關系。其中,操作符即OpCode。根據打亂后的對應關系來對腳本中的源代碼進行編譯,使現(xiàn)有的Python虛擬機無法根據原始的對應關系表進行反編譯,從而實現(xiàn)對腳本的保護。
[0066]例如,在原始的對應關系表中,定義為:
[0067]#define L0AD_FAST 1#從局部堆棧中彈出首個變量
[0068]#define L0AD_C0NST 2#從常量表中讀取第一個常量I
[0069]#define C0MPARE_0P 3#比較指令
[0070]在該對應關系表中添加新的宏定義:
[0071]#define BINARY_ADD 5
[0072]打亂添加后的對應關系表中的對應關系,獲得操作符關系表,在操作符關系表中,相應的定義為:
[0073]#define L0AD_FAST 2
[0074]#define L0AD_C0NST 5
[0075]#define C0MPARE_0P I
[0076]#define BINARY_ADD 3
[0077]根據操作符關系表對表達式n>l進行編譯后,即可獲得基于操作符的字節(jié)碼:
[0078]2 0(n)#從局部堆棧中彈出首個變量
[0079]5 1(1)#從常量表中讀取第一個常量I
[0080]I 4(>)#比較指令
[0081]若現(xiàn)有的Python虛擬機根據原始的對應關系表對該字節(jié)碼進行反編譯,則將該字節(jié)碼被翻譯為:
[0082]L0AD_C0NST 0(n)#從常量表中讀取常量O
[0083]L0AD_FAST 4(>)#從局部堆棧中彈出第五個變量
[0084]可見,現(xiàn)有的Python虛擬機無法反編譯出表達式n>I,從而實現(xiàn)對腳本的保護。
[0085]進一步地,在所述根據所述操作符關系表,將腳本中的源代碼編譯為基于所述函數(shù)的字節(jié)碼之后,還包括:
[0086]在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼。
[0087]需要說明的是,在根據操作符關系表對腳本中的源代碼進行編譯時,還可在編譯后的字節(jié)碼中插入混淆用的基于自定義函數(shù)的字節(jié)碼,從而對源代碼進行進一步地保護。
[0088]在一個優(yōu)選地實施方式中,所述在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼,具體包括:
[0089]每編譯為一段基于所述操作符的字節(jié)碼時,產生一個對應的隨機數(shù);
[0090]若檢測到所述對應的隨機數(shù)小于預設的閾值,在所述字節(jié)碼之后插入基于自定義操作符的無效字節(jié)碼。
[0091 ]需要說明的是,在將源代碼編譯為字節(jié)碼時,在字節(jié)碼中隨機地插入基于自定義函數(shù)的字節(jié)碼。預先設置一個閾值,在每編譯一段字節(jié)碼時,會隨機產生一個對應的隨機數(shù),該隨機數(shù)的范圍為[O,I)。若該隨機數(shù)小于閾值,則在其對應的字節(jié)碼后面接著插入一段基于自定義操作符的無效字節(jié)碼,例如,NEW_OP_CODE args?,F(xiàn)有的Python虛擬機無法對無效字節(jié)碼進行識別,從而無法實現(xiàn)源代碼的反編譯。
[0092]在另一個優(yōu)選地實施方式中,所述在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼,具體包括:
[0093]對所述基于所述操作符的字節(jié)碼進行檢測;
[0094]每檢測到N段相鄰的字節(jié)碼中的操作符符合預設的合并規(guī)則時,將所述N段相鄰的字節(jié)碼合并為基于自定義操作符的合并字節(jié)碼;其中,N>1。
[0095]需要說明的是,在將源代碼編譯為字節(jié)碼時,對字節(jié)碼執(zhí)行合并的操作。預先定義合并規(guī)則,其形式可以為正則表達式。然后,根據正則表達式對編譯的字節(jié)碼進行文本替換,將編譯的多段字節(jié)碼合并為一段基于自定義操作符的合并字節(jié)碼。例如,合并規(guī)則定義為將字節(jié)碼2 O和3 I合并為4 O,編譯后的字節(jié)碼為:
[0096]2 0(n)
[0097]3 1(1)
[0098]I 4(>)
[0099]在對編譯后的字節(jié)碼進行檢測時,將20(n)、3 I (I)合并為4 O,使合并后的字節(jié)碼為:
[0100]4 O
[0101]I 4(>)
[0102]現(xiàn)有的Python虛擬機無法對合并字節(jié)碼進行識別,從而無法實現(xiàn)源代碼的反編譯。
[0103]本發(fā)明實施例提供的腳本加密方法,能夠在原始的對應關系表中添加自定義的操作符及其對應的函數(shù),并打亂添加后的對應關系表中的操作符與函數(shù)的對應關系,以根據打亂后的對應關系來對源代碼進行編譯,從而避免通過原始的對應關系表對源代碼進行反編譯,實現(xiàn)對腳本的保護;在將源代碼編譯為字節(jié)碼后,在字節(jié)碼中混淆進基于自定義操作符的字節(jié)碼,進一步避免源代碼的反編譯,實現(xiàn)對腳本的進一步的保護。
[0104]相應的,本發(fā)明還提供一種腳本加密裝置,能夠實現(xiàn)上述實施例中的腳本加密方法的所有流程。
[0105]參見圖2,是本發(fā)明提供的腳本加密裝置的一個實施例的結構示意圖,包括:
[0106]添加模塊21,用于在原始的操作符及其函數(shù)的對應關系表中添加自定義的操作符及其對應的函數(shù);
[0107]操作符關系表獲取模塊22,用于對添加后的對應關系表中的各個操作符和各個函數(shù)的對應關系進行調整,獲得操作符關系表;以及,
[0108]加密模塊23,用于根據所述操作符關系表,將腳本中的源代碼編譯為基于所述操作符的字節(jié)碼。
[0109]進一步地,所述腳本加密裝置還包括:
[0110]混淆模塊,用于在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼。
[0111]在一個優(yōu)選地實施方式中,所述混淆模塊具體包括:
[0112]隨機數(shù)產生單元,用于每編譯為一段基于所述操作符的字節(jié)碼時,產生一個對應的隨機數(shù);以及,
[0113]無效字節(jié)碼插入單元,用于在檢測到所述對應的隨機數(shù)小于預設的閾值時,在所述字節(jié)碼之后插入基于自定義操作符的無效字節(jié)碼。
[0114]在另一個優(yōu)選地實施方式中,所述混淆模塊具體包括:
[0115]第二檢測單元,用于對所述基于所述操作符的字節(jié)碼進行檢測;以及,
[0116]合并單元,用于每檢測到N段相鄰的字節(jié)碼中的操作符符合預設的合并規(guī)則時,將所述N段相鄰的字節(jié)碼合并為基于自定義操作符的合并字節(jié)碼;其中,N>1。
[0117]本發(fā)明實施例提供的腳本加密裝置,能夠在原始的對應關系表中添加自定義的操作符及其對應的函數(shù),并打亂添加后的對應關系表中的操作符與函數(shù)的對應關系,以根據打亂后的對應關系來對源代碼進行編譯,從而避免通過原始的對應關系表對源代碼進行反編譯,實現(xiàn)對腳本的保護;在將源代碼編譯為字節(jié)碼后,在字節(jié)碼中混淆進基于自定義操作符的字節(jié)碼,進一步避免源代碼的反編譯,實現(xiàn)對腳本的進一步的保護。
[0118]參見圖3,本發(fā)明提供的腳本運行方法的一個實施例的流程示意圖,包括:
[0119]S31、讀取腳本中的上述基于操作符的字節(jié)碼;
[0120]S32、根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù);
[0121]S33、運行所述基于操作符的字節(jié)碼。
[0122]需要說明的是,在采用上述實施例的方法對腳本中的源代碼進行編譯后,還需采用專用的虛擬機對編譯后的字節(jié)碼進行解析才能使腳本正常運行。其中,專用的虛擬機是根據腳本的加密方法修改虛擬機代碼,并對修改后的虛擬機代碼進行編譯后獲得的。在發(fā)布應用程序時,將編譯后的字節(jié)碼和專用的虛擬機打包發(fā)布,使得編譯后的字節(jié)碼通過專用的虛擬機執(zhí)行。
[0123]使用專用的虛擬機來運行時,先讀取編譯后的字節(jié)碼進行解析,根據操作符關系表解析出字節(jié)碼中的操作符所對應的函數(shù)進行調用,進而運行腳本。例如,在操作符關系表中,定義為:
[0124]#define L0AD_FAST 2
[0125]#define L0AD_C0NST 5
[0126]#define C0MPARE_0P I
[0127]#define BINARY_ADD 3
[0128]編譯后的字節(jié)碼為:
[0129]2 0(n)
[0130]5 1(1)
[0131]I 4(>)
[0132]根據操作符關系表對編譯后的字節(jié)碼進行解析,解析為:
[0133]L0AD_FAST 0(n)#從局部堆棧中彈出首個變量
[0134]L0AD_C0NST I(I)#從常量表中讀取第一個常量I
[0135]C0MPARE_0P 4(>)#比較指令
[0136]調用解析出的函數(shù)來運行腳本。
[0137]在一個優(yōu)選地實施方式中,所述根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù),具體包括:
[0138]對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼是否為預存的基于自定義操作符的無效字節(jié)碼;
[0139]若是,則跳過所述無效字節(jié)碼;
[0140]若否,則根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。
[0141]需要說明的是,在對字節(jié)碼進行解析的過程中,讀取每段字節(jié)碼,若該段字節(jié)碼為預存的基于自定義操作符的無效字節(jié)碼,例如,NEW_0P_C0DE args,則跳過這段字節(jié)碼,處理下一段字節(jié)碼。
[0142]在另一個優(yōu)選地實施方式中,所述根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù),具體包括:
[0143]對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼否為預存的基于自定義操作符的合并字節(jié)碼;
[0144]若是,則根據預存的合并規(guī)則,調用所述合并字節(jié)碼中的自定義操作符所對應的函數(shù);
[0145]若否,則根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。
[0146]需要說明的是,在對字節(jié)碼進行解析的過程中,讀取每段字節(jié)碼,若該段字節(jié)碼為基于自定義操作符的合并字節(jié)碼,則根據合并規(guī)則,調用合并字節(jié)碼所對應的函數(shù)。例如,在檢測到一段字節(jié)碼為4 O時,根據合并規(guī)則識別出4 O所對應的字節(jié)碼2 O和3 1,進而調用2 O和3 I所對應的函數(shù)。
[0147]本發(fā)明實施例提供的腳本運行方法,能夠在原始的對應關系表中添加自定義的操作符及其對應的函數(shù),并打亂添加后的對應關系表中的操作符與函數(shù)的對應關系,以根據打亂后的對應關系來對源代碼進行編譯,從而避免通過原始的對應關系表對源代碼進行反編譯,實現(xiàn)對腳本的保護;在將源代碼編譯為字節(jié)碼后,在字節(jié)碼中混淆進基于自定義操作符的字節(jié)碼,進一步避免源代碼的反編譯,實現(xiàn)對腳本的進一步的保護。
[0148]相應的,本發(fā)明還提供一種腳本運行裝置,能夠實現(xiàn)上述實施例中的腳本運行方法的所有流程。
[0149]參見圖4,是本發(fā)明提供的腳本運行裝置的一個實施例的結構示意圖,包括:
[0150]讀取模塊41,用于讀取腳本中上述基于操作符的字節(jié)碼;
[0151]操作符識別模塊42,用于根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù);以及,
[0152]運行模塊43,用于運行所述基于操作符的字節(jié)碼。
[0153]在一個優(yōu)選地實施方式中,所述操作符識別模塊具體包括:
[0154]無效字節(jié)碼判斷單元,用于對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼是否為預存的基于自定義操作符的無效字節(jié)碼;
[0155]跳過單元,用于在所述無效字節(jié)碼判斷單元判定為是時,跳過所述無效字節(jié)碼;以及,
[0156]第一調用單元,用于在所述無效字節(jié)碼判斷單元判定為否時,根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。
[0157]在另一個優(yōu)選地實施方式中,所述操作符識別模塊具體包括:
[0158]合并字節(jié)碼判斷單元,用于對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼否為預存的基于自定義操作符的合并字節(jié)碼;
[0159]第二調用單元,用于在所述合并字節(jié)碼判斷單元判定為是時,根據預存的合并規(guī)則,調用所述合并字節(jié)碼中的自定義操作符所對應的函數(shù);以及,
[0160]第三調用單元,用于在所述合并字節(jié)碼判斷單元判定為否時,根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。
[0161]本發(fā)明實施例提供的腳本運行裝置,能夠在原始的對應關系表中添加自定義的操作符及其對應的函數(shù),并打亂添加后的對應關系表中的操作符與函數(shù)的對應關系,以根據打亂后的對應關系來對源代碼進行編譯,從而避免通過原始的對應關系表對源代碼進行反編譯,實現(xiàn)對腳本的保護;在將源代碼編譯為字節(jié)碼后,在字節(jié)碼中混淆進基于自定義操作符的字節(jié)碼,進一步避免源代碼的反編譯,實現(xiàn)對腳本的進一步的保護。
[0162]以上所述是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍。
【主權項】
1.一種腳本加密方法,其特征在于,包括: 在原始的操作符及其函數(shù)的對應關系表中添加自定義的操作符及其對應的函數(shù); 對添加后的對應關系表中的各個操作符和各個函數(shù)的對應關系進行調整,獲得操作符關系表; 根據所述操作符關系表,將腳本中的源代碼編譯為基于所述操作符的字節(jié)碼。2.如權利要求1所述的腳本加密方法,其特征在于,在所述根據所述操作符關系表,將腳本中的源代碼編譯為基于所述函數(shù)的字節(jié)碼之后,還包括: 在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼。3.如權利要求2所述的腳本加密方法,其特征在于,所述在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼,具體包括: 每編譯為一段基于所述操作符的字節(jié)碼時,產生一個對應的隨機數(shù); 若檢測到所述對應的隨機數(shù)小于預設的閾值,在所述字節(jié)碼之后插入基于自定義操作符的無效字節(jié)碼。4.如權利要求2所述的腳本加密方法,其特征在于,所述在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼,具體包括: 對所述基于所述操作符的字節(jié)碼進行檢測; 每檢測到N段相鄰的字節(jié)碼中的操作符符合預設的合并規(guī)則時,將所述N段相鄰的字節(jié)碼合并為基于自定義操作符的合并字節(jié)碼;其中,N>1。5.一種腳本運行方法,其特征在于,包括: 讀取腳本中的如權利要求1至4任一項所述的基于操作符的字節(jié)碼; 根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù); 運行所述基于操作符的字節(jié)碼。6.如權利要求5所述的腳本運行方法,其特征在于,所述根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù),具體包括: 對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼是否為預存的基于自定義操作符的無效字節(jié)碼; 若是,則跳過所述無效字節(jié)碼; 若否,則根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。7.如權利要求5所述的腳本運行方法,其特征在于,所述根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù),具體包括: 對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼否為預存的基于自定義操作符的合并字節(jié)碼; 若是,則根據預存的合并規(guī)則,調用所述合并字節(jié)碼中的自定義操作符所對應的函數(shù); 若否,則根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。8.一種腳本加密裝置,其特征在于,包括: 添加模塊,用于在原始的操作符及其函數(shù)的對應關系表中添加自定義的操作符及其對應的函數(shù); 操作符關系表獲取模塊,用于對添加后的對應關系表中的各個操作符和各個函數(shù)的對應關系進行調整,獲得操作符關系表;以及, 加密模塊,用于根據所述操作符關系表,將腳本中的源代碼編譯為基于所述操作符的字節(jié)碼。9.如權利要求8所述的腳本加密裝置,其特征在于,所述腳本加密裝置還包括: 混淆模塊,用于在所述基于所述操作符的字節(jié)碼中混淆基于自定義操作符的字節(jié)碼。10.如權利要求9所述的腳本加密裝置,其特征在于,所述混淆模塊具體包括: 隨機數(shù)產生單元,用于每編譯為一段基于所述操作符的字節(jié)碼時,產生一個對應的隨機數(shù);以及, 無效字節(jié)碼插入單元,用于在檢測到所述對應的隨機數(shù)小于預設的閾值時,在所述字節(jié)碼之后插入基于自定義操作符的無效字節(jié)碼。11.如權利要求9所述的腳本加密裝置,其特征在于,所述混淆模塊具體包括: 第二檢測單元,用于對所述基于所述操作符的字節(jié)碼進行檢測;以及, 合并單元,用于每檢測到N段相鄰的字節(jié)碼中的操作符符合預設的合并規(guī)則時,將所述N段相鄰的字節(jié)碼合并為基于自定義操作符的合并字節(jié)碼;其中,N>1。12.一種腳本運行裝置,其特征在于,包括: 讀取模塊,用于讀取腳本中的如權利要求1至4任一項所述的基于操作符的字節(jié)碼; 操作符識別模塊,用于根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù);以及, 運行模塊,用于運行所述基于操作符的字節(jié)碼。13.如權利要求12所述的腳本運行裝置,其特征在于,所述操作符識別模塊具體包括: 無效字節(jié)碼判斷單元,用于對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼是否為預存的基于自定義操作符的無效字節(jié)碼; 跳過單元,用于在所述無效字節(jié)碼判斷單元判定為是時,跳過所述無效字節(jié)碼;以及,第一調用單元,用于在所述無效字節(jié)碼判斷單元判定為否時,根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。14.如權利要求12所述的腳本運行裝置,其特征在于,所述操作符識別模塊具體包括: 合并字節(jié)碼判斷單元,用于對所述基于操作符的字節(jié)碼進行檢測,判斷每段字節(jié)碼否為預存的基于自定義操作符的合并字節(jié)碼; 第二調用單元,用于在所述合并字節(jié)碼判斷單元判定為是時,根據預存的合并規(guī)則,調用所述合并字節(jié)碼中的自定義操作符所對應的函數(shù);以及, 第三調用單元,用于在所述合并字節(jié)碼判斷單元判定為否時,根據預存的操作符關系表,調用所述字節(jié)碼中的操作符所對應的函數(shù)。
【文檔編號】G06F21/12GK105868589SQ201610191585
【公開日】2016年8月17日
【申請日】2016年3月30日
【發(fā)明人】李康, 陳伊力
【申請人】網易(杭州)網絡有限公司