CN110489942A - 一种WebAssembly文件的处理方法及系统 - Google Patents
一种WebAssembly文件的处理方法及系统 Download PDFInfo
- Publication number
- CN110489942A CN110489942A CN201910721413.1A CN201910721413A CN110489942A CN 110489942 A CN110489942 A CN 110489942A CN 201910721413 A CN201910721413 A CN 201910721413A CN 110489942 A CN110489942 A CN 110489942A
- Authority
- CN
- China
- Prior art keywords
- file
- webassembly
- value
- webassembly file
- key
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 14
- 230000007246 mechanism Effects 0.000 claims abstract description 32
- 238000005314 correlation function Methods 0.000 claims description 7
- 238000000034 method Methods 0.000 abstract description 23
- 238000004458 analytical method Methods 0.000 abstract description 5
- 230000001681 protective effect Effects 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 23
- 230000008569 process Effects 0.000 description 8
- 239000000047 product Substances 0.000 description 5
- PCTMTFRHKVHKIS-BMFZQQSSSA-N (1s,3r,4e,6e,8e,10e,12e,14e,16e,18s,19r,20r,21s,25r,27r,30r,31r,33s,35r,37s,38r)-3-[(2r,3s,4s,5s,6r)-4-amino-3,5-dihydroxy-6-methyloxan-2-yl]oxy-19,25,27,30,31,33,35,37-octahydroxy-18,20,21-trimethyl-23-oxo-22,39-dioxabicyclo[33.3.1]nonatriaconta-4,6,8,10 Chemical compound C1C=C2C[C@@H](OS(O)(=O)=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H]([C@H](C)CCCC(C)C)[C@@]1(C)CC2.O[C@H]1[C@@H](N)[C@H](O)[C@@H](C)O[C@H]1O[C@H]1/C=C/C=C/C=C/C=C/C=C/C=C/C=C/[C@H](C)[C@@H](O)[C@@H](C)[C@H](C)OC(=O)C[C@H](O)C[C@H](O)CC[C@@H](O)[C@H](O)C[C@H](O)C[C@](O)(C[C@H](O)[C@H]2C(O)=O)O[C@H]2C1 PCTMTFRHKVHKIS-BMFZQQSSSA-N 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000005538 encapsulation Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000009194 climbing Effects 0.000 description 2
- VYZAMTAEIAYCRO-UHFFFAOYSA-N Chromium Chemical compound [Cr] VYZAMTAEIAYCRO-UHFFFAOYSA-N 0.000 description 1
- PEDCQBHIVMGVHV-UHFFFAOYSA-N Glycerine Chemical compound OCC(O)CO PEDCQBHIVMGVHV-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种WebAssembly文件的处理方法及系统,该方法通过对WebAssembly文件增加域名验证、秘钥验证及加壳处理机制,使得该文件在运行时自动检验当前环境是否为可靠,只有通过验证,该文件中所封装的功能才能在被调用后正常的执行。通过这样的验证机制,扒窃者即使得到了原文件和调用接口,由于运行环境的不同,无法通过验证,也就无法使用其功能,这样便能有效阻止机密算法被泄露和被扒窃使用;另外通过加壳处理后的WebAssembly文件,也能阻止外部程序对其进行反汇编分析或者动态分析,以达到保护壳内WebAssembly文件不被外部程序破坏,保证正常运行;提高了安全性。
Description
技术领域
本发明涉及互联网技术领域,特别涉及一种WebAssembly文件的处理方法及系统。
背景技术
WebAssembly是一种能够将其他编程语言编译为浏览器可执行的二进制文件的技术。相比于传统的JavaScript,WebAssembly通过降低浏览器解释和编译代码时的算力消耗以及支持SIMD等方法,极大的提高了运算性能。所以,WebAssembly特适合那些需要非常高性能的Web产品。
随着网民的数量以及网络服务的复杂程度不断增加,传统BS模型中将所有运算任务放在服务端的策略使得服务器的负载与日俱增。为了降低服务器的负载,开发者可以将一些计算型的任务放在浏览器端实现,而拥有更高性能的WebAssembly技术将会是个更好的选择。值得注意的是,一些计算任务的实现细节是具有保密性的,而浏览器端会暴露前端页面所引用的所有资源(JavaScript代码,CSS代码,图片,音频,视频等),由于JavaScript是脚本语言,趴站者很容易爬取和参考JavaScript代码,这样一来,如果在JavaScript中实现了具有保密性的任务,那么该实现始终处于被暴露的状态,产品所属公司及开发者的知识产权也就无法得到保障。
而WebAssembly是二进制文件,其内容很难被分析解读,如果在WebAssembly文件中实现任务,则避免了实现过程被暴露的可能,但是由于WebAssembly的封装的功能需要由JavaScript调用,爬站者通过分析JavaScript代码也可得到WebAssembly的调用接口,通过仿写对WebAssembly的调用,爬站者便可以使用WebAssembly中被封装的功能,产品所属公司及开发者的知识产权依然无法得到保障。
因此,如何对WebAssembly文件进行处理,提高其安全性,是从业人员亟待解决的问题。
发明内容
本发明的目的在于提供一种WebAssembly文件的处理方法,可解决目前安全性差,容易被非目标网站使用和扒窃的技术问题。
本发明实施例提供一种WebAssembly文件的处理方法,包括:
S1、在编译WebAssembly文件前,增加域名验证的机制;
S2、在编译WebAssembly文件前,增加客户端与服务器端之间的秘钥验证机制;
S3、通过预设工具包,对编译后的WebAssembly文件进行加壳处理。
在一个实施例中,所述步骤S1,包括:
S11、获取使用WebAssembly文件的目标网站域名;
S12、判断所述目标网站域名是否属于预设白名单列表中的域名;
S13、当所述目标网站域名在所述预设白名单列表中,则允许使用WebAssembly文件。
在一个实施例中,所述步骤S2,包括:
S21、在编码阶段,确定一个秘钥key;所述key为数字、字符串或数字与字符串的组合;
S22、当WebAssembly文件加载完成后,获取客户端当前时间Time,浏览器信息BrowserData和/或长度为8的随机字符串RandomString;所述当前时间Time精确到时间戳的百分位;
S23、将所述Time,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第一md5值;
S24、WebAssembly文件向服务器端发送验证请求,并发送BrowserData和/或RandomString,服务器端获取请求后获取当前时间Stime;所述当前时间Stime精确到时间戳的百分位;
S25、服务器端将所述Stime,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第二md5值,并将第二md5值作为验证请求的返回数据;
S26、WebAssembly文件获取到验证请求的返回数据第二md5值后,与验证请求发送前生成的第一md5值比对;
S27、当一致时验证成功,允许使用WebAssembly文件。
在一个实施例中,所述步骤S2还包括:
S28、当验证不一致时,重复执行步骤S21~S27,当第二次验证成功,则允许使用WebAssembly文件。
在一个实施例中,所述步骤S3,包括:
S31、通过预设加密算法,将WebAssembly文件数据和使用者提供的一个加密秘钥进行加密;
S32、将加密后的二进制码封装进另一个WebAssembly文件中,称为xwasm文件;
S33、构建js文件,引用xwasm文件;所述js文件重写了WebAssembly编译和实例化相关的函数,所述相关函数包括一个解密秘钥的参数。
第二方面,本发明实施例还提供一种WebAssembly文件的处理系统,包括:
域名验证模块,用于在编译WebAssembly文件前,增加域名验证的机制;
秘钥验证模块,用于在编译WebAssembly文件前,增加客户端与服务器端之间的秘钥验证机制;
加壳处理模块,用于通过预设工具包,对编译后的WebAssembly文件进行加壳处理。
在一个实施例中,所述域名验证模块,包括:
第一获取子模块,用于获取使用WebAssembly文件的目标网站域名;
判断子模块,用于判断所述目标网站域名是否属于预设白名单列表中的域名;
第一使用子模块,用于当所述目标网站域名在所述预设白名单列表中,则允许使用WebAssembly文件。
在一个实施例中,所述秘钥验证模块,包括:
确定子模块,用于在编码阶段,确定一个秘钥key;所述key为数字、字符串或数字与字符串的组合;
第二获取子模块,用于当WebAssembly文件加载完成后,获取客户端当前时间Time,浏览器信息BrowserData和/或长度为8的随机字符串RandomString;所述当前时间Time精确到时间戳的百分位;
第一生成子模块,用于将所述Time,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第一md5值;
验证子模块,用于WebAssembly文件向服务器端发送验证请求,并发送BrowserData和/或RandomString,服务器端获取请求后获取当前时间Stime;所述当前时间Stime精确到时间戳的百分位;
第二生成子模块,用于服务器端将所述Stime,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第二md5值,并将第二md5值作为验证请求的返回数据;
对比子模块,用于WebAssembly文件获取到验证请求的返回数据第二md5值后,与验证请求发送前生成的第一md5值比对;
第二使用子模块,用于当一致时验证成功,允许使用WebAssembly文件。
在一个实施例中,所述加壳处理模块,包括:
加密子模块,用于通过预设加密算法,将WebAssembly文件数据和使用者提供的一个加密秘钥进行加密;
封装子模块,用于将加密后的二进制码封装进另一个WebAssembly文件中,称为xwasm文件;
构建子模块,用于构建js文件,引用xwasm文件;所述js文件重写了WebAssembly编译和实例化相关的函数,所述相关函数包括一个解密秘钥的参数。
本发明实施例提供的一种WebAssembly文件的处理方法,通过对WebAssembly文件增加域名验证、秘钥验证及加壳处理机制,使得WebAssembly在运行时自动检验当前环境是否为可靠的执行环境,只有通过验证,WebAssembly文件中所封装的功能才能在被调用后正常的执行。通过这样的验证机制,扒窃者即使得到了WebAssembly文件和调用接口,由于运行环境的不同,无法通过验证,也就无法使用其功能,这样便能有效阻止机密算法被泄露和被扒窃使用;另外通过加壳处理后的WebAssembly文件,也能最大限度的阻止外部程序或软件对WebAssembly文件的反汇编分析或者动态分析,以达到保护壳内WebAssembly文件不被外部程序破坏,保证正常运行。进而提高WebAssembly文件的安全性,从而保护了产品所属公司及开发者的知识产权。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例提供的WebAssembly文件的处理方法的流程图。
图2为本发明实施例提供的S1步骤的流程图。
图3为本发明实施例提供的S2步骤的流程图。
图4为本发明实施例提供的S3步骤的流程图。
图5为本发明实施例提供的WebAssembly文件加载和调用的时序图。
图6为本发明实施例提供的WebAssembly文件的处理系统的框图。
图7为本发明实施例提供的秘钥验证模块62的框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1所示,为本发明实施例提供的WebAssembly文件的处理方法,包括:
S1、在编译WebAssembly文件前,增加域名验证的机制;
S2、在编译WebAssembly文件前,增加客户端与服务器端之间的秘钥验证机制;
S3、通过预设工具包,对编译后的WebAssembly文件进行加壳处理。
其中,步骤S1中,在编译为WebAssembly前,先向源码增加域名验证的机制,该机制使得WebAssembly在执行过程中不断地检测浏览器标签页的域名是否为可信赖的域名,若不是,则由此判断该环境为错误的环境,并使得WebAssembly中被封装的功能不再正常执行。
比如:判断使用地址,就是判断浏览器请求时HTTP头的Referer字段的值,以IIS服务器来说,这个值在asp.net里面可以用Request.UrlReferrer属性取得。几个例子来说,在正常情况下当用户在浏览http://localhost/abc.html时点击一个链接去到http://localhost/def.html时,需要调用WebAssembly文件(比如def.wasm文件)时,浏览器在发出请求def.wasm资源时还会附带当刻浏览器所处的页面地址(即http://localhost/abc.html)。所以用户网站程序接收到下载def.wasm资源请求的时候,先判断http的referer字段的值,如果是从自己的域名(http://localhost/abc.html)过来的,则可以认为是合法的连接请求,否则就返回一个错误的提示信息。即:验证不通过,不允许调用。
步骤S2中,在上述步骤S1的技术上进一步提供一个秘钥验证机制作为补充。在编译为WebAssembly前,先向源码增加秘钥验证机制,该机制根据以当前运行环境的信息(如时间,url,浏览器信息等数据)生成一个密码锁,WebAssembly文件在加载后会不定时地向服务端发送秘钥验证请求,并用得到的秘钥做验证,只有通过秘钥验证,WebAssembly文件中封装的功能才可以正常执行。在具体实施时,比如可以提供一个用来生成秘钥的库文件,服务端将库文件引入,即可生成秘钥。
前述两个步骤为WebAssembly文件增加了环境验证的机制,当WebAssembly文件根据前两点验证机制推断当前的运行环境已经不再安全(即,可能已经被盗取),WebAssembly文件中被封装的功能将不能执行。
但是,爬站者依然可以通过反编译WebAssembly以破解验证机制。为了防止WebAssembly文件被反编译,步骤3中为编译好的WebAssembly文件加壳,即将原始的WebAssembly文件压缩加密后与壳程序代码结合生成加壳后的WebAssembly文件,该文件在加载后会将原始WebAssembly文件还原,并将调用接口重定向至还原的WebAssembly文件。
比如,在具体实施时,可设计一套自动化添加验证和加壳的工具包,通过简单设置即可根据开发者的代码生成具有验证功能的代码以及加壳后的WebAssembly文件。
本实施例中,通过对WebAssembly文件增加域名验证、秘钥验证及加壳处理机制,使得WebAssembly在运行时自动检验当前环境是否为可靠的执行环境,只有通过验证,WebAssembly文件中所封装的功能才能在被调用后正常的执行。通过这样的验证机制,扒窃者即使得到了WebAssembly文件和调用接口,由于运行环境的不同,无法通过验证,也就无法使用其功能,这样便能有效阻止机密算法被泄露和被扒窃使用;另外通过加壳处理后的WebAssembly文件,也能最大限度的阻止外部程序或软件对WebAssembly文件的反汇编分析或者动态分析,以达到保护壳内WebAssembly文件不被外部程序破坏,保证正常运行。进而提高WebAssembly文件的安全性,从而保护了产品所属公司及开发者的知识产权。
下面分别对上述步骤进行详细说明。
在一个实施例中,参照图2所示,步骤S1包括:
S11、获取使用WebAssembly文件的目标网站域名;
S12、判断所述目标网站域名是否属于预设白名单列表中的域名;
S13、当所述目标网站域名在所述预设白名单列表中,则允许使用WebAssembly文件。
比如,可在WebAssembly文件的源码中,写有判断引用地址的函数,就是判断浏览器请求时HTTP头的Referer字段的值,当获取的Referer字段与WebAssembly文件的源码中配置的域名不一致时,则拒绝其使用。
该域名验证机制是在WebAssembly文件中实现,所以除非WebAssembly文件被反编译后破解,否则域名验证机制不可被移除。
在具体实施时,还可采取其他方式,比如:可根据服务器端的运行环境选择不同的域名验证机制,当服务器端用的是APACHE的话,那么使用APACHE自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理是检查REFER,如果REFER的信息来自其他网站则禁止访问所需要的资源。
比如服务器端为IIS时,可采用ISAPI_Rewrite利用正则表达式进行替换规则的表示,来实现上述Url Rewrite的功能。
在一个实施例中,参照图3所示,步骤S2包括:
S21、在编码阶段,确定一个秘钥key;所述key为数字、字符串或数字与字符串的组合;
S22、当WebAssembly文件加载完成后,获取客户端当前时间Time,浏览器信息BrowserData和/或长度为8的随机字符串RandomString;所述当前时间Time精确到时间戳的百分位;
S23、将所述Time,BrowserData和/或RandomString组合成字符串,字字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第一md5值;
S24、WebAssembly文件向服务器端发送验证请求,并发送BrowserData和/或RandomString,服务器端获取请求后获取当前时间Stime;所述当前时间Stime精确到时间戳的百分位;
S25、服务器端将所述Stime,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第二md5值,并将第二md5值作为验证请求的返回数据;
S26、WebAssembly文件获取到验证请求的返回数据第二md5值后,与验证请求发送前生成的第一md5值比对;
S27、当一致时验证成功,允许使用WebAssembly文件;
S28、当验证不一致时,重复执行步骤S21~S27,当第二次验证成功,则允许使用WebAssembly文件。
其中,上述步骤23和步骤25中的生成md5值的过程,说明如下:
注:
*abs(x):为取x的绝对值;
*x%y:为x对y取余;
*当key为数字与字符串的组合时,本质上是一个字符串,按key为字符串的方式计算第一MD5值;
xstr为待生成md5值的序列;
第一种:若key是数字,假设
key=1000
组合字符串str=”ABCD“
则xstr的ASCII值序列的计算过程为:
xstr[0]=abs(str[0]-(key%256))=abs(65-1000%256)=abs(-167)=167
xstr[1]=abs(str[1]-(key%256))=abs(66-1000%256)=abs(-166)=166
xstr[2]=abs(str[2]-(key%256))=abs(67-1000%256)=abs(-165)=165
xstr[3]=abs(str[3]-(key%256))=abs(68-1000%256)=abs(-164)=164所以xstr的ASCII值序列为[167,166,165,164]
最后计算第一MD5值=MD5(xstr)。
第二种:若key是字符串,假设
key=”edcba"
组合字符串str=”ABCD“
则xstr的ASCII值序列的计算过程为:
xstr[0]=abs(str[0]-key[0])=abs(65-100)=abs(-35)=35
xstr[1]=abs(str[1]-key[1])=abs(66-99)=abs(-33)=33
xstr[2]=abs(str[2]-key[2])=abs(67-98)=abs(-31)=31
xstr[3]=abs(str[3]-key[3])=abs(68-97)=abs(-29)=29
所以xstr的ASCII值序列为[35,33,31,29]
最后计算第一MD5值=MD5(xstr)。
第三种:若key是字符串,假设
key=”cba"
组合字符串str=”ABCD“
则xstr的ASCII值序列的计算过程为:
xstr[0]=abs(str[0]-key[0])=abs(65-98)=abs(-33)=33
xstr[1]=abs(str[1]-key[1])=abs(66-97)=abs(-31)=31
xstr[2]=abs(str[2]-key[2])=abs(67-96)=abs(-29)=29
xstr[3]=abs(str[3]-key[0])=abs(68-98)=abs(-30)=30
所以xstr的ASCII值序列为[33,31,29,30]
最后计算第一MD5值=MD5(xstr)。
第四种:若key是数字加字符串,假设
key=”10a"
组合字符串str=”ABCD“
则xstr的ASCII值序列的计算过程为:
xstr[0]=abs(str[0]-key[0])=abs(65-49)=abs(16)=16
xstr[1]=abs(str[1]-key[1])=abs(66-48)=abs(18)=18
xstr[2]=abs(str[2]-key[2])=abs(67-96)=abs(-29)=29
xstr[3]=abs(str[3]-key[0])=abs(68-49)=abs(19)=19
所以xstr的ASCII值序列为[16,18,29,19]
最后计算第一MD5值=MD5(xstr)。
具体地,可参照如下步骤0~5步秘钥验证机制如下:
0.在编码阶段,确定一个秘钥数字key.
1.WebAssembly文件在加载完成后,获取当前时间Time(精确到时间戳的百分位),浏览器信息BrowserData和长度为8的随机字符串RandomString,以及一个由编码时确定的秘钥数字key。时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。浏览器信息BrowserData,比如是指浏览器的类型:Internet Explorer、Netscape、Mozilla、Firefox、Chrome等等。
2.以Time,BrowserData,RandomString组合成字符串,字符串中每一个字符的ASCII值减去key的ASCII值,然后取正值,该正值对应的新字符串,生成md5值.
3.随后WebAssembly文件向服务器端发送验证请求,同时发送BrowserData和RandomString,服务器端获取请求后获取当前时间STime(精确到时间戳的百分位),然后以与步骤2相同的方式得到md5值,并将该值作为验证请求的返回数据。
4.WebAssembly获取到验证请求的返回数据后,与本地生产的md5值对比,验证是否相同,相同及意味着验证成功。
5.若验证成功,则允许WebAssembly文件中所有方法可被正常调用;若不成功,则重复步骤1-4;若两次验证都失败,则使WebAssembly文件中所有方法失效。
本实施例中,秘钥验证机制中,密码锁由WebAssembly文件在加载后,根据当前运行环境的信息(如时间,url,浏览器信息等)生成一个密码锁,该密码锁是在用户的浏览器端实现。WebAssembly在运行过程中会不定时地向网站的运营服务器发送秘钥验证请求,根据服务器传回的秘钥检测是否可以开启密码锁。如果使用秘钥验证机制,网站的服务端需要相应增加验证秘钥的接口。
在一个实施例中,上述步骤S3,参照图4所示,包括:
S31、通过预设加密算法,将WebAssembly文件数据和使用者提供的一个加密秘钥进行加密;
S32、将加密后的二进制码封装进另一个WebAssembly文件中,称为xwasm文件;
S33、构建js文件,引用xwasm文件;所述js文件重写了WebAssembly编译和实例化相关的函数,所述相关函数包括一个解密秘钥的参数。
本实施例中,尽管WebAssembly文件已经是二进制文件,但为了保证跨平台的兼容性,其二进制数据仅指代了实现功能的虚拟指令,在其被浏览器加载的过程中,首先要经过第二次编译(第一次编译是由其他语言编译为WebAssembly文件),得到WebAssembly.Module对象,然后再将Module对象实例化,之后才能执行被WebAssembly文件封装的方法。
可执行文件的二进制数据中,大部分是可直接被CPU执行的机器码,对可执行文件的加壳一般实现原理为将机器码加密并劫持其入口函数,当文件被执行后,首先执行被劫持后的入口函数,先将加密的机器码解密还原,再将执行权限交还给原入口函数。但对于还需二次编译才可执行的WebAssembly文件来说,这种做法是不行的。所以本发明实施例提出了不同的加壳方式,以适应在WebAssembly文件的情况下加壳:
具体方法为,先将原WebAssembly文件数据通过预设加密算法(比如AES、DES加密等)和使用者提供的一个加密秘钥进行加密,并将加密后的二进制码封装进另一个WebAssembly文件中(后续简称xwasm文件),浏览器完成对xwasm文件的加载后,从xwasm文件暴露的方法中获取被加密后的wasm文件,并请求服务器获取解密秘钥,随后根据秘钥解密,得到原WebAssembly文件的二进制码,随后进行对原WebAssembly文件的编译。
具体实施时,可以提供一套加壳工具,该工具首先将原WebAssembly文件数据通过预设加密算法和使用者提供的一个加密秘钥进行加密,然后将加密后的二进制数据写进一个C/C++模板源码中(后续简称xwasm-src),xwasm使用char数组存储加密数据,并暴露一个接口,通过此接口可以获得加密后的数据,然后将xwasm-src编译得到xwasm。另外,还提供一个js文件,该文件重写了WebAssembly编译和实例化相关的函数,重写后的编译相关函数仅比原函数多了一个解密秘钥的参数,其执行过程为,在加载xwasm和获取加密后的原WebAssembly文件数据后,根据解密秘钥参数,解密还原WebAssembly文件数据,然后再进行相应的加载操作。在前端看来,只需引入提供的js文件和修改WebAssembly文件的加载代码(仅需额外再提供一个解密秘钥作为参数)即可,并不需要额外再修改其他主要逻辑代码。
参照图5所示为一个完整的使用WebAssembly文件的时序图;
1.JavaScript文件加载加壳后的WebAssembly文件;
2.WebAssembly文件脱壳后,将真正的WebAssembly文件写入到内存中;然后内存返回给WebAssembly文件加载完成,WebAssembly文件返回给JavaScript文件加载完成。
3.当JavaScript文件调用WebAssembly文件中被封装的方法时,从内存中获取脱壳WebAssembly数据中该方法地址并调用。
4.然后内存执行该方法,返回该结果给WebAssembly文件,该WebAssembly文件返回结果给JavaScript文件。
至此,完成WebAssembly文件的加载和调用。
基于同一发明构思,本发明实施例还提供了一种WebAssembly文件的处理系统,由于该系统所解决问题的原理与前述方法相似,因此该系统的实施可以参见前述方法的实施,重复之处不再赘述。
第二方面,本发明实施例还提供一种WebAssembly文件的处理系统,参照图6所示,包括:
域名验证模块61,用于在编译WebAssembly文件前,增加域名验证的机制;
秘钥验证模块62,用于在编译WebAssembly文件前,增加客户端与服务器端之间的秘钥验证机制;
加壳处理模块63,用于通过预设工具包,对编译后的WebAssembly文件进行加壳处理。
在一个实施例中,所述域名验证模块61,参照图6所示,包括:
第一获取子模块611,用于获取使用WebAssembly文件的目标网站域名;
判断子模块612,用于判断所述目标网站域名是否属于预设白名单列表中的域名;
第一使用子模块613,用于当所述目标网站域名在所述预设白名单列表中,则允许使用WebAssembly文件。
在一个实施例中,所述秘钥验证模块62,参照图7所示,包括:
确定子模块621,用于在编码阶段,确定一个秘钥key;所述key为数字、字符串或数字与字符串的组合;
第二获取子模块622,用于当WebAssembly文件加载完成后,获取客户端当前时间Time,浏览器信息BrowserData和/或长度为8的随机字符串RandomString;所述当前时间Time精确到时间戳的百分位;
第一生成子模块623,用于将所述Time,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第一md5值;
验证子模块624,用于WebAssembly文件向服务器端发送验证请求,并发送BrowserData和/或RandomString,服务器端获取请求后获取当前时间Stime;所述当前时间Stime精确到时间戳的百分位;
第二生成子模块625,用于服务器端将所述Stime,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第二md5值,并将第二md5值作为验证请求的返回数据;
对比子模块626,用于WebAssembly文件获取到验证请求的返回数据第二md5值后,与验证请求发送前生成的第一md5值比对;
第二使用子模块627,用于当一致时验证成功,允许使用WebAssembly文件。
在一个实施例中,所述加壳处理模块63,参照图6所示,包括:
加密子模块631,用于通过预设加密算法,将WebAssembly文件数据和使用者提供的一个加密秘钥进行加密;
封装子模块632,用于将加密后的二进制码封装进另一个WebAssembly文件中,称为xwasm文件;
构建子模块633,用于构建js文件,引用xwasm文件;所述js文件重写了WebAssembly编译和实例化相关的函数,所述相关函数包括一个解密秘钥的参数。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (9)
1.一种WebAssembly文件的处理方法,其特征在于,包括:
S1、在编译WebAssembly文件前,增加域名验证的机制;
S2、在编译WebAssembly文件前,增加客户端与服务器端之间的秘钥验证机制;
S3、通过预设工具包,对编译后的WebAssembly文件进行加壳处理。
2.如权利要求1所述的一种WebAssembly文件的处理方法,其特征在于,所述步骤S1,包括:
S11、获取使用WebAssembly文件的目标网站域名;
S12、判断所述目标网站域名是否属于预设白名单列表中的域名;
S13、当所述目标网站域名在所述预设白名单列表中,则允许使用WebAssembly文件。
3.如权利要求1所述的一种WebAssembly文件的处理方法,其特征在于,所述步骤S2,包括:
S21、在编码阶段,确定一个秘钥key;所述key为数字、字符串或数字与字符串的组合;
S22、当WebAssembly文件加载完成后,获取客户端当前时间Time,浏览器信息BrowserData和/或长度为8的随机字符串RandomString;所述当前时间Time精确到时间戳的百分位;
S23、将所述Time,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第一md5值;
S24、WebAssembly文件向服务器端发送验证请求,并发送BrowserData和/或RandomString,服务器端获取请求后获取当前时间Stime;所述当前时间Stime精确到时间戳的百分位;
S25、服务器端将所述Stime,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第二md5值,并将第二md5值作为验证请求的返回数据;
S26、WebAssembly文件获取到验证请求的返回数据第二md5值后,与验证请求发送前生成的第一md5值比对;
S27、当一致时验证成功,允许使用WebAssembly文件。
4.如权利要求3所述的一种WebAssembly文件的处理方法,其特征在于,所述步骤S2还包括:
S28、当验证不一致时,重复执行步骤S21~S26,当第二次验证成功,则允许使用WebAssembly文件。
5.如权利要求1所述的一种WebAssembly文件的处理方法,其特征在于,所述步骤S3,包括:
S31、通过预设加密算法,将WebAssembly文件数据和使用者提供的一个加密秘钥进行加密;
S32、将加密后的二进制码封装进另一个WebAssembly文件中,称为xwasm文件;
S33、构建js文件,引用xwasm文件;所述js文件重写了WebAssembly编译和实例化相关的函数,所述相关函数包括一个解密秘钥的参数。
6.一种WebAssembly文件的处理系统,其特征在于,包括:
域名验证模块,用于在编译WebAssembly文件前,增加域名验证的机制;
秘钥验证模块,用于在编译WebAssembly文件前,增加客户端与服务器端之间的秘钥验证机制;
加壳处理模块,用于通过预设工具包,对编译后的WebAssembly文件进行加壳处理。
7.如权利要求6所述的一种WebAssembly文件的处理系统,其特征在于,所述域名验证模块,包括:
第一获取子模块,用于获取使用WebAssembly文件的目标网站域名;
判断子模块,用于判断所述目标网站域名是否属于预设白名单列表中的域名;
第一使用子模块,用于当所述目标网站域名在所述预设白名单列表中,则允许使用WebAssembly文件。
8.如权利要求6所述的一种WebAssembly文件的处理系统,其特征在于,所述秘钥验证模块,包括:
确定子模块,用于在编码阶段,确定一个秘钥key;所述key为数字、字符串或数字与字符串的组合;
第二获取子模块,用于当WebAssembly文件加载完成后,获取客户端当前时间Time,浏览器信息BrowserData和/或长度为8的随机字符串RandomString;所述当前时间Time精确到时间戳的百分位;
第一生成子模块,用于将所述Time,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第一md5值;
验证子模块,用于WebAssembly文件向服务器端发送验证请求,并发送BrowserData和/或RandomString,服务器端获取请求后获取当前时间Stime;所述当前时间Stime精确到时间戳的百分位;
第二生成子模块,用于服务器端将所述Stime,BrowserData和/或RandomString组合成字符串,字符串中每一个字符的ASCII值依照顺序对应减去所述key中每一个字符的ASCII值,并取绝对值;根据所述绝对值生成第二md5值,并将第二md5值作为验证请求的返回数据;
对比子模块,用于WebAssembly文件获取到验证请求的返回数据第二md5值后,与验证请求发送前生成的第一md5值比对;
第二使用子模块,用于当一致时验证成功,允许使用WebAssembly文件。
9.如权利要求6所述的一种WebAssembly文件的处理系统,其特征在于,所述加壳处理模块,包括:
加密子模块,用于通过预设加密算法,将WebAssembly文件数据和使用者提供的一个加密秘钥进行加密;
封装子模块,用于将加密后的二进制码封装进另一个WebAssembly文件中,称为xwasm文件;
构建子模块,用于构建js文件,引用xwasm文件;所述js文件重写了WebAssembly编译和实例化相关的函数,所述相关函数包括一个解密秘钥的参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910721413.1A CN110489942B (zh) | 2019-08-06 | 2019-08-06 | 一种WebAssembly文件的处理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910721413.1A CN110489942B (zh) | 2019-08-06 | 2019-08-06 | 一种WebAssembly文件的处理方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110489942A true CN110489942A (zh) | 2019-11-22 |
CN110489942B CN110489942B (zh) | 2021-03-02 |
Family
ID=68549999
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910721413.1A Active CN110489942B (zh) | 2019-08-06 | 2019-08-06 | 一种WebAssembly文件的处理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110489942B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177712A (zh) * | 2019-12-31 | 2020-05-19 | 杭州趣链科技有限公司 | 一种基于TEE的WebAssembly模型执行引擎 |
CN112182617A (zh) * | 2020-09-29 | 2021-01-05 | 京东数字科技控股股份有限公司 | 针对接口请求的处理方法、装置及系统 |
CN113301038A (zh) * | 2021-05-20 | 2021-08-24 | 中国工商银行股份有限公司 | web端视频播放方法及装置 |
CN113722351A (zh) * | 2021-08-30 | 2021-11-30 | 杭州安恒信息安全技术有限公司 | Oracle数据库访问流量中的参数还原方法及装置 |
CN114706590A (zh) * | 2022-05-05 | 2022-07-05 | 北京万昇智能科技有限公司 | Plc应用包生成方法、plc应用执行方法及相关装置和系统 |
CN114995821A (zh) * | 2022-05-27 | 2022-09-02 | 杭州朝厚信息科技有限公司 | 基于WebAssembly的数据交互混淆方法及数据混淆器 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104700003A (zh) * | 2013-12-04 | 2015-06-10 | 腾讯科技(深圳)有限公司 | 一种文件加壳及脱壳方法、装置及系统 |
CN105975813A (zh) * | 2016-05-19 | 2016-09-28 | 福建创意嘉和软件有限公司 | 一种软件授权随机加密方法和装置 |
CN107463508A (zh) * | 2017-07-19 | 2017-12-12 | 北京微影时代科技有限公司 | 脚本缓存清除方法、装置、电子设备及存储介质 |
CN108595989A (zh) * | 2018-03-15 | 2018-09-28 | 杭州电子科技大学 | 一种iOS下移动APP安全防护系统及方法 |
CN108614960A (zh) * | 2018-05-11 | 2018-10-02 | 西北大学 | 一种基于前端字节码技术的JavaScript虚拟化保护方法 |
GB2563381A (en) * | 2017-06-06 | 2018-12-19 | Canon Kk | Method and apparatus for executing a scripting language |
CN109284104A (zh) * | 2018-09-28 | 2019-01-29 | 北京航空航天大学青岛研究院 | 基于网页汇编语言控制页面跳转的方法 |
CN109670128A (zh) * | 2018-11-06 | 2019-04-23 | 北京居然设计家网络科技有限公司 | 一种基于WebAssembly的网页应用实现方法及装置 |
CN110034926A (zh) * | 2019-03-08 | 2019-07-19 | 平安科技(深圳)有限公司 | 物联网动态密码的生成及验证方法、系统和计算机设备 |
CN110058904A (zh) * | 2019-04-24 | 2019-07-26 | 广东三维家信息科技有限公司 | 数据转移方法、装置及服务器 |
-
2019
- 2019-08-06 CN CN201910721413.1A patent/CN110489942B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104700003A (zh) * | 2013-12-04 | 2015-06-10 | 腾讯科技(深圳)有限公司 | 一种文件加壳及脱壳方法、装置及系统 |
CN105975813A (zh) * | 2016-05-19 | 2016-09-28 | 福建创意嘉和软件有限公司 | 一种软件授权随机加密方法和装置 |
GB2563381A (en) * | 2017-06-06 | 2018-12-19 | Canon Kk | Method and apparatus for executing a scripting language |
CN107463508A (zh) * | 2017-07-19 | 2017-12-12 | 北京微影时代科技有限公司 | 脚本缓存清除方法、装置、电子设备及存储介质 |
CN108595989A (zh) * | 2018-03-15 | 2018-09-28 | 杭州电子科技大学 | 一种iOS下移动APP安全防护系统及方法 |
CN108614960A (zh) * | 2018-05-11 | 2018-10-02 | 西北大学 | 一种基于前端字节码技术的JavaScript虚拟化保护方法 |
CN109284104A (zh) * | 2018-09-28 | 2019-01-29 | 北京航空航天大学青岛研究院 | 基于网页汇编语言控制页面跳转的方法 |
CN109670128A (zh) * | 2018-11-06 | 2019-04-23 | 北京居然设计家网络科技有限公司 | 一种基于WebAssembly的网页应用实现方法及装置 |
CN110034926A (zh) * | 2019-03-08 | 2019-07-19 | 平安科技(深圳)有限公司 | 物联网动态密码的生成及验证方法、系统和计算机设备 |
CN110058904A (zh) * | 2019-04-24 | 2019-07-26 | 广东三维家信息科技有限公司 | 数据转移方法、装置及服务器 |
Non-Patent Citations (2)
Title |
---|
ANDREAS HAAS等: "《Bringing the Web up to Speed with WebAssembly》", 《THE 38TH ACM SIGPLAN CONFERENCE》 * |
匡开圆: "《基于WebAssembly的JavaScript代码虚拟化保护方法研究与实现》", 《中国优秀硕士学位论文全文数据库(信息科技辑)》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177712A (zh) * | 2019-12-31 | 2020-05-19 | 杭州趣链科技有限公司 | 一种基于TEE的WebAssembly模型执行引擎 |
CN111177712B (zh) * | 2019-12-31 | 2022-06-03 | 杭州趣链科技有限公司 | 一种基于TEE的WebAssembly模型执行引擎 |
CN112182617A (zh) * | 2020-09-29 | 2021-01-05 | 京东数字科技控股股份有限公司 | 针对接口请求的处理方法、装置及系统 |
CN112182617B (zh) * | 2020-09-29 | 2024-08-20 | 京东科技控股股份有限公司 | 针对接口请求的处理方法、装置及系统 |
CN113301038A (zh) * | 2021-05-20 | 2021-08-24 | 中国工商银行股份有限公司 | web端视频播放方法及装置 |
CN113301038B (zh) * | 2021-05-20 | 2023-04-18 | 中国工商银行股份有限公司 | web端视频播放方法及装置 |
CN113722351A (zh) * | 2021-08-30 | 2021-11-30 | 杭州安恒信息安全技术有限公司 | Oracle数据库访问流量中的参数还原方法及装置 |
CN113722351B (zh) * | 2021-08-30 | 2024-01-30 | 杭州安恒信息安全技术有限公司 | Oracle数据库访问流量中的参数还原方法及装置 |
CN114706590A (zh) * | 2022-05-05 | 2022-07-05 | 北京万昇智能科技有限公司 | Plc应用包生成方法、plc应用执行方法及相关装置和系统 |
CN114995821A (zh) * | 2022-05-27 | 2022-09-02 | 杭州朝厚信息科技有限公司 | 基于WebAssembly的数据交互混淆方法及数据混淆器 |
Also Published As
Publication number | Publication date |
---|---|
CN110489942B (zh) | 2021-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110489942A (zh) | 一种WebAssembly文件的处理方法及系统 | |
KR101471589B1 (ko) | 공통중간언어 기반 프로그램을 위한 보안 제공 방법 | |
JP6257754B2 (ja) | データの保護 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
US9135434B2 (en) | System and method for third party creation of applications for mobile appliances | |
EP3005209B1 (en) | Web application protection | |
CN102236757A (zh) | 一种适用于Android系统的软件保护方法及系统 | |
CN104392181A (zh) | So文件的保护方法、装置及安卓安装包的加固方法和系统 | |
CN109284585B (zh) | 一种脚本加密方法、脚本解密运行方法和相关装置 | |
WO2023029447A1 (zh) | 模型保护方法、装置、设备、系统以及存储介质 | |
CN106326691B (zh) | 加解密功能的实现方法、装置及服务器 | |
CN107871066B (zh) | 基于安卓系统的代码编译方法及装置 | |
CN111143877B (zh) | 加密基于Python的风光预测算法文件的方法及装置 | |
CN114547558A (zh) | 授权方法、授权控制方法及装置、设备和介质 | |
CN113449330B (zh) | 对Javascript加密文件进行传输的方法 | |
CN112613023A (zh) | 一种认证信息生成算法的保护方法和终端 | |
CN110046496B (zh) | 一种软件开发方法、系统及区块链节点设备和存储介质 | |
CN114238870A (zh) | 一种网络请求处理方法、装置、设备及存储介质 | |
CN115422561A (zh) | 一种Web端明文数据交互安全加密处理方法及系统 | |
WO2014191965A1 (en) | Digital content execution control mechanism | |
CN113282893A (zh) | 源代码加固方法、装置、计算机设备和存储介质 | |
CN108845805B (zh) | 一种软件连接的方法 | |
CN112883391A (zh) | 数据保护方法、装置以及电子设备 | |
Lloyd et al. | Security analysis of a biometric authentication system using UMLsec and JML | |
CN112597453A (zh) | 程序代码加密解密方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |