一种编程语言代码动态混淆方法及系统与流程

文档序号:31333332发布日期:2022-08-31 07:48阅读:67来源:国知局
一种编程语言代码动态混淆方法及系统与流程

1.本公开属于数据保护技术领域,具体涉及一种编程语言代码动态混淆方法及系统。


背景技术:

2.本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。
3.编程语言在处理过程中需要把源代码下载到浏览器端进行解析运行;源代码会直接暴露给用户,如果用户具有编程能力或有攻击意向的人可以通过分析源代码中的代码逻辑查找代码漏洞,从而窃取关键数据,造成经济损失。
4.据发明人了解,常用的编程语言代码混淆技术有:
5.(1)编程语言代码压缩技术,将编程语言代码中命名的变量、方法名进行无含义转换,将代码中的换行符、空格、制表符进行去除,降低代码的体积,降低代码的可阅读性;其成本较低,可通过专门的解压缩方式来提高代码的可阅读性;但是,无法避免相同的编程语言代码产生相同的混淆代码。
6.(2)基于证书的编程语言代码加密技术,使用ssl证书对源代码进行加密,浏览器端使用本地证书进行数据解密;数据在传输过程中是加密状态,如果没有证书,拦截后也无法获取到源代码;但是可通过浏览器提供的控制台工具获取到编程语言代码,存在原始编程语言代码泄露的风险。
7.(3)基于浏览器混淆sdk的编程语言代码混淆技术,在浏览器端编写混淆代码解码的代码,通过浏览器下载混淆后的代码,解码混淆后的代码后运行;但是无法判断解码混淆代码的代码是否也做了混淆,若解码代码没有做混淆,则仍然存在原始编程语言代码泄露的风险。


技术实现要素:

8.为了解决上述问题,本公开提出了一种编程语言代码动态混淆方法及系统,增强源代码的变化性和随机性,避免相同的编程语言代码每次产生相同的混淆代码,结合浏览器执行混淆后的第二编程语言代码,提升编程语言代码的执行效率和代码安全性,在混淆后的代码中注入代码有效期,防止代码被盗取后可以无限期的使用。
9.根据一些实施例,本公开的第一方案提供了一种编程语言代码动态混淆方法,采用如下技术方案:
10.一种编程语言代码动态混淆方法,包括:
11.对原始编程语言进行代码压缩,得到第一编程代码;
12.读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
13.在所构建的混淆函数中追加混淆注释,得到第二编程代码;
14.读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代
码;
15.将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
16.根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
17.作为进一步的技术限定,通过javascript代码压缩技术进行原始编程语言的代码压缩,采用javascript代码替换原始编程语言代码中的回车符和制表符,得到第一编程代码。
18.作为进一步的技术限定,读取所述第一编程代码中所有的字符,根据所读取字符的数量创建混淆函数,基于guid字符压缩得到8位字符长度的随机字符串,构建随机函数;基于所得到的随机函数,在混淆函数中追加混淆注释,得到第二编程代码。
19.进一步的,所述混淆注释为使用guid字符串压缩所得到的8位长度的随机字符串用多行注释符包裹后所得到的。
20.作为进一步的技术限定,读取所述第一编程代码中所有字符的二进制值,对二进制值与随机生成的整数值做加和运算,形成新的整数值;对所形成的新的整数值进行随机函数绑定,通过随机函数追加用于对所得到的新的整数值,还原二进制值的运算表达式,得到混淆代码。
21.进一步的,将所得到的混淆代码追加到所述第二编程代码中,得到string.fromcharcode混淆匿名函数,在混淆函数中追加混淆后的有效期逻辑代码。
22.作为进一步的技术限定,将混淆后的第二编程代码返回浏览器,基于混淆代码中的string.fromcharcode函数,返回第一编程代码中二进制值所对应的字符,在浏览器端还原原始编程语言。
23.根据一些实施例,本公开的第二方案提供了一种编程语言代码动态混淆系统,采用如下技术方案:
24.一种编程语言代码动态混淆系统,包括:
25.获取模块,其被配置为对原始编程语言进行代码压缩,得到第一编程代码;
26.构建模块,其被配置为读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
27.匿名模块,其被配置为在所构建的混淆函数中追加混淆注释,得到第二编程代码;读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
28.混淆模块,其被配置为根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
29.根据一些实施例,本公开的第三方案提供了一种计算机可读存储介质,采用如下技术方案:
30.一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开第一方面所述的编程语言代码动态混淆方法中的步骤。
31.根据一些实施例,本公开的第四方案提供了一种电子设备,采用如下技术方案:
32.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开第一方面所述的编程语言代码动态混淆方法
中的步骤。
33.与现有技术相比,本公开的有益效果为:
34.本公开通过在代码的二进制值中加入随机的整数值用来混淆原代码的二进制值;通过在代码中增加随机的8位字符长度的随机函数,并在函数中增加随机注释来降低代码的可读性;在代码中注入混淆后的有效期逻辑代码,来保障代码的授权期限,避免代码被下载后可以无限期运行。
附图说明
35.构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
36.图1是本公开实施例一中的编程语言代码动态混淆方法的流程图;
37.图2是本公开实施例二中的编程语言代码动态混淆系统的结构框图。
具体实施方式
38.下面结合附图与实施例对本公开作进一步说明。
39.应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
40.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
41.在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
42.术语解释:
43.guid:全局唯一标识符,是一种由算法生成的二进制长度的数字标识符,全球唯一。
44.javascript:是一种函数优先的轻量级,解释型或即时编译型的编程语言。
45.代码混淆:是指将源代码中比如变量、函数、类的名字改成无意义的,通过增加注释,无意义字符等方式增加阅读难度。
46.guid字符串压缩:guid字符串压缩即通过md5运算方法,对随机产生的guid字符串计算md5值,计算后的md5值为32位16进制字符串。每四位一组对整数62进行取余运算,得到的余数作为索引在0-9a-za-z的字符串中获取字符,最后将8个运算后的字符进行拼接就得到了一个8位长度的压缩字符串。
47.混淆匿名函数:是在将原明文的函数,便于阅读理解的函数名,通过运算转换为晦涩难懂,不便于阅读的函数名。
48.实施例一
49.本公开实施例一介绍了一种编程语言代码动态混淆方法。
50.如图1所示的一种编程语言代码动态混淆方法,包括:
51.对原始编程语言进行代码压缩,得到第一编程代码;
52.读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
53.在所构建的混淆函数中追加混淆注释,得到第二编程代码;
54.读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;
55.将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
56.根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
57.作为一种或多种实施方式,通过javascript代码压缩技术进行原始编程语言的代码压缩,采用javascript代码替换原始编程语言代码中的回车符和制表符,得到第一编程代码。
58.作为一种或多种实施方式,读取所述第一编程代码中所有的字符,根据所读取字符的数量创建混淆函数,基于guid字符压缩得到8位字符长度的随机字符串,构建随机函数;基于所得到的随机函数,在混淆函数中追加混淆注释,得到第二编程代码。
59.在本实施例中,混淆注释是guid压缩后的8位字符串,用多行注释符包裹,用于扰乱源代码。
60.在本实施例中,随机函数又叫匿名函数,即指没有指定函数名的函数;混淆用的匿名函数简称混淆匿名函数。
61.在本实施例中,根据字符串的数量除以基数取整后,基于计算所得的整数值进行循环来完成对应比例的混淆函数。
62.使用guid字符串压缩得到一个8位字符串的作为函数名称,函数体中分别用多段多行注释符包裹的guid压缩得到的一个8位字符串混淆注释。注释之间分别是return和arguments[0]。
[0063]
作为一种或多种实施方式,读取所述第一编程代码中所有字符的二进制值,对二进制值与随机生成的整数值做加和运算,形成新的整数值;对所形成的新的整数值进行随机函数绑定,通过随机函数追加用于对所得到的新的整数值)还原二进制值的运算表达式,得到混淆代码;
[0064]
将所得到的混淆代码追加到所述第二编程代码中,得到string.fromcharcode混淆匿名函数,在混淆函数中追加混淆后的有效期逻辑代码。
[0065]
在本实施例中,有效期逻辑代码码是固定的,可通过获取浏览器本地时间和服务器混淆时间进行差值运算。差值在允许范围内则代表代码在有效期内。
[0066]
作为一种或多种实施方式,将混淆后的第二编程代码返回浏览器,基于混淆代码中的string.fromcharcode函数,返回第一编程代码中二进制值所对应的字符,在浏览器端还原原始编程语言。
[0067]
本实施例通过在代码的二进制值中加入随机的整数值用来混淆原代码的二进制值;通过在代码中增加随机的8位字符长度的随机函数,并在函数中增加随机注释来降低代码的可读性;在代码中注入混淆后的有效期逻辑代码,来保障代码的授权期限,避免代码被下载后可以无限期运行。
[0068]
实施例二
[0069]
本公开实施例二介绍了一种编程语言代码动态混淆系统。
[0070]
如图2所示的一种编程语言代码动态混淆系统,包括:
[0071]
获取模块,其被配置为对原始编程语言进行代码压缩,得到第一编程代码;
[0072]
构建模块,其被配置为读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
[0073]
匿名模块,其被配置为在所构建的混淆函数中追加混淆注释,得到第二编程代码;读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
[0074]
混淆模块,其被配置为根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
[0075]
详细步骤与实施例一提供的编程语言代码动态混淆方法相同,在此不再赘述。
[0076]
实施例三
[0077]
本公开实施例三提供了一种计算机可读存储介质。
[0078]
一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开实施例一所述的编程语言代码动态混淆方法中的步骤。
[0079]
详细步骤与实施例一提供的编程语言代码动态混淆方法相同,在此不再赘述。
[0080]
实施例四
[0081]
本公开实施例四提供了一种电子设备。
[0082]
一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开实施例一所述的编程语言代码动态混淆方法中的步骤。
[0083]
详细步骤与实施例一提供的编程语言代码动态混淆方法相同,在此不再赘述。
[0084]
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1