CN114968206A - 一种编程语言代码动态混淆方法及系统 - Google Patents
一种编程语言代码动态混淆方法及系统 Download PDFInfo
- Publication number
- CN114968206A CN114968206A CN202210575389.7A CN202210575389A CN114968206A CN 114968206 A CN114968206 A CN 114968206A CN 202210575389 A CN202210575389 A CN 202210575389A CN 114968206 A CN114968206 A CN 114968206A
- Authority
- CN
- China
- Prior art keywords
- code
- programming
- obfuscated
- function
- programming language
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 230000006870 function Effects 0.000 claims abstract description 77
- 230000006835 compression Effects 0.000 claims abstract description 19
- 238000007906 compression Methods 0.000 claims abstract description 19
- 238000013475 authorization Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Document Processing Apparatus (AREA)
Abstract
本公开属于数据保护技术领域,具体涉及一种编程语言代码动态混淆方法及系统,包括:对原始编程语言进行代码压缩,得到第一编程代码;读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;在所构建的混淆函数中追加混淆注释,得到第二编程代码;读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
Description
技术领域
本公开属于数据保护技术领域,具体涉及一种编程语言代码动态混淆方法及系统。
背景技术
本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。
编程语言在处理过程中需要把源代码下载到浏览器端进行解析运行;源代码会直接暴露给用户,如果用户具有编程能力或有攻击意向的人可以通过分析源代码中的代码逻辑查找代码漏洞,从而窃取关键数据,造成经济损失。
据发明人了解,常用的编程语言代码混淆技术有:
(1)编程语言代码压缩技术,将编程语言代码中命名的变量、方法名进行无含义转换,将代码中的换行符、空格、制表符进行去除,降低代码的体积,降低代码的可阅读性;其成本较低,可通过专门的解压缩方式来提高代码的可阅读性;但是,无法避免相同的编程语言代码产生相同的混淆代码。
(2)基于证书的编程语言代码加密技术,使用SSL证书对源代码进行加密,浏览器端使用本地证书进行数据解密;数据在传输过程中是加密状态,如果没有证书,拦截后也无法获取到源代码;但是可通过浏览器提供的控制台工具获取到编程语言代码,存在原始编程语言代码泄露的风险。
(3)基于浏览器混淆SDK的编程语言代码混淆技术,在浏览器端编写混淆代码解码的代码,通过浏览器下载混淆后的代码,解码混淆后的代码后运行;但是无法判断解码混淆代码的代码是否也做了混淆,若解码代码没有做混淆,则仍然存在原始编程语言代码泄露的风险。
发明内容
为了解决上述问题,本公开提出了一种编程语言代码动态混淆方法及系统,增强源代码的变化性和随机性,避免相同的编程语言代码每次产生相同的混淆代码,结合浏览器执行混淆后的第二编程语言代码,提升编程语言代码的执行效率和代码安全性,在混淆后的代码中注入代码有效期,防止代码被盗取后可以无限期的使用。
根据一些实施例,本公开的第一方案提供了一种编程语言代码动态混淆方法,采用如下技术方案:
一种编程语言代码动态混淆方法,包括:
对原始编程语言进行代码压缩,得到第一编程代码;
读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
在所构建的混淆函数中追加混淆注释,得到第二编程代码;
读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;
将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
作为进一步的技术限定,通过JavaScript代码压缩技术进行原始编程语言的代码压缩,采用JavaScript代码替换原始编程语言代码中的回车符和制表符,得到第一编程代码。
作为进一步的技术限定,读取所述第一编程代码中所有的字符,根据所读取字符的数量创建混淆函数,基于GUID字符压缩得到8位字符长度的随机字符串,构建随机函数;基于所得到的随机函数,在混淆函数中追加混淆注释,得到第二编程代码。
进一步的,所述混淆注释为使用GUID字符串压缩所得到的8位长度的随机字符串用多行注释符包裹后所得到的。
作为进一步的技术限定,读取所述第一编程代码中所有字符的二进制值,对二进制值与随机生成的整数值做加和运算,形成新的整数值;对所形成的新的整数值进行随机函数绑定,通过随机函数追加用于对所得到的新的整数值,还原二进制值的运算表达式,得到混淆代码。
进一步的,将所得到的混淆代码追加到所述第二编程代码中,得到String.fromCharCode混淆匿名函数,在混淆函数中追加混淆后的有效期逻辑代码。
作为进一步的技术限定,将混淆后的第二编程代码返回浏览器,基于混淆代码中的String.fromCharCode函数,返回第一编程代码中二进制值所对应的字符,在浏览器端还原原始编程语言。
根据一些实施例,本公开的第二方案提供了一种编程语言代码动态混淆系统,采用如下技术方案:
一种编程语言代码动态混淆系统,包括:
获取模块,其被配置为对原始编程语言进行代码压缩,得到第一编程代码;
构建模块,其被配置为读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
匿名模块,其被配置为在所构建的混淆函数中追加混淆注释,得到第二编程代码;读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
混淆模块,其被配置为根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
根据一些实施例,本公开的第三方案提供了一种计算机可读存储介质,采用如下技术方案:
一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开第一方面所述的编程语言代码动态混淆方法中的步骤。
根据一些实施例,本公开的第四方案提供了一种电子设备,采用如下技术方案:
一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开第一方面所述的编程语言代码动态混淆方法中的步骤。
与现有技术相比,本公开的有益效果为:
本公开通过在代码的二进制值中加入随机的整数值用来混淆原代码的二进制值;通过在代码中增加随机的8位字符长度的随机函数,并在函数中增加随机注释来降低代码的可读性;在代码中注入混淆后的有效期逻辑代码,来保障代码的授权期限,避免代码被下载后可以无限期运行。
附图说明
构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
图1是本公开实施例一中的编程语言代码动态混淆方法的流程图;
图2是本公开实施例二中的编程语言代码动态混淆系统的结构框图。
具体实施方式
下面结合附图与实施例对本公开作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
术语解释:
GUID:全局唯一标识符,是一种由算法生成的二进制长度的数字标识符,全球唯一。
JavaScript:是一种函数优先的轻量级,解释型或即时编译型的编程语言。
代码混淆:是指将源代码中比如变量、函数、类的名字改成无意义的,通过增加注释,无意义字符等方式增加阅读难度。
GUID字符串压缩:GUID字符串压缩即通过MD5运算方法,对随机产生的GUID字符串计算MD5值,计算后的MD5值为32位16进制字符串。每四位一组对整数62进行取余运算,得到的余数作为索引在0-9A-Za-z的字符串中获取字符,最后将8个运算后的字符进行拼接就得到了一个8位长度的压缩字符串。
混淆匿名函数:是在将原明文的函数,便于阅读理解的函数名,通过运算转换为晦涩难懂,不便于阅读的函数名。
实施例一
本公开实施例一介绍了一种编程语言代码动态混淆方法。
如图1所示的一种编程语言代码动态混淆方法,包括:
对原始编程语言进行代码压缩,得到第一编程代码;
读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
在所构建的混淆函数中追加混淆注释,得到第二编程代码;
读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;
将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
作为一种或多种实施方式,通过JavaScript代码压缩技术进行原始编程语言的代码压缩,采用JavaScript代码替换原始编程语言代码中的回车符和制表符,得到第一编程代码。
作为一种或多种实施方式,读取所述第一编程代码中所有的字符,根据所读取字符的数量创建混淆函数,基于GUID字符压缩得到8位字符长度的随机字符串,构建随机函数;基于所得到的随机函数,在混淆函数中追加混淆注释,得到第二编程代码。
在本实施例中,混淆注释是GUID压缩后的8位字符串,用多行注释符包裹,用于扰乱源代码。
在本实施例中,随机函数又叫匿名函数,即指没有指定函数名的函数;混淆用的匿名函数简称混淆匿名函数。
在本实施例中,根据字符串的数量除以基数取整后,基于计算所得的整数值进行循环来完成对应比例的混淆函数。
使用GUID字符串压缩得到一个8位字符串的作为函数名称,函数体中分别用多段多行注释符包裹的GUID压缩得到的一个8位字符串混淆注释。注释之间分别是return和arguments[0]。
作为一种或多种实施方式,读取所述第一编程代码中所有字符的二进制值,对二进制值与随机生成的整数值做加和运算,形成新的整数值;对所形成的新的整数值进行随机函数绑定,通过随机函数追加用于对所得到的新的整数值)还原二进制值的运算表达式,得到混淆代码;
将所得到的混淆代码追加到所述第二编程代码中,得到String.fromCharCode混淆匿名函数,在混淆函数中追加混淆后的有效期逻辑代码。
在本实施例中,有效期逻辑代码码是固定的,可通过获取浏览器本地时间和服务器混淆时间进行差值运算。差值在允许范围内则代表代码在有效期内。
作为一种或多种实施方式,将混淆后的第二编程代码返回浏览器,基于混淆代码中的String.fromCharCode函数,返回第一编程代码中二进制值所对应的字符,在浏览器端还原原始编程语言。
本实施例通过在代码的二进制值中加入随机的整数值用来混淆原代码的二进制值;通过在代码中增加随机的8位字符长度的随机函数,并在函数中增加随机注释来降低代码的可读性;在代码中注入混淆后的有效期逻辑代码,来保障代码的授权期限,避免代码被下载后可以无限期运行。
实施例二
本公开实施例二介绍了一种编程语言代码动态混淆系统。
如图2所示的一种编程语言代码动态混淆系统,包括:
获取模块,其被配置为对原始编程语言进行代码压缩,得到第一编程代码;
构建模块,其被配置为读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
匿名模块,其被配置为在所构建的混淆函数中追加混淆注释,得到第二编程代码;读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
混淆模块,其被配置为根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
详细步骤与实施例一提供的编程语言代码动态混淆方法相同,在此不再赘述。
实施例三
本公开实施例三提供了一种计算机可读存储介质。
一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开实施例一所述的编程语言代码动态混淆方法中的步骤。
详细步骤与实施例一提供的编程语言代码动态混淆方法相同,在此不再赘述。
实施例四
本公开实施例四提供了一种电子设备。
一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开实施例一所述的编程语言代码动态混淆方法中的步骤。
详细步骤与实施例一提供的编程语言代码动态混淆方法相同,在此不再赘述。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (10)
1.一种编程语言代码动态混淆方法,其特征在于,包括:
对原始编程语言进行代码压缩,得到第一编程代码;
读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
在所构建的混淆函数中追加混淆注释,得到第二编程代码;
读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;
将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
2.如权利要求1中所述的一种编程语言代码动态混淆方法,其特征在于,通过JavaScript代码压缩技术进行原始编程语言的代码压缩,采用JavaScript代码替换原始编程语言代码中的回车符和制表符,得到第一编程代码。
3.如权利要求1中所述的一种编程语言代码动态混淆方法,其特征在于,读取所述第一编程代码中所有的字符,根据所读取字符的数量创建混淆函数,基于GUID字符压缩得到8位字符长度的随机字符串,构建随机函数;基于所得到的随机函数,在混淆函数中追加混淆注释,得到第二编程代码。
4.如权利要求3中所述的一种编程语言代码动态混淆方法,其特征在于,所述混淆注释为使用GUID字符串压缩所得到的8位长度的随机字符串用多行注释符包裹后所得到的。
5.如权利要求1中所述的一种编程语言代码动态混淆方法,其特征在于,读取所述第一编程代码中所有字符的二进制值,对二进制值与随机生成的整数值做加和运算,形成新的整数值;对所形成的新的整数值进行随机函数绑定,通过随机函数追加用于对所得到的新的整数值还原二进制值的运算表达式,得到混淆代码。
6.如权利要求5中所述的一种编程语言代码动态混淆方法,其特征在于,将所得到的混淆代码追加到所述第二编程代码中,得到String.fromCharCode混淆匿名函数,在混淆函数中追加混淆后的有效期逻辑代码。
7.如权利要求1中所述的一种编程语言代码动态混淆方法,其特征在于,将混淆后的第二编程代码返回浏览器,基于混淆代码中的String.fromCharCode函数,返回第一编程代码中二进制值所对应的字符,在浏览器端还原原始编程语言。
8.一种编程语言代码动态混淆系统,其特征在于,包括:
获取模块,其被配置为对原始编程语言进行代码压缩,得到第一编程代码;
构建模块,其被配置为读取所得到的第一编程代码中的字符,构建混淆函数和随机函数;
匿名模块,其被配置为在所构建的混淆函数中追加混淆注释,得到第二编程代码;读取所述第一编程代码中字符的二进制值,基于所构建的随机函数得到混淆代码;将所得到的混淆代码追加到所述第二编程代码中,得到混淆匿名函数;
混淆模块,其被配置为根据所得到的混淆匿名函数和混淆代码,返回所述第一编程代码中的字符,还原原始编程语言。
9.一种计算机可读存储介质,其上存储有程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的编程语言代码动态混淆方法中的步骤。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中任一项所述的编程语言代码动态混淆方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210575389.7A CN114968206A (zh) | 2022-05-25 | 2022-05-25 | 一种编程语言代码动态混淆方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210575389.7A CN114968206A (zh) | 2022-05-25 | 2022-05-25 | 一种编程语言代码动态混淆方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114968206A true CN114968206A (zh) | 2022-08-30 |
Family
ID=82956606
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210575389.7A Pending CN114968206A (zh) | 2022-05-25 | 2022-05-25 | 一种编程语言代码动态混淆方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114968206A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115935303A (zh) * | 2023-03-14 | 2023-04-07 | 北京有生博大软件股份有限公司 | 一种基于前后端分离架构的前端双随机多态混淆方法 |
-
2022
- 2022-05-25 CN CN202210575389.7A patent/CN114968206A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115935303A (zh) * | 2023-03-14 | 2023-04-07 | 北京有生博大软件股份有限公司 | 一种基于前后端分离架构的前端双随机多态混淆方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6257754B2 (ja) | データの保護 | |
JP2021513141A (ja) | 2次元バーコードの生成及び識別 | |
EP2656266B1 (en) | Improvements relating to cryptography using polymorphic code | |
CN110598379B (zh) | 一种实现字符串混淆的方法、设备及存储介质 | |
CN115051798B (zh) | 一种随机数生成方法、装置、电子设备及存储介质 | |
CN111475543A (zh) | 一种模糊搜索方法、装置、计算机设备及存储介质 | |
WO2015035827A1 (en) | Method and apparatus for providing string encryption and decryption in program files | |
CN110704854B (zh) | 针对文本数据保留格式的流式加密方法 | |
US8677149B2 (en) | Method and system for protecting intellectual property in software | |
CN114840861A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN114968206A (zh) | 一种编程语言代码动态混淆方法及系统 | |
Baawi et al. | Enhancement of text steganography technique using Lempel-Ziv-Welch Algorithm and two-letter word technique | |
CN117093964A (zh) | 一种源代码的加密方法、装置、存储介质及电子设备 | |
CN116366231B (zh) | 一种基于加密混淆保护网站资源的反爬虫方法及系统 | |
CN117390603A (zh) | 基于前端代码加密的访问方法、装置、电子设备及介质 | |
CN112528342B (zh) | 一种基于编译中间结果的软件保护方法 | |
CN115577374A (zh) | 一种基于md5的加密融合存储方法、设备及介质 | |
Manikandasaran et al. | MONcrypt: a technique to ensure the confidentiality of outsourced data in cloud storage | |
CN114357391A (zh) | 数据加、解密方法及计算机存储介质 | |
CN111651781B (zh) | 日志内容保护方法、装置、计算机设备和存储介质 | |
CN111064560B (zh) | 数据加密传输方法及装置、终端、数据加密传输系统 | |
CN111291333A (zh) | 一种Java应用程序加密方法及装置 | |
CN113360859B (zh) | 基于Python解释器的加密文件安全控制方法和装置 | |
CN116108460A (zh) | 一种适用于Electron的源码文件安全加密方法、装置及设备 | |
CN113572593B (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 |